tomcat + spring mvc原理(二):tomcat容器动态加载
tomcat + spring mvc 原理(一):tomcat原理综述比较详细的叙述了tomcat容器的静态结构和容器的配置,从tomcat动态运行来讲,我也在 原理(一)中简单论述了:
显然,这种运作模式要求:tomcat需要有监视指定目录,一旦有新的war包加入,就完成解包并动态加载编译后的class的能力;tomcat需要有网络端口开闭和监视的机制,维护线程池来处理随时可能到来的请求;tomcat还需要将到来的请求顺利地传递给spring mvc服务,然后再将服务返回的数据发送出去。
其实,对tomcat的理解,不只是应该了解静态容器结构,对于动态运行方面,应该包括:
- 容器的初始加载和启动
- war包动态监视和加载
- 网络请求的监控和处理
这样基本就涵盖了tomcat所有的基本运作原理。本文主要涉及第一部分:容器的初始加载与启动。
容器通用生命周期标准
tomcat的容器,包括Server、Service、Connector、Engine、Host、Context、Wrapper都继承自同一个管理生命周期的接口:Lifecycle。
首先,这个接口类定义了这些容器的初始化、启动、停止和销毁的标准生命周期方法。
public interface Lifecycle {
......
//容器初始化
public void init() throws LifecycleException;
//容器启动
public void start() throws LifecycleException;
//容器停止
public void stop() throws LifecycleException;
//容器销毁
public void destroy() throws LifecycleException;
......
}
其次,这个接口类定义了这些容器所处生命周期的状态事件名和状态事件监听器的管理。
public interface Lifecycle {
......
/**
*13种生命周期状态事件的名字。通过名字还是比较比较好理解的
**/
public static final String BEFORE_INIT_EVENT = "before_init";
public static final String AFTER_INIT_EVENT = "after_init";
public static final String START_EVENT = "start";
public static final String BEFORE_START_EVENT = "before_start";
public static final String AFTER_START_EVENT = "after_start";
public static final String STOP_EVENT = "stop";
public static final String BEFORE_STOP_EVENT = "before_stop";
public static final String AFTE