来自http://ajava.org/course/jsp/4003.html
--
尽管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 方法,在调用它们之前,都不能有内容已经被实际输出到了客户端。如果缓冲区中已经有了一些内容,这些内容将被从缓冲区中清除。
分享到:
相关推荐
Servlet 转发与重定向是 Java Servlet 编程中两个重要的概念,它们都可以让浏览器获得另外一个 URL 所指向的资源,但是它们的内部运行机制有着很大的区别。 RequestDispatcher.forward 方法 RequestDispatcher....
当Servlet接收到请求后,可以通过`RequestDispatcher`对象的`forward()`方法将请求转发给其他资源,如另一个Servlet、JSP页面等。 - 请求转发共享相同的请求环境,也就是说,请求参数和对象在转发过程中保持不变,...
6. **请求转发与重定向**:在Servlet中处理请求后,通过RequestDispatcher进行请求转发或使用HttpServletResponse的sendRedirect方法进行重定向。 7. **错误处理**:设置全局的error页面,处理运行时可能出现的异常...
6. **请求分发**:Servlet通过`request.getRequestDispatcher()`或`response.sendRedirect()`来转发或重定向请求。 7. **会话管理**:Servlet和JSP可以通过`HttpSession`对象来管理和跟踪用户的会话状态。 **实际...
8. **请求处理与响应**:HTTP请求和响应的处理,包括请求参数的获取、请求转发和重定向。 9. **会话管理**:使用session对象跟踪用户状态,实现用户登录、购物车等功能。 10. **异常处理**:在JSP和Servlet中捕获...
#### 四、页面跳转与转发 **1. 页面转发 (`forward`)**: - 不改变浏览器地址栏中的URL。 - 示例: ```java RequestDispatcher dispatcher = request.getRequestDispatcher("index.jsp"); dispatcher.forward...
2. 实践编程:通过编写实际的Servlet或Filter来实现请求转发和重定向,这能帮助你更好地掌握它们的用法和区别。 3. 分析案例:研究不同应用场景下,何时选择请求转发,何时选择重定向,这有助于你在实际工作中做出...
### 请求转发与重定向 #### 一、概念介绍 在Web开发中,**请求转发**与**重定向**是两种非常重要的控制流程技术,它们都用于实现页面跳转的功能,但其工作原理和应用场景有所不同。 #### 二、请求转发 ##### 1. ...
以下将详细阐述JSP与Servlet之间的交互机制、页面转发与重定向的区别,以及在web.xml配置文件中对Servlet的映射设置。 ### JSP与Servlet的交互 JSP(Java Server Pages)是一种基于Java的服务器端脚本技术,用于...
上述配置表明了 `JspServlet1` 和 `JspServlet2` 分别映射到 `/JspServlet` 和 `/admin/JspServlet` 这两个 URL。这意味着用户在浏览器中输入这些 URL 时,会触发对应的 Servlet 处理程序。 #### 五、总结 本文详细...
请求转发是指将请求再转发到另一资源(一般为 JSP 或 Servlet)。此过程依然在同一个请求范围内,转发后浏览器地址栏内容不变。请求转发使用 RequestDispatcher 接口中的 forward() 方法来实现,该方法可以把请求...
本文详细介绍了JSP和Servlet中关于请求与响应的关键知识点,包括JSP内置对象的作用、请求与响应对象的使用方法、中文乱码问题及其解决办法、转发与重定向的区别以及Servlet的基本创建和配置流程。希望这些内容能够...
### Servlet与JSP详解 #### 一、Servlet基础概述 **Servlet** 是Java Web开发的基础技术之一,主要用于处理客户端的HTTP请求,并返回响应结果。它是一种服务器端的Java应用程序,可以扩展服务器的功能。 ##### ...
**JSP和Servlet基础知识详解** ...理解并掌握这些基本概念对于JSPServlet新手来说至关重要,它们构成了开发Web应用的基础。在实际开发中,根据需求选择合适的方法,可以构建高效、功能丰富的Web应用。
- 在实际项目中,开发者通常会创建一个Servlet来处理HTTP请求,然后根据需要转发或重定向到相应的JSP页面。JSP页面负责显示数据,而Servlet则负责数据的获取和处理。 - 使用Filter进行请求过滤,可以对Servlet和...
本文将深入探讨JSP与Servlet的重定向技术,并结合提供的资源来帮助初学者理解和掌握这一核心概念。 首先,JSP是一种视图技术,它允许开发者在HTML代码中嵌入Java代码,使得网页具有动态生成内容的能力。而Servlet是...
Servlet接收到请求后,进行必要的数据处理,然后可能将结果存储在域对象中(如HttpSession或RequestScope),最后转发或重定向到JSP页面,由JSP负责渲染结果显示给用户。这种方式有利于实现MVC(Model-View-...
在Java的Servlet编程中,`转发`和`重定向`是两种不同的机制,用于在服务器端将客户端的请求导向不同的资源。它们的主要区别在于请求处理流程、URL改变以及数据共享方式。 1. 转发(Forward): - 使用`...
5. **请求转发与重定向**: 项目中可能会使用到Servlet的请求转发(request.getRequestDispatcher())和重定向(response.sendRedirect())。请求转发在服务器端完成,保持请求状态;重定向则是发送新的请求,用户...
JSPServlet的重定向技术是Web开发中两个关键的方法,用于改变HTTP请求的处理路径,以便将用户导向不同的页面或资源。这两种技术分别是`...总的来说,理解这两者的区别和用法是JSPServlet开发中必不可少的知识点。