以Tomcat为例介绍Servlet容器启动过程
2015-07-24 16:15
609 查看
在这里以Tomcat为例介绍Servlet容器启动过程
Context容器直接管理Servlet在容器中的包装类Wrapper,一个Web应用对应一个Context容器。添加一个Web应用就会创建一个Context容器,并将这个Context容器加入到父容器Host中。
Web应用由Tomcat实例添加到Tomcat中,即由Tomcat管理一个新添加的Context容器。前面已经提到一个Web应用对应一个Context容器,也就是Servlet运行时的Servlet容器。
在 Servlet API 中有一个 ServletContextListener 接口,它能够监听 ServletContext 对象的生命周期,实际上就是监听 Web 应用的生命周期。
当Web 应用启动或终止时,会触发ServletContextEvent 事件,该事件由 ServletContextListener 来处理。在 ServletContextListener 接口中定义了处理ServletContextEvent 事件的两个方法。 contextInitialized(ServletContextEvent event)和contextDestroyed(ServletContextEvent event)方法,对别 在Servlet 容器启动Web 应用时和终止Web 应用时调用。
Servlet容器启动时,触发servletContextEvent事件,并通知相应的监听器servletContextListener;
Servlet容器在启动的过程中通过servletContextListener监视servletContext的状态(初始化或者销毁servletContext);即
servletContextListener中通过contextInitialized初始化方法,根据web.xml对servletContext进行配置,即将Context容器的属性缓存在内存中,供Service服务利用;
contextConfig在Tomcat创建Context容器时被加入到servletContext中,contextConfig负责整个Web应用的配置文件(包括web.xml)的解析工作。
2. web应用的初始化
web的初始化是在contextConfig中实现的,应用的初始化主要是对web.xml进行解析,这个文件描述了Web应用的关键信息,也是整个Web应用的入口。
Tomcat将web.xml文件解析后,将其中的属性设置到Context容器中,这里包括创建Servlet实例,Filter和Listener。将Servlet包装成Context中的包装类Wrapper。
3. 创建Servlet实例
如果Servlet在web.xml中load-on-startup的配置大于0,那么在Context容器启动时就会被实例化。
4. Servlet初始化
通过调用Servlet的init方法,同时把包装了StandarWrapper对象的StandarWrapperFacade作为ServletConfig传给Servlet。
Servlet从web.xml被解析到初始化。ServletConfig 和 ServletContext的区别ServletConfig:从一个servlet被实例化后,对任何客户端在任何时候访问有效,但仅对本servlet有效,一个servlet的ServletConfig对象不能被另一个servlet访问。
5. servlet 的运行机制
与Servlet关联的有四个对象servletContext,servletConfig,servletRequest,servletResponse。
Servlet的运行模式是典型的“握手型交互式”运行模式,servletContext提供交互场景模式,而交互场景的初始化由servletConfig来描述的。servletRequest和servletResponse是交互的具体对象。
Tomcat的总体结构
Tomcat启动server服务器对外提供Service服务,Container作为Service的核心组件(Container可以连接多个Connector构成Service),有了Service就可以对外提供服务。简单说就是,Service是Container和Connector的结婚证,并已Server服务器为居对外提供服务。Tomcat容器模型
从上述知,Service对外提供Web应用服务,而Service核心组件Container的灵魂便是Servlet容器。而真正管理Servlet的是Context容器。Context容器直接管理Servlet在容器中的包装类Wrapper,一个Web应用对应一个Context容器。添加一个Web应用就会创建一个Context容器,并将这个Context容器加入到父容器Host中。
web工程是在servlet容器中是如何启动的
1. Servlet容器的启动过程Web应用由Tomcat实例添加到Tomcat中,即由Tomcat管理一个新添加的Context容器。前面已经提到一个Web应用对应一个Context容器,也就是Servlet运行时的Servlet容器。
在 Servlet API 中有一个 ServletContextListener 接口,它能够监听 ServletContext 对象的生命周期,实际上就是监听 Web 应用的生命周期。
当Web 应用启动或终止时,会触发ServletContextEvent 事件,该事件由 ServletContextListener 来处理。在 ServletContextListener 接口中定义了处理ServletContextEvent 事件的两个方法。 contextInitialized(ServletContextEvent event)和contextDestroyed(ServletContextEvent event)方法,对别 在Servlet 容器启动Web 应用时和终止Web 应用时调用。
Servlet容器启动时,触发servletContextEvent事件,并通知相应的监听器servletContextListener;
Servlet容器在启动的过程中通过servletContextListener监视servletContext的状态(初始化或者销毁servletContext);即
servletContextListener中通过contextInitialized初始化方法,根据web.xml对servletContext进行配置,即将Context容器的属性缓存在内存中,供Service服务利用;
contextConfig在Tomcat创建Context容器时被加入到servletContext中,contextConfig负责整个Web应用的配置文件(包括web.xml)的解析工作。
2. web应用的初始化
web的初始化是在contextConfig中实现的,应用的初始化主要是对web.xml进行解析,这个文件描述了Web应用的关键信息,也是整个Web应用的入口。
Tomcat将web.xml文件解析后,将其中的属性设置到Context容器中,这里包括创建Servlet实例,Filter和Listener。将Servlet包装成Context中的包装类Wrapper。
3. 创建Servlet实例
如果Servlet在web.xml中load-on-startup的配置大于0,那么在Context容器启动时就会被实例化。
4. Servlet初始化
通过调用Servlet的init方法,同时把包装了StandarWrapper对象的StandarWrapperFacade作为ServletConfig传给Servlet。
Servlet从web.xml被解析到初始化。ServletConfig 和 ServletContext的区别ServletConfig:从一个servlet被实例化后,对任何客户端在任何时候访问有效,但仅对本servlet有效,一个servlet的ServletConfig对象不能被另一个servlet访问。
5. servlet 的运行机制
与Servlet关联的有四个对象servletContext,servletConfig,servletRequest,servletResponse。
Servlet的运行模式是典型的“握手型交互式”运行模式,servletContext提供交互场景模式,而交互场景的初始化由servletConfig来描述的。servletRequest和servletResponse是交互的具体对象。
相关文章推荐
- java-模拟tomcat服务器
- 小心服务器内存居高不下的元凶--WebAPI服务
- i-jetty环境搭配与编译
- 实现单Tomcat多Server配置
- 生产环境下的Tomcat配置
- 运维入门
- Seafile Server本地权限提升漏洞(CVE-2014-5443)
- 从USB安装Ubuntu Server 10.04.3 图文详解
- Linux5.9无人值守安装
- 数据中心和云未来的十二大趋势
- 使用zabbix监控Nginx活动状态--Part1
- 高效访问Internet-启用ISA Server的缓存
- 用vsftp快速搭建ftp服务器
- Linux快速构建apache web服务器
- 服务器监控策略浅谈
- windows server域用户提升到本地更高权限组中的方法
- 注册表的组织结构