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
分享到:
相关推荐
RequestDispatcher.forward()方法和HttpServletResponse.sendRedirect()方法的区别是:前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址,他是不会改变Request的值,如果你需要在下一个...
jsp:forward 是一种基于 RequestDispatcher.forward() 方法的跳转方式,而 RequestDispatcher.include() 方法可以用于将多个页面组合成一个页面。HttServletResponse.sendRedirect() 方法可以用于将用户重定向到另一...
RequestDispatcher 接口提供了两个方法:forward 和 include。forward 方法用于从一个 servlet 传递请求到另一个服务器资源,而 include 方法用于将响应内容发送到其他服务器资源。 在 Java Servlet 中文 API 中,...
1. 使用通配符“*”拦截用户的所有请求。 Filter的元素用于配置过滤器拦截的资源信息,如果想让过滤器拦截所有...如果目标资源是通过RequestDispatcher的include()或forward()方法访问时,那么该过滤器将不会被调用。
jsp 中动态 INCLUDE 与静态 INCLUDE 的区别: 动态 INCLUDE 用 jsp:include 动作实现,总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。 静态 INCLUDE 用 include 伪码实现,不会检查所含文件...
Filter 或者目标 Servlet 程序去处理,也可以直接向客户端返回响应信息,或者利用 RequestDispatcher 的 forward() 和 include() 方法,以及 HttpServletResponse 的 sendRedirect() 方法将请求转向到其他资源。...
forward="" //如果当前 Action 映射路径匹配,则指定一个要转发到的相对于模块的 URL,使用 RequestDispatcher.forward()执行转发 > 注意:如上属性中,forward/include相斥,即二者在同一Action配置中只能存在一...
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 ...
13 RequestDispatcher getRequestDispatcher(String uripath) 返回指定资源的RequestDispatcher对象 14 Servlet getServlet(String name) 返回指定名的Servlet 15 Enumeration getServlets() 返回所有Servlet的...
Servlet 接口 ...................... 15 2.1 请求处理方法 ...........................................................................................................................................15 ...
Servlet 接口 ...................... 15 2.1 请求处理方法 ...........................................................................................................................................15 ...
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. ...