Servlet是Java Web技术的核心基础。
以Tomcat为例来介绍Servlet容器是如何管理Servlet的。 Tomcat容器分为4个等级,真正管理Servlet容器的是Contect容器,一个Contect对应一个Web工程,在Tomcat的配置文件中可以得到验证。
Web应用的初始化工作是在ContectConfig的configureStart方法中实现的,应用的初始化主要是解析web.xml文件。
工作流程: 1) Tomcat首先会找globalWebXml 2) 然后找hostWebXml 3) 然后找应用的配置文件 example/WEB-INF/web.xml 4) web.xml文件的中各项配置项都会被解析成响应的属性保存在webXML对象中。 5) 最后会将webXml对象的属性设置到Context容器中(包括创建Servlet对象、Filter、Listener等)
除了将Servlet包装成StanderWrapper并作为子容器添加到Context中外,其他所有的web.xml属性都被解析到Context中。所以,Context容器才是真正运行Servlet的Servlet容器。一个Web应用对应一个Context容器,容器的配置属性由应用的web.xml指定。
(一)创建Servlet对象:创建Servlet实例的方法是Wrapper.loadServlet,该方法是获取servletClass,然后把它交给InstanceManager去创建一个基于servletClass.class的对象。 (二)初始化Servlet:方法是StandardWrapper中的initServlet方法,该方法调用Servlet的init()方法,同时把包装了StandardWrapper对象的StanderWrapperFacade作为ServletConfig传给Servlet。
事实上Servlet从被web.xml解析到完成初始化,过程非常复杂,包括各种容器状态的转化引起的监听事件的出发,各种访问权限的控制和一些不可预料的错误发生的判断行为。
1,初始化阶段——调用init()方法 2,响应客户请求阶段——调用service()方法 3,终止阶段——调用destroy()方法