1.Bootstrap启动
Tomcat的入口,调用main()方法去启动整个tomcat的服务
main():新建Bootstrap,并执行init方法初始化;然后处理main方法传入的命令,如果args参数为空,默认执行start。
init():初始化ClassLoader,并用ClassLoader创建了Catalina实例。
start():处理调用三个方法:setAwait(true),load(args)和start().
2.Catalina的启动过程
Catalina的启动主要是调用setAwait,load和start方法来完成的。
setAwait():用于设置Server启动完成后是否进入等待状态的标志,如果是TRUE的话,则进入,否则不进入
Load():用于加载配置文件,创建并初始化Server,根据conf/server.xml创建了Server对象,并赋值给server属性(解析开元项目Digester完成的)
start():用于启动服务器,并根据await属性判断是否让程序进入了等待状态
3.Server启动过程
addService(Service service)、removeService(Service service)来添加和删除Service,Server 的init方法和start方法分别循环调用每个Service的init方法和start方法来启动所有的Service。
Server的默认实现了org.apache.catalina.core.StandardServer.StandardServer继承自LifecycleMBeanBase,LifecycleMBeanBase继承自LifecycleBase,init和start定义在Lifecyclebase中,LifeCycleBase又实现了initInternal方法和StartInternal方法,这个俩个方法都是模板方法,由具体的子类去实现。因此调用StandardServer的init和start方法时会去执行StandardServer中的initInternal和startIntegernal方法。
4.Service启动
Service的默认实现是org.apache.catalina.core.StandardService.
在Stan大人Service中的initInternal和startInternal方法调用Container,executors,mapperListener,connector的init和start方法。
MapperListener是Map普洱的监听器,可以监听Container容器的变化,executors是用在connectors中管理线程的线程池。
Tomcat整体启动流程图: