forward方法与Include方法非常相似,但有5点不同
1,在调用forward方法之前,输出缓冲区的数据会被清空,也就是说,在使用forward方法进行请求转发时,只可能输出别转发的web资源中的消息。
2,如果在调用forward方法之前已经将缓冲区的数据发送到客户端,在调用forward方法时会抛出IllegalStateException异常
3,在调用者和被调用者中设置响应消息头都不会被忽略,而在调用Include方法中,只有调用者中设置响应消息头才会生效。
4,Servlet引擎会根据RequestDispatcher对象所包含的资源对HttpServletRequest对象中的请求路径和参数信息进行调整,而使用Include方法时,Servlet引擎不会调整这些消息。
5,forward方法只能使用一次,否则抛出异常。
ForwardServlet类演示了如何使用Forward方法请求转发web资源。
代码如下:
1 protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 2 // TODO Auto-generated method stub 3 RequestDispatcher pd=this.getServletContext().getRequestDispatcher("/IncludingServlet"); 4 pd.forward(request, response); 5 }
结果如图:
由输出结果可知,在转入的 web资源中改变了httpServRequest中的请求路径,因此输出的死/IncludingServlet,而不是ForwardServlet的请求路径。