编辑
2023-11-04
Tomcat源码学习
00

Engine实现类

Engine 本质是一个容器,因此它继承了 ContainerBase 基类,并且实现了 Engine 接口。

Engine 的子容器是 Host,所以它持有了一个 Host 容器的数组,这些功能都被抽象到了 ContainerBase 中,ContainerBase 中有这样一个数据结构:

ContainerBase 用 HashMap 保存了它的子容器,并且 ContainerBase 还实现了子容器的“增删改查”,甚至连子组件的启动和停止都提供了默认实现,比如 ContainerBase 会用专门的线程池来启动子容器。

java
public class StandardEngine extends ContainerBase implements Engine { private static final Log log = LogFactory.getLog(StandardEngine.class);
编辑
2023-11-04
Tomcat源码学习
00

启动过程

image.png 1.Tomcat 本质上是一个 Java 程序,因此 startup.sh 脚本会启动一个 JVM 来运行 Tomcat 的启动类 Bootstrap。

编辑
2023-11-04
Tomcat源码学习
00

模板设计模式(Template Design Pattern)是一种行为设计模式,用于定义算法的基本结构,同时允许子类重写算法的特定步骤,而无需改变算法的整体结构。模板设计模式通过将算法的通用部分放在一个抽象基类中,将具体实现延迟到子类中,以实现代码的复用和扩展。

编辑
2023-11-04
Tomcat源码学习
00

LifeCycle接口源码

java
package org.apache.catalina;
编辑
2023-11-04
Tomcat源码学习
00

请求流程

image.png

上面这张图描述了组件之间的静态关系,如果想让一个系统能够对外提供服务,我们需要创建、组装并启动这些组件;在服务停止的时候,我们还需要释放资源,销毁这些组件,因此这是一个动态的过程。也就是说,Tomcat 需要动态地管理这些组件的生命周期。