详细的请求转发与重定向的重要区别及使用场景选择

请求转发与重定向的区别及使用场景选择

一、请求转发:

服务器行为: 因为它是代码与代码之间的资源跳转

特点:

  • 转发的所有Servlet都是同一个请求,使用同一个request和response!
  • 最后一个Servlet完成响应体! 当前Servlet可以设置响应头!(留头不留体)
  • 因为它是同一个request,以前request中存放的变量不会失效,就像把两个页面拼到了一起

二、重定向:

客户端行为: 因为它是客户端与客户端之间的资源跳转

特点:

  • 重定向可以访问自己web应用以外的资源(如:www.baidu.com)。
  • 每次的重定向都是新的请求(request),以前的request中存放的变量全部失效,并进入一个新的request作用域。

三、请求转发过程:

  1. JSP容器将使用一个内部的方法来调用目标页面。
  2. 新的页面继续处理同一个请求。
  3. 而浏览器将不会知道这个过程。

四、重写向过程:

  1. 第一个页面通知浏览器发送一个新的页面请求
  2. 由于重定向方式产生了一个新的请求。
  3. 经过一次重定向后,request内的对象将无法使用。

五、重要区别:

  • 请求转发是一个请求一次响应,而重定向是多次请求多次响应。
  • 请求转发地址栏不变化,而重定向会显示请求的地址。
  • 请求转发只能转发当前web应用,而重定向还可以访问自己web应用以外的资源。
  • 请求转发效率高,因为是一个请求。

六、场景选择:

  1. 一个请求跨多个Servlet,用请求转发。
  2. 因为转发只能访问当前web的应用程序,所以需要访问到另外一个web站点上的资源的情况,这个时候就只能使用重定向。
  3. 请求转发比重定向速度快,因为是同一个请求,所以如果在使用转发和重定向都无所谓的时候建议使用转发。

猜你喜欢

转载自blog.csdn.net/qq_36515586/article/details/84928751