`

Jsp/Servlet转发与重定向的区别!

 
阅读更多
   (一)
尽管HttpServletResponse.sendRedirect 方法和RequestDispatcher.forward 方法都可以让浏览器获得另外一个URL所指向的资源,但两者的内部运行机制有着很大的区别。

  下面是HttpServletResponse.sendRedirect 方法实现的请求重定向与RequestDispatcher.forward 方法实现的请求转发的总结比较:

(1)RequestDispatcher.forward 方法只能将请求转发给同一个WEB应用中的组件;而HttpServletResponse.sendRedirect 方法不仅可以重定向到当前应用程序中的其他资源,还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源。如果传递给HttpServletResponse.sendRedirect 方法的相对URL以“/”开头,它是相对于整个WEB站点的根目录;如果创建RequestDispatcher 对象时指定的相对URL以“/”开头,它是相对于当前WEB应用程序的根目录。

(2)调用HttpServletResponse.sendRedirect 方法重定向的访问过程结束后,浏览器地址栏中显示的URL会发生改变,由初始的URL地址变成重定向的目标URL;而调用RequestDispatcher.forward 方法的请求转发过程结束后,浏览器地址栏保持初始的URL地址不变。

(3)HttpServletResponse.sendRedirect 方法对浏览器的请求直接作出响应,响应的结果就是告诉浏览器去重新发出对另外一个URL的访问请求。

  举个例子:重定向过程好比有个绰号叫“浏览器”的人写信找张三借钱,张三回 信说没有钱,让“浏览器”去找李四借,并将李四现在的通信地址告诉给了“浏览器”。于是,“浏览器”又按张三提供通信地址给李四写信借钱,李四收到信后就 把钱汇给了“浏览器”。可见,“浏览器”一共发出了两封信和收到了两次回复,“浏览器”也知道他借到的钱出自李四之手。

  RequestDispatcher.forward 方 法在服务器端内部将请求转发给另外一个资源,浏览器只知道发出了请求并得到了响应结果,并不知道在服务器程序内部发生了转发行为。这个过程好比绰号叫“浏 览器”的人写信找张三借钱,张三没有钱,于是张三找李四借了一些钱,甚至还可以加上自己的一些钱,然后再将这些钱汇给了“浏览器”。可见,“浏览器”只发 出了一封信和收到了一次回复,他只知道从张三那里借到了钱,并不知道有一部分钱出自李四之手。

(4)RequestDispatcher.forward 方法的调用者与被调用者之间共享相同的request 对象和response 对象,它们属于同一个访问请求和响应过程;而HttpServletResponse.sendRedirect 方法调用者与被调用者使用各自的request 对象和response 对象,它们属于两个独立的访问请求和响应过程。

  对于同一个WEB应用程序的内部资源之间的跳转,特别是跳转之前要对请求进行一些前期预处理,并要使用HttpServletRequest.setAttribute 方法传递预处理结果,那就应该使用RequestDispatcher.forward 方法。
  不同WEB应用程序之间的重定向,特别是要重定向到另外一个WEB站点上的资源的情况,都应该使用HttpServletResponse.sendRedirect 方法。

(5)无论是RequestDispatcher.forward 方法,还是HttpServletResponse.sendRedirect 方法,在调用它们之前,都不能有内容已经被实际输出到了客户端。如果缓冲区中已经有了一些内容,这些内容将被从缓冲区中清除。

  (二)

解释一  
一句话,转发是服务器行为,重定向是客户端行为。 为什么这样说呢,这就要看两个动作的工作流程:
转发过程: 客户浏览器发送http请求----》web服务器接受此请求--》调用内部的一个方法在容器内部完成请求处理和转发动作----》将目标资源发送给客户;在这里,转发的路径必须是同一个web容器下的 url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的request。在客户浏览器路径栏显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转发的。转发行为是浏览器只做了一次访问请求。
重定向过程: 客户浏览器发送http请求----》web服务器接受后发送302状态码响应及对应新的location给客户浏览器--》客户浏览器发现是302响应,则自动 再发送一个新的http请求,请求url是新的location地址----》服务器根据此请求寻找资源并发送给客户。在这里location 可以重定向到任意 URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。在客户浏览器路径栏显示的是其重定向的路径,客户可以观察到地址的变化的。重定向行为是浏览器做了至少两次的访问请求的。
解释二
重定向 ,其实是两次request,
第一次,客户端request   A,服务器响应,并response回来,告诉浏览器,你应该去B。这个时候IE可以看到地址变了,而且历史的回退按钮也亮了。重定向可以访问自己web应用以外的资源。在重定向的过程中,传输的信息会被丢失。
请求转发 是服务器内部把对一个request/response的处理权,移交给另外一个
对于客户端而言,它只知道自己最早请求的那个A,而不知道中间的B,甚至C、D。 传输的信息不会丢失。
解释三
假设你去办理某个执照,
重定向:你先去了A局,A局的人说:“这个事情不归我们管,去B局”,然后,你就从A退了出来,自己乘车去了B局。
转发:你先去了A局,A局看了以后,知道这个事情其实应该B局来管,但是他没有把你退回来,而是让你坐一会儿,自己到后面办公室联系了B的人,让他们办好后,送了过来。
分享到:
评论

相关推荐

    Servlet转发与重定向

    通过网上总结的Servlet的转发与重定向的区别介绍。希望可以帮的上大家

    JSPServlet的重定向技术综述

    JSPServlet的重定向技术综述 详细介绍

    JSP转发和重定向的区别分析

    1.RequestDispatcher.forward()――转发 是在服务器端起作用,当使用forward()时, Servlet engine传递HTTP请求从当前的Servlet or JSP到另外一个Servlet,JSP 或普通HTML文件,也即你的 form提交至a.jsp,在a.jsp用到了...

    jsp servlet

    //转发和重定向是都是一瞬间就跳转到了要转发的页面 中间的内容基本没有时间显示 解决这个问题的方法如下: 包含转发 request.getRequestDispatcher("login.html").include(request.response); //就是将该页面所包含...

    JSP-Servlet.rar_jsp_jsp综述_servlet_servlet jsp

    这个是有关JSP-Servlet的重定向技术综述,希望对学习jsp和servlet的人有一些帮助!

    JSP与Servlet 技术总结

    9. 重定向(forward与sendRedirect)区别 6 10. JSP和Servlet的区别 7 11. Cookie学习 7 12. Session学习 9 Servlet技术总结 9 1. Servlet生命周期 9 2. Servlet的方法说明: 10 3. Servlet 在web.xml中的配置 10 ...

    Servlet+jsp.docx

    创建web工程还有代码是试练,请求方式+重定向+请求转发+cookie+session+jsp(四大作用域九大内置对象)

    JSP和Servlet面试题

    7.Jsp的重定向和转发的流程有什么区别 重定向是客户端行为,转发是服务器端行为 重定向时服务器产生两次请求,转发产生一次请求,重定向时可以转发到项目以外的任何网址,转发只能在当前项目里转发 重定向会导致...

    servlet+jsp练手小项目

    servlet+jsp练手小项目,适合初学者进行项目的练手,可以帮助我们熟悉servlet+jsp的项目流程,掌握转发,重定向,路径等问题,有助于后面框架的学习,而且项目并不复杂,主要是锻炼大家的思路,让我们可以熟悉servlet...

    用户登录Demo(JSP+Servlet)

    <> 失败:保存错误信息到request域,转发到login.jsp(login.jsp显示request域中的错误信息) <> 成功:保存用户信息到session域中,重定向到main.jsp页面,显示session域中的用户信息 > main.jsp:从session域获取...

    C-ATM.zip jsp+servlet 项目【练手/总结/巩固】

    jsp+servlet 项目【练手/总结/巩固】。 所需要的jar包都在里面 源码都放里面了 总结一下: 1. 在JavaWeb中,页面跳转有两种方式:重定向和转发。 2. 重定向是通过发送特定的HTTP响应码告知浏览器请求的资源已被移...

    jsp实现用户登录javaweb

    jsp+servlet实现用户登录,可以了解到 jsp以及 servlet的重定向,以及servlet之间的重定向。

    Servlet与JSP核心编程第2版

    6.3 将用户重定向到浏览器相关页面的servlet 6.4 各种搜索引擎的一个前端 第7章 服务器响应的生成:htip响应报头 7.1 在servlet中设置响应报头 7.2 理解http1.1响应报头 7.3 构建excel电子表格 7.4 ...

    jsp和servlet中实现页面跳转的方式实例总结

    本文实例总结了jsp和servlet中实现页面跳转的方式。分享给大家供大家参考,具体如下: 假设要求从test1.jsp 跳转到test2.jsp 一. jsp中跳转: 1. 使用RequestDispatcher.forward方法转发 <% ...

    JSP 程序设计从入门到精通 PDF 教程

     4.3 JSP/Servlet的重定向技术综述 72  4.3.1 RequestDispatcher.forward() 72  4.3.2 response.sendRedirect() 73  4.4 理解会话 74  4.4.1 会话状态跟踪API 75  4.4.2 在会话对象中保存数据 76  ...

    在Jsp Servlet中页面重新定向总汇

    是在服务器端起作用, 当使用forward()时,Servlet engine传递HTTP请求从当前的Servlet or JSP到另外一个Servlet,JSP 或普通HTML文件,也即你的form提交至a.jsp,在a.jsp用到了forward()重定向至b.jsp,此时form提交的...

    XML Oracle Servlet 复习汇总(S2)

    7 Servlet:转发和重定向 8分 8 Servlet:连接池 5分 9 Servlet:servlet(代码题目) 6分 10 Servlet:jspuserbean 5分 11 Servlet:servlet(代码题目) 10分 12 Servlet:jstl标签(代码题目) 8分 13 Servlet:...

    javaweb作业-Ajax、javabean、jsp、serviet、数据库编程

    2.javabean实例 3.JSP1练习 4.JSP2练习 5.在第5章课后习题2基础...重定向和转发有什么区别? EL的语法形式?引入它的主要作用?它访问的是Java脚本数据还是属性数据? 使用JSTL的步骤?分支标签和循环标签的语法形式?

    JSP网上书店完整源代码

    用户在客户端请求jsp页面,jsp页面将结果提交到Servlet,由Servlet负责处理结果,访问数据库等操作,并将参数结果放在request,session,application等元素中,然后通过请求转发和重定向转发到其他jsp页面或者Servlet

    SecHeaders:这是一个完全可配置的,基于规则的插件,用于建立内容安全策略,生成NONCE并设置JSPServlet引擎所需的所有安全HTTP标头

    规则基于与主机匹配的模式,与URL模式匹配的模式以及不包括URL模式的模式应用 为逐步添加条目建立了CSP。 这提供了最大的灵活性和可维护性。 可以通过ThreadLocal变量或作为请求参数生成NONCE,并将其用于您自己的...

Global site tag (gtag.js) - Google Analytics