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