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

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

  • 转发(Forword) 通过RequestDispatcher对象的forward(HttpServletRequest request,HttpServletResponse response)方法实现的。RequestDispatcher可以通过HttpServletRequest 的getRequestDispatcher()方法获得。例如下面的代码就是跳转到login_success.jsp页面。

    request.getRequestDispatcher(“login_success.jsp”).forward(request, response);

  • 重定向(Redirect) 是利用服务器返回的状态吗来实现的。客户端浏览器请求服务器的时候,服务器会返回一个状态码。服务器通过HttpServletRequestResponse的setStatus(int status)方法设置状态码。如果服务器返回301或者302,则浏览器会到新的网址重新请求该资源。

一、 从地址栏显示来说

  • forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.
  • redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.

二、从数据共享来说

  • forward:转发页面和转发到的页面可以共享request里面的数据.
  • redirect:不能共享数据.

三、从运用地方来说

  • forward:一般用于用户登陆的时候,根据角色转发到相应的模块.
  • redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等

四、从效率来说

  • forward:高.
  • redirect:低.

五、从请求次数来说
forward:一次request

请求转发是服务器内部把对一个request/response的处理权,移交给另外一个
对于客户端而言,它只知道自己最早请求的那个A,而不知道中间的B,甚至C、D。 传输的信息不会丢失。

redirect:其实是两次request

第一次,客户端request A,服务器响应,并response回来,告诉浏览器,你应该去B。这个时候IE可以看到地址变了,而且历史的回退按钮也亮了。重定向可以访问自己web应用以外的资源。在重定向的过程中,传输的信息会被丢失。

你可能感兴趣的:(转发(Forward)和重定向(Redirect)的区别)