文档章节

Tomcat8源码分析-启动流程-start方法

特拉仔
 特拉仔
发布于 2019/12/08 10:55
字数 563
阅读 174
收藏 0

上一篇:Tomcat8源码分析-启动流程-load方法

前面讲了启动流程中的Catalina.load,进一步调用绝大部分组建的init操作,主要完成对server.xml解析,并根据解析的结果结合设置的Rule(规则)构造了最初的StandardServer对象,比如Server-Service-Engine层次结构,添加默认的监听等;还有对Tomcat-user.xml的解析与操作,启动HTTP/AJP 两种监听(此时不可用)。

时序图

init操作完成,紧接着就是start了,耐心看看以下时序图,时间不够主要看调用的套路,特别是LifecycleBase的start\startInternal\setState\setStateInternal和ContainerBase中的startInternal,还有StandardService/Host/Context 与HostConfig/ContextConfig对象的内容

过程很长,如果时间比较充足建议根据图示,跟着源码看。

说明

大体流程说明

Server启动所有的Service,Service启动唯一的Engine和所有的MapperListener与Connector,Engine启动所有的Host(通常我们见到的webapps),Host启动它所有的Context(这里面就包含了对context.xml的解析,解析web.xml完成应用的部署)

核心点与关键类说明

StandardService

 

ContainerBase

 

HostConfig

 

StandardContext

 

ContextConfig

 

Mapper

 

MapperListener启动

将class目录、jar、servlet-mapping、welcome list等添加到ContextVersion对象中,后期在接收请求由CoyoteAdapter处理的时候,会根据这里的结果去匹配唯一的Servlet进行处理,没有匹配成功就会报错

详情见:Tomcat8源码分析-启动流程-MapperListener启动

循环部署应用

这里只描述概要,详情见:Tomcat8源码分析-启动流程-循环部署应用(待完成)

Servlet封装与启动

这里只描述概要,详情见:Tomcat8源码分析-启动流程-Servlet封装与启动(待完成)

Filter封装与启动

这里只描述概要,详情见:Tomcat8源码分析-启动流程-Filter封装与启动(待完成)

扩展:Tomcat8源码分析-context.xml详解(待完成)

© 著作权归作者所有

特拉仔
粉丝 62
博文 266
码字总数 259663
作品 0
渝中
部门经理
私信 提问
Tomcat8源码分析-请求处理过程(含源码中新建web应用一起调试)

上一篇:Tomcat8源码分析-启动流程-start方法 此篇主要将Tomcat8从接收请求到处理请求的时序图画出来,并用文字描述一下主要流程 时序图 图片有点大,需要点开了放大看 说明 文字描述流程之前...

特拉仔
2019/12/11
39
0
Tomcat 源码分析(-)启动过程分析

前面几篇文章分别介绍了Tomcat的安装、优化和框架,本文主要用于分析Tomcat源码启动过程,研究一个框架最好的着手方式可能就是研究它的启动过程,因为在这过程中我们可以看到它内部的层次关系...

AaronSheng
2016/11/28
171
0
jsvc将tomcat配置成服务

1、在/usr/share/tomcat8/bin中有commons-daemon-native.tar.gz 压缩包 2、解压commons-daemon-native.tar.gz #tar -zxvf commons-daemon-native.tar.gz 3、解压完成,出现commons-daemon-1.......

北天_
2015/08/12
461
0
【死磕 Tomcat】—启动分析(三) Catalina启动

原文作者:黄晓峰 原文链接:https://blog.csdn.net/dwademia/article/details/79244157 在上一篇文章中,我们分析了tomcat的初始化过程,是由Bootstrap反射调用Catalina的load方法完成tomca...

黄晓峰
2018/09/08
0
0
渣渣菜鸡的 ElasticSearch 源码解析 —— 启动流程(下)

关注我 转载请务必注明原创地址为:http://www.54tianzhisheng.cn/2018/08/12/es-code03/ 前提 上篇文章写完了 ES 流程启动的一部分,main 方法都入口,以及创建 Elasticsearch 运行的必须环...

zhisheng_tian
2018/08/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

WPF中的StaticResource和DynamicResource有什么区别?

在WPF中使用画笔,模板和样式等资源时,可以将它们指定为StaticResources <Rectangle Fill="{StaticResource MyBrush}" /> 或者作为DynamicResource <ItemsControl ItemTemplate="{DynamicR......

javail
29分钟前
49
0
Day07继承中的面试题 答案

1. 每一个构造方法的第一条语句默认都是:super() Object类最顶层的父类。 class Zi extends Fu{ public int num = 20; public Zi(){ //super(); System.out.println("zi"); } 2.class Test......

Lao鹰
35分钟前
42
0
每天AC系列(四):四数之和

1 题目 Leetcode第18题,给定一个数组与一个target,找出数组中的四个数之和为target的不重复的所有四个数. 2 暴力 List<List<Integer>> result = new ArrayList<>();if (nums.length == 4 &......

Blueeeeeee
45分钟前
54
0
git clone --mirror和git clone --bare有什么区别

git clone帮助页面上有关于--mirror : 设置远程存储库的镜像。 这意味着--bare 。 但没有详细介绍--mirror克隆与--bare克隆--mirror不同。 #1楼 克隆将从远程服务器复制参考,并将其填充到名...

技术盛宴
今天
72
0
代码生成器技术乱弹二十六,未来之野望,未实现的功能:动态Controller名字后缀

现在,光1.5.0的Controller后缀是固定的。比如:UserController, PrivilegeController之类的。而动态Controller名字后缀功能实现后,您只需要定义 controllernamingsuffix:Adaoter Control...

火箭船
今天
53
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部