Tomcat源码架构笔记(init初始化篇)
warning:
这篇文章距离上次修改已过1584天,其中的内容可能已经有所变动。
在上一篇文章里,我们基本上了解到Tomcat是如何启动的,和入口函数要执行的两大关键阶段:
- init初始化阶段
- start启动阶段(传送门)
本篇文章详细展开在Tomcat init初始化阶段,具体干了些什么?是怎么干的?
Tomcat init初始化阶段
加载初始化
通过反射调用 Catalina.load()方法
开始初始化一个Server实例
解析server.xml文件
调用digester对象真正解析xml
解析返回的root
这里仅仅读取xml里有的东西,不管其他的。
server 初始化
LifecycleBase(统一管理组件生命周期管理接口)
每个组件初始化都会来到该类的这个方法,因为这些组件都实现了lifecycle生命周期接口
初始化子容器service
通过子类来实现初始化子容器service(一个或多个)的具体逻辑。
再次来到LifecycleBase类
StandardService.initInternal()
Engine初始化
Engine初始化也是通过LifecycleBase
类来管理的(截图略)
然后来到了StandardEngine
的initInternal()
方法
通过super.initInternal();
正式开始Engine初始化操作
Engine组件初始化,就是创建了一个线程池startStopExecutor
。
这个线程池在Engine组件的start阶段使用,可以并行运行提高start阶段的效率。
Connector初始化
Connector初始化也是通过LifecycleBase
类来管理的(截图略)
ok,到此Tomcat的init初始化阶段基本完成,下一篇我们探究下Tomcat的start启动阶段。