Tomcat
Tomcat是Apache基金会的开源软件。Tomcat实现了Jakarta Servlet,Jakarta Server Pages,Jakarta Websocket,Jakarta Annotations以及 Jakarta Authentication 等规范;是一个Servlet容器,也就是说Tomcat是实现了部分J2EE规范的服务器。
Tomcat9之前都是使用的J2EE,而在Tomcat10之后全部使用JakartaEE规范。
官方网站:https://tomcat.apache.org
源代码:https://github.com/apache/tomcat
如何阅读源码
查看README,准备官方文档
分析项目结构
分析配置文件
不要使用调试递进的形式进行源码研究。而是一定要利用自己的语言知识,来进行推理和阅读
看接口划分模块
模块划分之后,逐个击破,广度优先,而非深度优先,不要深究模块之间的联系
融会贯通(研究细节)
tomcat的项目结构以及目录
源码路径:
/bin 二进制,大部分是执行脚本,分为linux以及windows
/conf 配置文件夹
/logs 日志路径
/res tomcat的一些资源,比如欢迎页面
/webapps 存放servlet的文件夹,默认会有管理页等
/work 工作路径,比如jsp解析完成后的servlet java文件环境变量:
根据 catalina.sh start 可以最终找到启动类:org.apache.catalina.startup.Bootstrap。
配置文件
server.xml
tomcat启动的最核心的配置文件,结构如下:
Server 元素代表tomcat服务实例,其中端口8005用于关闭服务的监听端口
Service 元素则代表一个Engine元素以及一组与之相连的Connector元素,可以有多个Service,多个Service之间的Connnector是相互隔离的。
Connector 元素是用于与客户端建立连接请求的连接器,可指定连接的端口、协议、连接超时时间等
Engine 元素是用于处理连接请求并返回响应结果的引擎,一个Engine包含多个host
Host 元素处理一个特定的host主机,一个host又有可能包含多个不同的web应用程序
Context 代表一个应用程序,一个web应用程序中又包含多个Servlet
web.xml
web.xml是Tomcat的所有的web应用的属性默认值。
logging.properties
日志配置,包含日志级别,打印格式等。
context.xml
context代表了一个web应用程序,该配置主要监听 WEB-INF下的资源,当这些资源发生变动时,立马重新加载应用。
Tomcat架构

Tomcat的整体架构是一个树形结构,每个组件负责管理自己的生命周期以及他的子组件的生命周期。

通过对该组件树进行前序遍历,可以很方便的控制父组件与其下的子组件的生命周期状态。比如要将server状态变为start,将会使用前序遍历的方式依次寻找service、connector、engine、host、context组件,当所有子组件启动后,server就完成了启动。并且,可以在这些步骤中增加Listener以监听每个组件的状态变化。
组件的生命周期管理
每个组件都实现Lifecycle接口,此接口定义了组件的主要的生命周期方法,他的定义如下,在该接口的注释中,明确定义了整个生命周期的状态机图,以及事件监听的相关方法:
生命周期监听器:
事件接口:
组件的生命周期状态枚举:
最后更新于
这有帮助吗?