转发和重定向

1. 转发和重定向实现方式

1.1 转发(Forward)

通过RequestDispatcher 对象的forward(HttpServletRequest request,HttpServletResponse response)方法实现的。

RequestDispatcher可以通过HttpServletRequest 的getRequestDispatcher()方法获得

案例:转发到login_success.jsp

request.getRequestDispatcher("login_success.jsp").forward(request, response);

1.2 重定向(Redirect)

利用服务器返回的状态码来实现的。客户端浏览器请求服务器的时候,服务器会返回一个状态码。

服务器通过HttpServletResponse 的setStatus(int status)方法设置状态码,如果服务器返回301或者302,则浏览器会到新的网址重新请求该资源

2. 转发(Forward) 和重定向(Redirect) 的区别

转发是服务端行为,重定向是客户端行为

  1. 从地址栏显示来说

    • forward 是服务器请求资源,

    ​ 服务器直接访问目标地址的URL,吧那个url的响应内容读取过来,然后把这些内容再发给浏览器。

    ​ 浏览器根本不知道服务器发送的内容哪里来的,所以他的地址栏还是原来的地址。

    • redirect 是服务端根据逻辑,发送状态码

      redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.

  2. 从数据共享上说

    • forward:

      转发页面和转发到页面可以共享request里面的数据

    • redirect:

      不能共享数据

  3. 从运用地方来说

    • forward:

      一般用于登录的时候。根据角色转发到响应的模块

    • redirect:

      一般用于用户注销登陆时返回主页面和跳转到其他网站等

  4. 从效率上说

    • forward:高
    • redirect;低

results matching ""

    No results matching ""