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

如何阅读源码

  1. 查看README,准备官方文档

  2. 分析项目结构

  3. 分析配置文件

  4. 不要使用调试递进的形式进行源码研究。而是一定要利用自己的语言知识,来进行推理和阅读

  5. 看接口划分模块

  6. 模块划分之后,逐个击破,广度优先,而非深度优先,不要深究模块之间的联系

  7. 融会贯通(研究细节)

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启动的最核心的配置文件,结构如下:

  1. Server 元素代表tomcat服务实例,其中端口8005用于关闭服务的监听端口

  2. Service 元素则代表一个Engine元素以及一组与之相连的Connector元素,可以有多个Service,多个Service之间的Connnector是相互隔离的。

  3. Connector 元素是用于与客户端建立连接请求的连接器,可指定连接的端口、协议、连接超时时间等

  4. Engine 元素是用于处理连接请求并返回响应结果的引擎,一个Engine包含多个host

  5. Host 元素处理一个特定的host主机,一个host又有可能包含多个不同的web应用程序

  6. Context 代表一个应用程序,一个web应用程序中又包含多个Servlet

web.xml

web.xml是Tomcat的所有的web应用的属性默认值。

logging.properties

日志配置,包含日志级别,打印格式等。

context.xml

context代表了一个web应用程序,该配置主要监听 WEB-INF下的资源,当这些资源发生变动时,立马重新加载应用。

Tomcat架构

图 2

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

图 3

通过对该组件树进行前序遍历,可以很方便的控制父组件与其下的子组件的生命周期状态。比如要将server状态变为start,将会使用前序遍历的方式依次寻找service、connector、engine、host、context组件,当所有子组件启动后,server就完成了启动。并且,可以在这些步骤中增加Listener以监听每个组件的状态变化。

组件的生命周期管理

每个组件都实现Lifecycle接口,此接口定义了组件的主要的生命周期方法,他的定义如下,在该接口的注释中,明确定义了整个生命周期的状态机图,以及事件监听的相关方法:

生命周期监听器:

事件接口:

组件的生命周期状态枚举:

最后更新于

这有帮助吗?