• 那是从何处传来的钟声呢?偶尔听到那钟声,平添一份喜悦与向往之情。

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

后端 Nanait 7年前 (2012-09-17) 40次浏览 未收录 0个评论 扫描二维码
文章目录[隐藏]

本质区别:

      一句话概括:重定向是客户端行为,转发是服务器行为.
     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 />

 


何处钟 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:JSP 中 forward 转发 和 sendRedirect 重定向的区别
喜欢 (0)
[15211539367@163.com]
分享 (0)

您必须 登录 才能发表评论!