一、流程简述
在Tomcat的bin目录下存放着Tomcat在Windows环境下和Linux环境下的启动脚本
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EiKJ2Xdh-1614825664604)(/Users/admain/Library/Application Support/typora-user-images/image-20210227164331077.png)]](https://img-blog.csdnimg.cn/2021030410412963.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
在start脚本文件中会去启动catalina的脚本文件

catalina脚本文件中会去调用启动类(org.apache.catalina.startup.Bootstrap)来进行Tomcat的初始化

启动的流程图如下
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Fr097N0U-1614825664613)(/Users/admain/Library/Application Support/typora-user-images/image-20210208170422534.png)]](https://img-blog.csdnimg.cn/20210304104315615.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
二、启动流程
Init 阶段
1、Bootstrap init()
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iwFxiQHe-1614825664617)(/Users/admain/Library/Application Support/typora-user-images/image-20210227171007352.png)]](https://img-blog.csdnimg.cn/20210304104339492.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
利用反射机制初始化Catalina
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3YNO8Gsu-1614825664618)(/Users/admain/Library/Application Support/typora-user-images/image-20210227171345095.png)]](https://img-blog.csdnimg.cn/202103041044011.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
2、Bootstrap init() -> Catalina load()
创建完Catalina对象并完成赋值后会开始初始化各个组件,这里先调用load
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d2YJOmc1-1614825664619)(/Users/admain/Library/Application Support/typora-user-images/image-20210228192514059.png)]](https://img-blog.csdnimg.cn/20210304104426909.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
进入方法后设置的是load,然后通过反射去执行Catalina类的load()方法
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WY27p159-1614825664620)(/Users/admain/Library/Application Support/typora-user-images/image-20210228192939843.png)]](https://img-blog.csdnimg.cn/20210304104446201.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
3、Catalina 创建各个组件
这个地方会去生成server.xml文件的解析工具,来创建相关的组件(没有修改过server.xml的则是tomcat的默认配置)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J8euWGgy-1614825664621)(/Users/admain/Library/Application Support/typora-user-images/image-20210301140142997.png)]](https://img-blog.csdnimg.cn/20210304104508823.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
里面会配置创建各个组件的规则、方法、类名
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HW6eQ1aB-1614825664622)(/Users/admain/Library/Application Support/typora-user-images/image-20210301140211188.png)]](https://img-blog.csdnimg.cn/20210304104529581.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
解析完成后读取文件
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wNzOMALq-1614825664623)(/Users/admain/Library/Application Support/typora-user-images/image-20210301140333846.png)]](https://img-blog.csdnimg.cn/20210304104556177.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
开始各个组件的创建
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GLEvqCp5-1614825664624)(/Users/admain/Library/Application Support/typora-user-images/image-20210301140423769.png)]](https://img-blog.csdnimg.cn/20210304104607169.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
4、Catalina -> Server init()
创建完成后开始执行初始化的链路
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UmNqZaf0-1614825664627)(/Users/admain/Library/Application Support/typora-user-images/image-20210228193835097.png)]](https://img-blog.csdnimg.cn/20210304104629235.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
因为Catalina内部组件都依靠Lifecycle接口来管理各组件的生命周期,所以我们主要看这个方法(这里放一张大致的接口管理类图)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3qdMypCF-1614825664628)(/Users/admain/Library/Application Support/typora-user-images/image-20210208182638241.png)]](https://img-blog.csdnimg.cn/20210304104644940.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7c0N0dgu-1614825664629)(/Users/admain/Library/Application Support/typora-user-images/image-20210228194014304.png)]](https://img-blog.csdnimg.cn/20210304104659420.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
这个方法是个抽象方法,因为我们第一个初始化的是Server所以我们进入这个类中
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z2QE1BiZ-1614825664630)(/Users/admain/Library/Application Support/typora-user-images/image-20210228194127786.png)]](https://img-blog.csdnimg.cn/20210304104724703.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
一个Server下会有多个Service,所以这里是遍历的去初始化
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YmiTdMcM-1614825664631)(/Users/admain/Library/Application Support/typora-user-images/image-20210301142358583.png)]](https://img-blog.csdnimg.cn/20210304104821189.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
6、Server -> Service init()
这里会初始化Engine

7、Service -> Engine Init()
这里会调用父类的初始化,创建了一个线程池 (这里后续没有init Host- Context - Wrapper等,而是在下面Engine的start启动后直接启动)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sJzVrjiB-1614825664632)(/Users/admain/Library/Application Support/typora-user-images/image-20210301143609028.png)]](https://img-blog.csdnimg.cn/20210304104912976.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ellw3Vl1-1614825664633)(/Users/admain/Library/Application Support/typora-user-images/image-20210303144940450.png)]](https://img-blog.csdnimg.cn/2021030410492071.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
6、Server -> Executor init()
这里我们server.xml并没有配置线程池所以没有初始化我们自己的线程池
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r6iHQQKS-1614825664635)(/Users/admain/Library/Application Support/typora-user-images/image-20210303145331177.png)]](https://img-blog.csdnimg.cn/20210304104937330.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zmhtzpSb-1614825664636)(/Users/admain/Library/Application Support/typora-user-images/image-20210303145137550.png)]](https://img-blog.csdnimg.cn/20210304104946798.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
7、Server -> Connector init()
这里会对Connector进行加载
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JvNpLatE-1614825664636)(/Users/admain/Library/Application Support/typora-user-images/image-20210303150228849.png)]](https://img-blog.csdnimg.cn/20210304105001889.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)

初始化Connector的时候会创建Adapter,Adapter用于Request/Response <–> ServletRequest/ServletResponse 之间的相互转换(适配器模式)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BtETGUIe-1614825664638)(/Users/admain/Library/Application Support/typora-user-images/image-20210303153835047.png)]](https://img-blog.csdnimg.cn/20210304105218189.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
然后初始化ProtocolHandler
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nu6SQtFa-1614825664639)(/Users/admain/Library/Application Support/typora-user-images/image-20210303153921526.png)]](https://img-blog.csdnimg.cn/20210304105250490.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
9、Connector -> ProtocolHandler init()
Tomcat支持两种网络协议 HTTP 和 AJP
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CsyFgf5k-1614825664639)(/Users/admain/Library/Application Support/typora-user-images/image-20210303154025999.png)]](https://img-blog.csdnimg.cn/20210304105303335.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
因为我们server.xml配置的是HTTP,所以走的是AbstractHttp11Protocol,然后回去加载父类的init()
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G8hsgKBl-1614825664640)(/Users/admain/Library/Application Support/typora-user-images/image-20210303155851089.png)]](https://img-blog.csdnimg.cn/20210304105316152.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
父类会初始化Endpoint
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P4c5ottY-1614825664640)(/Users/admain/Library/Application Support/typora-user-images/image-20210303160058851.png)]](https://img-blog.csdnimg.cn/20210304105330634.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
10、AbstractProtocol -> Endpoint init()
Endpoint主要的作用就是接收客户端请求的连接
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QNuRhfxt-1614825664641)(/Users/admain/Library/Application Support/typora-user-images/image-20210303160655404.png)]](https://img-blog.csdnimg.cn/20210304105345172.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
绑定端口号,默认的是NioEndpoint
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QD9xmPqg-1614825664642)(/Users/admain/Library/Application Support/typora-user-images/image-20210303160748497.png)]](https://img-blog.csdnimg.cn/20210304105357359.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
默认配置也是本机的8080端口
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EFNTdOGW-1614825664642)(/Users/admain/Library/Application Support/typora-user-images/image-20210303161028545.png)]](https://img-blog.csdnimg.cn/20210304105409841.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
Start 阶段
11、Bootstrap -> Server start()
load中的init加载完成后就开始start各组件
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zowj6Zi6-1614825664643)(/Users/admain/Library/Application Support/typora-user-images/image-20210303161325861.png)]](https://img-blog.csdnimg.cn/20210304105423885.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
先判断是否加载,然后开始start()方法
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QCTv57dL-1614825664644)(/Users/admain/Library/Application Support/typora-user-images/image-20210303161513899.png)]](https://img-blog.csdnimg.cn/20210304105437874.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
Lifecycle接口管理了组件的所有生命周期,所以start也和init是一样的
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cJj1FlyE-1614825664644)(/Users/admain/Library/Application Support/typora-user-images/image-20210303161633971.png)]
12、Server -> Service start()
这里会启动Engine、自定义线程池 和 Connector
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Jw9ECMGs-1614825664645)(/Users/admain/Library/Application Support/typora-user-images/image-20210303161758572.png)]](https://img-blog.csdnimg.cn/2021030410545934.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
13、Service -> Engine start()
调用父类的启动方法
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q5X9V552-1614825664646)(/Users/admain/Library/Application Support/typora-user-images/image-20210303162018333.png)]](https://img-blog.csdnimg.cn/2021030410551594.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
14、 Engine -> Host start()
父类这里启动会先查询Engine下的子类对象,Engine -> Host -> Context -> Wrapper, 查询到子类对象后会通过线程池去执行创建启动
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SKH6hrMz-1614825664646)(/Users/admain/Library/Application Support/typora-user-images/image-20210303162254048.png)]](https://img-blog.csdnimg.cn/20210304105528274.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
StartChild是实现了Callable接口的
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ULVs3Ylv-1614825664647)(/Users/admain/Library/Application Support/typora-user-images/image-20210303162422313.png)]](https://img-blog.csdnimg.cn/20210304105551456.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
启动Host
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-THjWCSBj-1614825664647)(/Users/admain/Library/Application Support/typora-user-images/image-20210303163207366.png)]](https://img-blog.csdnimg.cn/20210304105602577.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
启动完成后回去调用下父类的启动方法,Host这里也会去拿它的子类然后启动,但是现在是没有的
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CuexiS2p-1614825664648)(/Users/admain/Library/Application Support/typora-user-images/image-20210303163301532.png)]](https://img-blog.csdnimg.cn/20210304105615467.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
然后会去设置下生命周期状态 -> Starting
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HLFL6kgv-1614825664649)(/Users/admain/Library/Application Support/typora-user-images/image-20210303163736278.png)]](https://img-blog.csdnimg.cn/2021030410562431.png)
这里要提一下Lifecycle的生命周期监听器,他会监听对象的生命周期,像上面一样设置新的生命周期状态的时候(如:NEW、INIT、START等…),都会执行这个方法 – 它有多个实现,跟代码的时候要注意
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IOorxSB3-1614825664649)(/Users/admain/Library/Application Support/typora-user-images/image-20210303162848311.png)]](https://img-blog.csdnimg.cn/20210304105634618.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
这里监听到了Host的创建,当前状态为Starting
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L72Ct25k-1614825664650)(/Users/admain/Library/Application Support/typora-user-images/image-20210303163650767.png)]](https://img-blog.csdnimg.cn/20210304105653752.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
15、 Host -> Context start()
执行start() 方法
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gjs9jUjS-1614825664650)(/Users/admain/Library/Application Support/typora-user-images/image-20210303164042796.png)]](https://img-blog.csdnimg.cn/20210304105704388.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
调用线程池去创建Web应用的描述对象
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H2gRTL8Z-1614825664651)(/Users/admain/Library/Application Support/typora-user-images/image-20210303164231704.png)]](https://img-blog.csdnimg.cn/20210304105716601.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
使用digester去解析配置文件
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Hm990rib-1614825664651)(/Users/admain/Library/Application Support/typora-user-images/image-20210303164430689.png)]](https://img-blog.csdnimg.cn/20210304105728283.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
设置完Context的属性后,添加Host的子对象
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EIad66ak-1614825664652)(/Users/admain/Library/Application Support/typora-user-images/image-20210303164710749.png)]](https://img-blog.csdnimg.cn/20210304105737414.png)
这里还会添加对应的子对象的生命周期监听器
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4AdTsElj-1614825664652)(/Users/admain/Library/Application Support/typora-user-images/image-20210303164829157.png)]](https://img-blog.csdnimg.cn/20210304105751697.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
调用父类的方法开始启动Context
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wKimtCpt-1614825664653)(/Users/admain/Library/Application Support/typora-user-images/image-20210303165611036.png)]](https://img-blog.csdnimg.cn/20210304105801626.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PdzvYTXt-1614825664653)(/Users/admain/Library/Application Support/typora-user-images/image-20210303165652934.png)]](https://img-blog.csdnimg.cn/2021030410581233.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
之前没有初始化Context对象,所以先init
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3smSJ3Pj-1614825664654)(/Users/admain/Library/Application Support/typora-user-images/image-20210303170450767.png)]](https://img-blog.csdnimg.cn/2021030410585264.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
生命周期监听器监听到了Context的init
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mMW6A6sx-1614825664654)(/Users/admain/Library/Application Support/typora-user-images/image-20210303170350388.png)]](https://img-blog.csdnimg.cn/20210304105902742.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
之后的初始化都是一样的,直接看start的过程
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Yp7WIRTB-1614825664656)(/Users/admain/Library/Application Support/typora-user-images/image-20210303170817080.png)]](https://img-blog.csdnimg.cn/20210304105912318.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
16、 Context -> Wrapper start()
之后会去加载Context的各种资源,然后到这里,设置生命周期状态为configure_start
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cgUr9RiQ-1614825664656)(/Users/admain/Library/Application Support/typora-user-images/image-20210303171218147.png)]](https://img-blog.csdnimg.cn/20210304105921792.png)
监听器监听到这个状态后调用HostConfig,执行这个方法
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8YnKq1xw-1614825664657)(/Users/admain/Library/Application Support/typora-user-images/image-20210303171342450.png)]](https://img-blog.csdnimg.cn/20210304110043580.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
这里开始加载Wrapper
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OHfA3Rxr-1614825664658)(/Users/admain/Library/Application Support/typora-user-images/image-20210303171510402.png)]](https://img-blog.csdnimg.cn/20210304110051917.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ECLT0nBV-1614825664658)(/Users/admain/Library/Application Support/typora-user-images/image-20210303171621730.png)]](https://img-blog.csdnimg.cn/20210304110100279.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
根据server.xml设置Context的各种属性
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b7x58Z2f-1614825664659)(/Users/admain/Library/Application Support/typora-user-images/image-20210303171705757.png)]](https://img-blog.csdnimg.cn/20210304110115468.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
创建Wrapper
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eoDFqjsn-1614825664660)(/Users/admain/Library/Application Support/typora-user-images/image-20210303171812354.png)]](https://img-blog.csdnimg.cn/20210304110132378.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
设置Wrapper到Context的子对象中
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VRGJJXbe-1614825664660)(/Users/admain/Library/Application Support/typora-user-images/image-20210303171832140.png)]](https://img-blog.csdnimg.cn/2021030411014181.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
之后调用父类的方法,用线程池启动Wrapper
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fsavEUEz-1614825664661)(/Users/admain/Library/Application Support/typora-user-images/image-20210303171938429.png)]](https://img-blog.csdnimg.cn/20210304110150244.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P1HIWo3H-1614825664661)(/Users/admain/Library/Application Support/typora-user-images/image-20210303172032977.png)]](https://img-blog.csdnimg.cn/20210304110159112.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
剩下的就是把Context都加载一遍了,一个Host是有多个Context的
17、 Service -> Executor start() -> Connector start()
回到Service,Engine 启动完成后继续启动线程池,然后就是Connector
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EgFhMFPm-1614825664662)(/Users/admain/Library/Application Support/typora-user-images/image-20210303173118639.png)]](https://img-blog.csdnimg.cn/20210304110208397.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
18、Connector -> ProtocolHandler start()
默认还是AbstractProtocol
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UHxtwNyJ-1614825664662)(/Users/admain/Library/Application Support/typora-user-images/image-20210303173247387.png)]](https://img-blog.csdnimg.cn/20210304110231474.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
19、Connector -> ProtocolHandler start()
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wnotOtSU-1614825664663)(/Users/admain/Library/Application Support/typora-user-images/image-20210303173340832.png)]](https://img-blog.csdnimg.cn/20210304110239432.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
20、ProtocolHandler -> Endpoint start()
这里会创建一个线程池,然后开启两个轮巡线程准备去监听8080端口号
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ynLSi3fg-1614825664663)(/Users/admain/Library/Application Support/typora-user-images/image-20210303173456526.png)]](https://img-blog.csdnimg.cn/20210304110249328.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rj8gmusA-1614825664664)(/Users/admain/Library/Application Support/typora-user-images/image-20210303173420935.png)]](https://img-blog.csdnimg.cn/20210304110300317.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qsBY3XZt-1614825664664)(/Users/admain/Library/Application Support/typora-user-images/image-20210303173609191.png)]](https://img-blog.csdnimg.cn/20210304110307174.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)

这里会开启一个处理线程去处理请求
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jBCdfGiS-1614825664665)(/Users/admain/Library/Application Support/typora-user-images/image-20210303173648364.png)]](https://img-blog.csdnimg.cn/20210304110335728.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY2Nzk5OQ==,size_16,color_FFFFFF,t_70)
剩下的就是重复的去加载目录:home/webapps下的项目了。启动完成后,Tomcat开始等待请求进行处理。
本文为手动Debug过程中总结,如有问题,万望指出,十分感谢!
参考文档
博客:https://blog.csdn.net/sunyunjie361/article/details/58588033
Endpoint:https://www.toutiao.com/i6704513825745404423/?tt_from=copy_link&utm_campaign=client_share×tamp=1561103290&app=news_article_lite&utm_source=copy_link&utm_medium=toutiao_ios&req_id=20190621154810010023019038398CF00&group_id=6704513825745404423
AJP : https://tomcat.apache.org/connectors-doc/ajp/ajpv13a.html
AJP漏洞:https://mp.weixin.qq.com/s/GzqLkwlIQi_i3AVIXn59FQ

















