转发和重定向的本质区别

本质区别:    

      一句话概括:重定向(Redict)是客户端行为,转发(forward)是服务器行为.
     1.请求次数:
          重定向:重定向行为是做了两次请求,及产生了两个request对象,重定向会导致request对象信息丢失。
           请求转发:转发做了一次请求, 浏览器的地址栏一直是第一次请求的地址。转发是服务器内部request/response控制权的移交。
      2.请求资源地址:
          重定向:web组件可以将请求重定向到任意一个url,而不仅仅是同一个应用。
                         重定向的源组件与目标组件不共用同一个HttpServletRequest对象,因此不能在request范围内共享数据。
          请求转发:转发的源组件与目标组件必须在同一个应用中,两者可以在request范围内共享数据。
工作流程:
     1.重定向
          浏览器发出http请求  >> 服务器接受请求并发送302状态码和新的对应的url到浏览器  >>
          浏览器接收响应并自动请求新的url  >> 服务器接收请求并寻找客户所需的资源响应到浏览器
 
     
     2.转发
          浏览器发出http请求  >> 服务器接收请求  >> 服务器调用内部的一个方法在容器内完成请求处理和转发动作  >>
          将客户所需资源发送到浏览器
    
调用方式:
     1.重定向:
          1).response.sendRedict(url);
          2).response.setState(302);
               response.setHeader("location",url);
     2.转发:
          1).request.getRequestDispatcher(url).forward(request,response);
          2).request.getRequestDispatcher(url).include(request,response);
          3).<jsp:forward page=url />
 
本文来之网络

posted on 2015-08-09 11:35  Venetian  阅读(847)  评论(0编辑  收藏  举报