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异常。 java

相关文章
相关标签/搜索