重定向、定时刷新、请求转发的区别

1. 重定向和定时刷新

  1. 代码

    • 重定向

      response.setStatus(302);
      response.setHeader(“location”, “/webapp/index.jsp”);
      //或使用sendRedirect方法,等价于以上两行。
      response.sendRedirect(“/webapp/index.jsp”); 
      
    • 定时刷新

      //必须设刷新时间,没有设跳转地址时,只刷新当前页面
      response.setHeader(“refresh”, “3; url=/web/index.jsp”);
      
  2. 说明

    • 两次请求,两次响应,request对象不是同一个。

    • 地址栏地址会发生变化。

    • 既可以实现在同一个WEB应用内部资源之间进行跳转,也可以在不同的WEB应用和不同服务器资源之间进行跳转。

    • 由于是两次请求,两次响应,无法通过request对象共享数据。

    • 重定向即时跳转,而定时刷新可以在跳转到新的地址前设置一个时间,在这段时间内可以输出文本到浏览器并维系到这段时间。

      img

2. 请求转发和包含转发

  1. 代码

    //在请求对象中获取转发器
    RequestDispatcher rd = request.getRequestDispatcher("/servlet");
    //请求直接转发
    rd.forward(request, response);
    //请求包含转发
    rd.include(request, response);
    
  2. 说明

    • 一次请求对应一次响应,request对象是同一个。

    • 地址栏地址不会发生变化。

    • 请求转发是服务器内部的并且是同一个WEB应用内部的资源跳转;不能是在不同应用和不同服务器中的资源跳转。

    • 一个Servlet只能转发给一个目标servlet(即A不能同时转发给B和C),但可以进行多次转发(A转发给B, B再转发给C)。

    • forward转发时,response缓冲区不会保留转发前的数据,只会响应转发目标servlet的数据给客户端。

    • include转发时,两个servlet的数据都会保留,并顺序地响应会客户端。

      img
posted @ 2021-08-14 20:30  DvLopr_Jarjack  阅读(133)  评论(0)    收藏  举报