![v2-5be3a5fbddeab6ddb6b4af6ff2e6890c_b.jpg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=30f5add7-c52e-eb11-8da9-e4434bdf6706&url=https://pic1.zhimg.com/v2-5be3a5fbddeab6ddb6b4af6ff2e6890c_b.jpg)
①BootStrap类:tomcat 的启动流程很标准化,入口是BootStrap,统一按照生命周期管理接口Lifecycle的定义进行启动。首先,调用init()方法逐级初始化,接着调用start()方法进行启动,同时,每次调用伴随着生命周期状态变更事件的触发。main 方法是整个tomcat 启动时的入口。在main 方法中,使用bootstrap.init()来初始化类加载器和创建Catalina 实例,然后再启动Catalina 线程。
②Catalina组件的Lifecycle接口:Lifecycle 提供一种统一的管理对象生命周期的接口。通过Lifecycle、LifecycleListener、LifecycleEvent,Catalina 实现了对tomcat 各种组件、容器统一的启动和停止的方式。在Tomcat 服务开启过程中启动的一些列组件、容器, 都实现了org.apache.catalina.Lifecycle 这个接口,其中的init()、start() 方法、stop() 方法,为其子类实现了统一的start 和stop 管理。
③load 方法解析server.xml 配置文件:
load 方法解析server.xml 配置文件,并加载Server、Service、Connector、Container、Engine、Host、Context、Wrapper 一系列的容器。加载完成后,调用initialize()来开启一个新的Server。
④4.3Digester 类解析server.xml 文件:
利用Digester 类解析server.xml 文件,得到容器的配置。
⑤StandardServer
5.1service.initialize()
然后拿到StandardServer 实例调用initialize()方法初始化Tomcat 容器的一系列组件。一些容器初始化的的时候,都会调用其子容器的initialize()方法,初始化它的子容器。顺序是StandardServer、StandardService、StandardEngine、Connector。每个容器都在初始化自身相关设置的同时,将子容器初始化。
![v2-f67ce64e7ca6a096737d8b93d2070192_b.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=30f5add7-c52e-eb11-8da9-e4434bdf6706&url=https://pic3.zhimg.com/v2-f67ce64e7ca6a096737d8b93d2070192_b.jpg)