JSP 中 forward 转发 和 sendRedirect 重定向的区别

avatar 2017年07月11日10:52:14 2 3681 views
博主分享免费Java教学视频,B站账号:Java刘哥


本质区别:


      一句话概括:重定向是客户端行为,转发是服务器行为.

     1.请求次数:

           重定向:重定向行为是做了两次请求,及产生了两个request对象,重定向会导致request对象信息丢失。

           请求转发:转发做了一次请求, 浏览器的地址栏一直是第一次请求的地址。转发是服务器内部request/response控制权的移交。

      2.请求资源地址:

重定向:web组件可以将请求重定向到任意一个url,而不仅仅是同一个应用。

重定向的源组件与目标组件不共用同一个HttpServletRequest对象,因此不能在request范围内共享数据。

请求转发:转发的源组件与目标组件必须在同一个应用中,两者可以在request范围内共享数据。
       3.一种解释:



假设你去办理某个执照

重定向:你先去了A局,A局的人说:“这个事情不归我们管,去B局”,然后,你就从A退了出来,自己乘车去了B局。

请求转发:你先去了A局,A局看了以后,知道这个事情其实应该B局来管,但是他没有把你退回来,而是让你坐一会儿,自己到后面办公室联系了B的人,让他们办好后,送了过来。



工作流程:



1.重定向

浏览器发出http请求  >> 服务器接受请求并发送302状态码和新的对应的url到浏览器  >>

浏览器接收响应并自动请求新的url  >> 服务器接收请求并寻找客户所需的资源响应到浏览器

2.转发

浏览器发出http求其  >> 服务器接收请求  >> 服务器调用内部的一个方法在容器内完成请求处理和转发动作  >>

将客户所需资源发送到浏览

 

调用方式:


我们知道,在servlet中调用转发、重定向的语句如下:

request.getRequestDispatcher("new.jsp").forward(request, response);   //转发到new.jsp

response.sendRedirect("new.jsp");   //重定向到new.jsp

在jsp页面中你也会看到通过下面的方式实现转发:

<jsp:forward page="apage.jsp" />

当然也可以在jsp页面中实现重定向:

<%response.sendRedirect("new.jsp"); %> //重定向到new.jsp

 
     1.重定向:

          1).response.sendRedirect(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 />



 

本文链接:https://liuyanzhao.com/5154.html
  • 微信
  • 交流学习,有偿服务
  • weinxin
  • 博客/Java交流群
  • 资源分享,问题解决,技术交流。群号:590480292
  • weinxin
avatar

发表评论

avatar 登录者:匿名
匿名评论,评论回复后会有邮件通知

  

已通过评论:1   待审核评论数:0
  1. avatar David Ding

    Redirect写成Redict了 :mrgreen: https://static2.dingstudio.cn/temps/outsideDomain/liuyanzhao.com/TIM20170716155017.png

    • avatar 言曌

      666,这都能发现 :wink: :wink: :wink: