在这之前,要明确几个概念
1.servlet对象由servlet容器创建,servlet的service()方法也由容器调用。一个servlet对象无法获得另一各servlet对象的应用。
2.请求范围
web应用范围:整个web应用的生命周期,与ServletContext对象的生命周期对应。web应用范围内的共享数据作为ServletContext对象的属性存在。
请求范围:服务器端响应一次客户请求的过程,从Servlet收到一个客户请求开始,到返回响应结果结束。与ServletRequest对象和ServletResponse对象的生命周期对应。请求范围内的共享数据可以作为ServletRequest对象的属性存在。
一、Servlet的转发和包含----web组件之间的协作的两个途径
请求转发:servlet(源组件)先对客户请求做一些预处理操作,然后把请求转发给其他web组件(目标组件)完成包括生成响应结果在内的后续操作。
包含:servlet(源组件)把其他web组件(目标组件)生成的响应结果包含到自身的响应结果中。
二者相同点
目标组件和源组件处理同一个客户的请求;共享同一个ServletRequest对象和ServletResponse对象。
目标组件可以为:html,jsp,servlet
都依赖javax.servlet.RequestDispatcher接口
javax.servlet.RequestDispatcher接口表示请求分发器:
include()包含目标组件
forward()请求转发给目标组件
获取RequestDispatche对象
调用ServletContext的getRequestDispatcher
调用ServletRequest的getRequestDispatcher