请求转发(request对象)和重定向(response)的区别及何时使用请求转发和重定向
标题request和response主要区别:
1、 请求转发使用 request对象,重定向使用 response 对象
2、 请求转发使用服务器端路径,重定向使用客户端路径
3、 请求转发不能跳转外网,重定向可以跳转外网
4、 请求转发是服务器内部的跳转,不依赖网速,跳转速度极快
——重定向是依赖浏览器的跳转,严重依赖网速,跳转速度略慢
5、 请求转发:请求一次,响应一次, 占用资源少
——重定向:重定向 N 次,响应 n+1 次,占用大量资源
6、 请求转发可以访问受保护目录资源WEB-INF,重定向不能访问受保护目录
7、 请求转发不会改变地址栏路径,重定向会改变路径。
——安全:请求转发。会隐藏后面转发程序的访问路径。
——程序 BUG:由于请求转发不会更改地址,会导致用户重复访问某个 Servlet程序。解决方案:建议改为重定向
8、 请求转发可以使用 request 作用域,重定向不能使用request作用域
何时使用request和response
何时使用请求转发。
1、 为了安全,隐藏某些程序的访问路径
2、 为了效率
3、 为了内存占用率低
4、 访问受保护目录资源
5、 使用 request 作用域
何时使用重定向:
1、 跳转外网路径
2、 改变地址栏访问路径
除了以上 7 种情况外,两种跳转方式可以相互替代使用
请求转发&重定向图示
请求外网,用重定向,其他所有使用请求转发即可
request原理简述&继承树&行头体操作
原理
继承树
行
public void t2(){//http://localhost:8080/day05/d1?method=t2//操作请求行System.out.println(getRequest().getRemoteAddr());//0:0:0:0:0:0:0:1 因为是服务器自己开浏览器访问自己,所以客户端地址仍然是服务器的System.out.println(getRequest().getContextPath());// /day05System.out.println(getRequest().getMethod());//GETSystem.out.println(getRequest().getRequestURI());// /day05/d1System.out.println(getRequest().getQueryString());// method=t2System.out.println(getRequest().getProtocol());// HTTP/1.1System.out.println(getRequest().getServletPath());// /d1System.out.println(getRequest().getRemoteHost());// 0:0:0:0:0:0:0:1 因为是服务器自己开浏览器访问自己,所以客户端主机仍然是服务器的System.out.println(getRequest().getRemotePort());// 51088System.out.println(getRequest().getLocalAddr());// 0:0:0:0:0:0:0:1
头
public void t3(){HttpServletRequest request = getRequest();System.out.println(request.getHeader("Accept"));System.out.println(request.getHeader("User-Agent"));System.out.println(request.getHeader("aa"));//null
}
体
public void t1(){//后台进行数据获取时,get遇到中文或特殊符号,会导致乱码问题//1、写过滤器//2、使用tomcat8.5或以上版本Person person = toBean(Person.class);System.out.println(person);//原生获取方式System.out.println("----------");String username = getRequest().getParameter("username");String aaa = getRequest().getParameter("aaa");String hobbyStr = getRequest().getParameter("hobby");System.out.println(username);System.out.println(aaa);System.out.println(hobbyStr);System.out.println("----------");String[] hobbies = getRequest().getParameterValues("hobby");System.out.println(Arrays.toString(hobbies));String[] bbb = getRequest().getParameterValues("bbb");System.out.println(bbb);System.out.println("----------");Map<String, String[]> map = getRequest().getParameterMap();System.out.println(map);
}
response原理简述&继承树&行头体操作
原理概述
继承树
行
头
public void t6(){HttpServletResponse response = getResponse();//追加response.addHeader("aa","a1");response.addHeader("aa","a2");//覆盖response.setHeader("bb","b1");response.setHeader("bb","b2");//如果响应体中,包含中文//response.setCharacterEncoding("utf-8");//设置响应体的编码为utf-8response.setContentType("text/html;charset=utf-8");//设置响应体里是html文本,编码是Utf-8
}
体
响应体信息无限,所以一般用来传递大量数据。
字节流:” getOutputStream()
向响应体输出二进制字节流信息。【文件下载】
字符流:”getWriter()
向响应体输出字符流信息。【字符串及前端代码输出,Ajax,axios】
若输出前端代码,则会被浏览器解析执行
两个方法我们都使用其 write()方法进行数据输出。
<------------------------------------------------------->
public void t7() throws IOException {//注意:两个流不能同时调用, 否则出现异常:IllegalStateExceptionHttpServletResponse response = getResponse();//字节流
// ServletOutputStream os = response.getOutputStream();
// os.write(" 今天天气好晴朗 ".getBytes("utf-8"));//字符流PrintWriter writer = response.getWriter();writer.write("<h1>今天天气好晴朗</h1>");writer.flush();//建议刷流操作在请求转发中不要使用writer.write("<h1>处处好风光</h1>");//writer.close();//建议:不建议手动关流,因为该流是由服务器创建,服务器会对该流进行close()操作}
请求转发(request对象)和重定向(response)的区别及何时使用请求转发和重定向相关推荐
- Servlet转发forward和重定向response.sendRedirect()区别
转发(forward):浏览器地址不会改变,始终是同一个请求.执行forward时,浏览器不知道服务器发送的内容是从何处来,浏览器地址栏中还是原来的地址.forward是内部重定向. 重定向(send ...
- Node之HTTP模块(request对象解析、response对象解析、图片上传)
文章目录 一.什么是Web服务器? 1.1 web服务器初体验 1.2 另外一种创建方式 1.3 listen方法的参数详解 二.request对象解析 2.1 基本使用 2.2 进阶使用 2.3 m ...
- Javaweb-Servlet总结(概述、接口使用、配置、获取请求方式、路径操作、Request对象、Response对象)
文章目录 Servlet概述 Servlet核心接口和类 三种自定义Servlet接口的方法 1.实现Servlet接口 2.继承GenericServlet抽象类 3.继承HttpServlet抽象 ...
- java Request对象和Response对象详解
一:概述 Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象一.Response对象1.Resonse的继承结构:S ...
- request 对象和 response 对象
Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象 HttpServletResponse HttpServletR ...
- Flask框架(flask中的request对象,获取请求参数,保存上传的文件)
1.request中包含了前端发送过来的所有数据 ,请求的 request 对象中保存了一次HTTP请求的一切信息. 通过request.from可以直接发送提取请求体中的表单格式数据,是一个类字典的 ...
- 【JavaWeb】Request对象详解
HTTP之Request:接上一篇博文HTTP协议详细. 本文目录 一.Request请求 1.Request对象和Response对象的原理 2.Request对象继承体系结构 3.Request功 ...
- request对象_爬虫:request库的简介
一. request库的安装 在命令行输入pip install requests进行安装 随后进行调用,发现成功 二. request库的最常用方法:get 方法 r= request.get(ur ...
- Javaweb 快速入门之jsp基本语法表单提交方式request对象
文章目录 一.jsp简介 二.jsp之表单提交方式 三.jsp内置函数 总结 一.jsp简介 1.jsp简介 (1)jsp全称:java server pages java服务 ...
- Request对象详细介绍
1.Request对象 是当客户端向服务器端发送请求时,服务器为本次请求创建request对象,并在调用Servlet的service方法时,将该对象传递给service方法.Request对象中封装 ...
最新文章
- 一个框架看懂优化算法之异同 SGD/AdaGrad/Adam
- Angular 4 依赖注入教程之一 依赖注入简介
- C#操作注册表全攻略
- 计算机组成原理答案郑秋梅,计算机组成原理-郑秋梅_习题.docx
- macos 此服务器的证书无效_网易出现重大失误,忘记续费HTTPS证书导致大量用户受影响...
- PHP MySQL 相关函数(上)
- 第四代移动机器人:灵动科技V-AMR全球首发
- Intellij Idea下tomcat设置自动编译
- 第五章 shell学习之文件的排序、合并和分割
- WPF 微信 MVVM 【续】发送部分QQ表情
- 用Java实现md5加密
- TensorFlow学习记录:saved_model模块的用法
- 线上故障之-CPU飙高
- ghost linux 黑屏,Ghost 与 Linux 的兼容性
- 山海关与老龙头 逃不掉的寂寞与人群
- matlab2016a配置vs2013编译器
- java长方体的父类_一个长方形类Rectangle,一个子类长方体类,计算周长,面积,体积...
- ABP Vnext 学习03-授权中心微信小程序登录
- C#圆形卡尺测量程序基于halcon
- 解决Navicat1166错误