「学习笔记」请求转发(Forward)与请求重定向(Redirect)的区别

通过一个比喻来简单理解: 
请求转发:A向B发送一次请求,想让他完成某项工作,当B接受到请求时,发现自己完成不了,又请求C帮忙,C接收到B请求之后最终完成了该项工作,并把最后的结果交给了A。在此期间,A只发送了一次请求,他只知道把任务交给了B,至于B是如何完成的,A并不知道,他只等待最终的结果。 
请求重定向:首先A向B发送请求,想让他完成某项工作,当B接收到这个请求时,发现自己完成不了,他立即通知A,并推荐C可以完成任务,于是A又联系C,最终C完成了该项任务。 
 

区别: 
1、浏览器地址栏显示不同(表面区别) 
无论进行多少次请求,如果使用请求转发来实现,浏览器地址栏中只显示第一次发送请求的地址;如果使用重定向来实现,浏览器地址栏显示的是每次请求的新地址。这只是表面上看到的不同地方。 
2、组件之间可否共享信息不同(本质区别) 
从本质上讲,请求转发时,从发送第一次到最后一次请求的过程中,WEB容器只创建一次request和response对象,请求之间始终共享这两个对象,所以每个请求可以访问他之前请求中的参数和属性的值;而重定向时,浏览器每发送一次请求,WEB容器都会重新创建新的request和response对象,所以请求之间不能共享信息,即不能在请求中访问到他之前请求中的参数和属性的值。 

请求转发

处理流程:

  1. 客户端发送请求,Servlet做出业务逻辑处理。
  2. Servlet调用forword()方法,服务器Servlet把目标资源返回给客户端浏览器。

请求重定向

处理流程:

  1. 客户端发送请求,Servlet做出业务逻辑处理。
  2. Servlet调用response.sendReadirect()方法,把要访问的目标资源作为response响应头信息发给客户端浏览器。
  3. 客户端浏览器重新访问服务器资源xxx.jsp,服务器再次对客户端浏览器做出响应。

猜你喜欢

转载自blog.csdn.net/sinat_27763257/article/details/86231827