`

RequestDispatcher接口的include()方法与forward()方法的区别

阅读更多
RequestDispatcher接口的include()方法与forward()方法的区别

RequestDispatcher接口所定义的forward()方法可以将HTTP请求转送给其他Web资源(例如Servlet、JSP或HTML)进行处理,并产生HTTP回应。RequestDispatcher接口的include()方法与forward()方法非常类似,惟一的不同在于:利用include()方法将HTTP请求转送给其他Servlet后,被调用的Servlet虽然可以处理这个HTTP请求,但是最后的主导权仍然是在原来的Servlet。RequestDispatcher是一个Web资源的包装器,可以用来把当前request传递到该资源,或者把新的资源包括到当前响应中。RequestDispatcher接口中定义了两个方法:include/forward由于<jsp:include>只能指定固定的jsp文件名,不能动态指定jsp文件名。我们需要把<jsp:include>翻译为Java code – RequestDispatcher.include();

用法:
<% request.getRequestDispatcher(filename).include(request, response); />

服务器端的重定向可以有两种方式,一是使用HttpServletResponse的sendRedirect()方法,一是使用RequestDispatcher的forward()方法.

HttpServletResponse.sendRedirect()方法将响应定向到参数location指定的、新的URL。location可以是一个绝对的URL,如 response.sendRedirect("http://java.sun.com")也可以使用相对的URL。如果location以“/”开头,则容器认为相对于当前Web应用的根,否则,容器将解析为相对于当前请求的URL。这种重定向的方法,将导致客户端浏览器的请求URL跳转。从浏览器中的地址栏中可以看到新的URL地址,作用类似于上面设置HTTP响应头信息的实现。


RequestDispatcher.forward()方法将当前的request和response重定向到该 RequestDispacher指定的资源。这在实际项目中大量使用,因为完成一个业务操作往往需要跨越多个步骤,每一步骤完成相应的处理后,转向到下一个步骤。比如,通常业务处理在Servlet中处理,处理的结果转向到一个JSP页面进行显示。这样看起来类似于Servlet链的功能,但是还有一些区别。一个RequestDispatcher对象可以把请求发送到任意一个服务器资源,而不仅仅是另外一个Servlet。 include()方法将把Request Dispatcher资源的输出包含到当前输出中。

注意,只有在尚未向客户端输出响应时才可以调用forward()方法,如果页面缓存不为空,在重定向前将

自动清除缓存。否则将抛出一个IllegalStateException异常。


JDK中有这样一句话:
java.lang.IllegalStateException - if the response was already committed

分享到:
评论

相关推荐

    Servlet接口及方法

    本文档主要介绍了`Servlet`接口及其相关方法,以及`RequestDispatcher`接口的功能与作用。通过理解这些接口和方法,开发者可以更好地设计和实现自己的Servlet组件。 #### 二、RequestDispatcher接口 `...

    JavaWeb开发技术-RequestDispatcher对象.pptx

    RequestDispatcher 对象提供了两个主要方法:forward() 和 include()。 1. forward() 方法 forward() 方法用于将请求从一个 Servlet 传递给另外的一个 Web 资源。在 Servlet 中,可以对请求做一个初步处理,然后...

    JSP中5种跳转foward,request等等的详细区别

    jsp:forward 是一种基于 RequestDispatcher.forward() 方法的跳转方式,而 RequestDispatcher.include() 方法可以用于将多个页面组合成一个页面。HttServletResponse.sendRedirect() 方法可以用于将用户重定向到另一...

    Servlet关于RequestDispatcher的原理详解

    RequestDispatcher有两个主要方法:forward和include。 1. forward方法:将请求从一个Servlet或JSP目标资源转发到服务器上的另一个资源,让其它的资源去生成响应数据。例如用户请求的是目标资源A,A接受到请求后,...

    Java Servlet 中文API档.doc

    该接口提供了`forward()`和`include()`两个方法。`forward()`方法用于将请求传递给其他资源,而`include()`方法则用于合并多个资源的响应内容到同一个响应中。 2. **Servlet接口**:Servlet接口是所有Servlet的基础...

    response 对象:页面跳转.pptx

    RequestDispatcher 接口提供了两个方法:`void forward(ServletRequest request, ServletResponse response)` 和 `void include(ServletRequest request, ServletResponse response)`。这两个方法可以用来实现页面...

    jsp + severlet +中文api

    RequestDispatcher 接口提供了两个方法:forward 和 include。forward 方法用于从一个 servlet 传递请求到另一个服务器资源,而 include 方法用于将响应内容发送到其他服务器资源。 在 Java Servlet 中文 API 中,...

    请求重定向个请求分派

    RequestDispatcher 接口定义了两个方法: public void forward(ServletRequest request, ServletResponse response) throws ServletException, IOException; public void include(ServletRequest request, Servlet...

    RequestDispatcher

    这个接口提供了两个主要方法:`forward()`和`include()`,用于请求的转发和包含。 1. **请求转发(Request Forwarding)**: - `forward(ServletRequest request, ServletResponse response)`方法用于将当前请求...

    jsp api,仅供参考

    它提供了一组接口和类,让开发者能够创建服务器端的应用程序,这些程序能够与Web服务器紧密集成,以实现动态网页内容的生成和交互。 一、RequestDispatcher接口 RequestDispatcher接口是用于调度请求的关键接口,它...

    servlet中方法执行次序及API简介(init,service,doservice,doget等)

    - **javax.servlet.RequestDispatcher**:负责请求转发和重定向,常用的方法有forward()和include()。 - **javax.servlet.ServletConfig**:在Servlet初始化时,由容器传递给Servlet,包含了Servlet的配置信息。 - *...

    JSP面试容易问到的问题

    ### JSP面试常见问题解析:Forward与SendRedirect的区别及Include的理解 #### 1. Forward与SendRedirect的区别 在Web开发中,特别是在Java Server Pages (JSP)与Servlets结合使用的场景下,`forward`与`...

    Servlet中文2API.docx

    - `include()`方法则用于将其他资源的内容嵌入到当前响应中,而不会改变原始请求的URL路径。这意味着包含的资源和原始请求是同时呈现的,但包含的资源不能修改响应头,因为这可能导致与原始响应的冲突。 2. **...

    Java Web中的页面跳转.pdf

    除了`forward()`方法,`RequestDispatcher`接口还提供了`include()`方法,它允许在响应中包含其他资源的内容。这意味着原始Servlet和被包含的Servlet或JSP都可以输出响应信息。例如: ```java RequestDispatcher ...

    jsp页面跳转的五中方法

    本文将详细介绍五种常用的JSP页面跳转方法:`RequestDispatcher.forward()`、`response.sendRedirect()`、`jsp:forward`、`request.getRequestDispatcher().include()`以及`&lt;jsp:include&gt;`。这些方法各有特点,适用...

    JSP与Servlet传值技术总结

    3. jsp include指令:使用&lt;jsp:include&gt;指令来传递数据,例如:&lt;jsp:include page="Head.jsp"&gt;&lt;jsp:param name="a" value="a"/&gt;&lt;/jsp:include&gt; 4. jsp forward指令:使用&lt;jsp:forward&gt;指令来传递数据,例如:&lt;jsp:...

    JSP期末考试题.pdf

    14) JSP中,forward指令和RequestDispatcher的forward()方法有什么关系?(c) a) forward指令是HTML标签,而forward()方法是Java方法,两者没有关系 b) forward指令是JSP内置对象的方法,forward()方法是Servlet ...

    servlet函数介绍及其api中文

    6. **RequestDispatcher与forward()方法** `RequestDispatcher`接口允许Servlet将请求转发给其他资源,如JSP页面。`forward(ServletRequest request, ServletResponse response)`方法用于实现请求转发。 7. **...

    Jsp_Servlet_中文API档

    方法包括`forward(ServletRequest request, ServletResponse response)`和`include(ServletRequest request, ServletResponse response)`,分别用于向前端控制器转发请求和包含指定资源。 **二、Servlet接口** ...

    servlet api

    7. **RequestDispatcher和Include/Forward**:`RequestDispatcher`接口用于将请求转发给其他资源,如另一个Servlet、JSP页面或静态资源。`include()`方法用于在当前响应中包含其他资源,而`forward()`方法则是将请求...

Global site tag (gtag.js) - Google Analytics