请求转发(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());// /day05
System.out.println(getRequest().getMethod());//GET
System.out.println(getRequest().getRequestURI