一、tomcat启动流程
Bootstrap -> catalina -> server -> service -> connector、container等
启动流程用了模版方法和责任链模式
组件生命周期管理
tomcat是如何启动各组件,如何初始化各组件的?
所有组件都通过生命周期统一接口——Lifecycle来管理,
tomcat的组件关系类似于树的结构:
Server 包含了 Service,
Service 又包含了 Container 和 Connector,
tomcat启动时,通过启动父容器启动它的子容器,这 样只要启动根容器,就可以把其他所有的容器都启动,从而达到了统一的启动,停止、关闭的效果。
所有所有组件有一个统一的接口——Lifecycle,把所有的启动、停止、关闭、生命周期相关的方法都组织到一起,就可以很方便管理 Tomcat 各个容器 组件的生命周期。
Lifecycle类
3个核心方法:
init,start,stop
所有组件都是通过通用父类的init :初始化,同时这个方法调用抽象initInternal()方法,所有子类都重写方法。
同理start 也一样。
tomcat初始和启动组件是用了模版模式和管道模式(责任链模式)
tomcat中的管道模式
每一种 container 都有一个自己的 StandardValve (阀门)上面四个 container 对应的四个是: StandardEngineValve StandardHostValve StandardContextValve StandardWrapperValve
Pipeline(管道)将这些阀门连接起来。
四个 container 就相当于有Pipeline,四个 Pipeline 都这么干,直到最后的 StandardWrapperValve 拿到资源开始调用 servlet。完成后返回 来,一步一步的 valve 按照刚才丢pipeline顺序的倒序一次执行。如此才完成了 tomcat 的 Pipeline 的机制。