`

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

分享到:
评论

相关推荐

    java中dispcter和forward的区别

    RequestDispatcher.forward()方法和HttpServletResponse.sendRedirect()方法的区别是:前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址,他是不会改变Request的值,如果你需要在下一个...

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

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

    jsp + severlet +中文api

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

    javaWed笔记

    1. 使用通配符“*”拦截用户的所有请求。 Filter的元素用于配置过滤器拦截的资源信息,如果想让过滤器拦截所有...如果目标资源是通过RequestDispatcher的include()或forward()方法访问时,那么该过滤器将不会被调用。

    jsp servlet面试题总结

    jsp 中动态 INCLUDE 与静态 INCLUDE 的区别: 动态 INCLUDE 用 jsp:include 动作实现,总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。 静态 INCLUDE 用 include 伪码实现,不会检查所含文件...

    Filter(过滤器)简介和工作原理

    Filter 或者目标 Servlet 程序去处理,也可以直接向客户端返回响应信息,或者利用 RequestDispatcher 的 forward() 和 include() 方法,以及 HttpServletResponse 的 sendRedirect() 方法将请求转向到其他资源。...

    Struts_config.xml详解

    forward="" //如果当前 Action 映射路径匹配,则指定一个要转发到的相对于模块的 URL,使用 RequestDispatcher.forward()执行转发 &gt; 注意:如上属性中,forward/include相斥,即二者在同一Action配置中只能存在一...

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

     4.3.1 RequestDispatcher.forward() 72  4.3.2 response.sendRedirect() 73  4.4 理解会话 74  4.4.1 会话状态跟踪API 75  4.4.2 在会话对象中保存数据 76  4.4.3实例:显示会话信息 76  4.5 用Java ...

    jsp内置对象的用法

    13 RequestDispatcher getRequestDispatcher(String uripath) 返回指定资源的RequestDispatcher对象 14 Servlet getServlet(String name) 返回指定名的Servlet 15 Enumeration getServlets() 返回所有Servlet的...

    Java™ Servlet 规范.

    Servlet 接口 ...................... 15 2.1 请求处理方法 ...........................................................................................................................................15 ...

    Servlet3.1规范(最终版) PDF

    Servlet 接口 ...................... 15 2.1 请求处理方法 ...........................................................................................................................................15 ...

    servlet2.4doc

    forward(ServletRequest, ServletResponse) - Method in interface javax.servlet.RequestDispatcher Forwards a request from a servlet to another resource (servlet, JSP file, or HTML file) on the server. ...

Global site tag (gtag.js) - Google Analytics