RequestDispatcher接口中具有两个方法: forward() 与 include() 均 可完成请求 的转发。区别如下:
forword():
使用该方法,则当前 的 Servlet 中只能进行业务处理,而不能向浏览器发送要显示的数据。因为请求还未完成,需要继续向前( forward ),当请求完成后 服务器才会开启标准 响应 输出流,向输出流中写入数据。
该方法的响应对象,使用的是第二个资源的响应对象。即第二个资源向浏览器回送的响应数据。
两个 Servlet 中所使用的 Response 对象为同一个 ResponseFacade 对象。
include():
使用该方法,在将请求向后转发时,服务器会将标准响应输出流开启。当前Servlet可以向输出流中写入数据,并且服务器还会将要转向的资源的输出流中数据合并到当前的输出流中。
该方法的响应对象,使用的是第一个资源的响应对象,即当前Servlet 向浏览器回送的响应数据。
ApplicationHttpResponse 是HttpServletResponse 接口的实现类 ResponseFacade 的装饰者类,其增强了ResponseFacade 类的功能。ApplicationHttpResponse底层完成的一个工作是,将当前的 OtherServlet 中的输出流中的数据合并到了 SomeServlet 的标准输出流中。