点一下关注吧!!!非常感谢!!持续更新!!!
🚀 AI篇持续更新中!(长期更新)
目前2025年06月13日更新到:
AI炼丹日志-28 - Audiblez 将你的电子书epub转换为音频mp3 做有声书,持续打造实用AI工具指南!📐🤖
💻 Java篇正式开启!(300篇)
目前2025年06月11日更新到:
Java-44 深入浅出 Nginx - 底层进程机制 Master Worker 机制原理 常用指令
MyBatis 已完结,Spring 已完结,深入浅出助你打牢基础!
📊 大数据板块已完成多项干货更新(300篇):
包括 Hadoop、Hive、Kafka、Flink、ClickHouse、Elasticsearch 等二十余项核心组件,覆盖离线+实时数仓全栈!
目前2025年06月13日更新到:
大数据-278 Spark MLib - 基础介绍 机器学习算法 梯度提升树 GBDT案例 详解
内部组件与流程
下面是它的详细解释:
Catalina 容器
Catalina 是 Apache Tomcat 的 Servlet 容器实现,其主要职责包括:
- 解析 HTTP 请求并调用对应的 Servlet
- 管理 Servlet 的生命周期(加载、初始化、销毁)
- 提供标准的 Servlet API 支持
- 支持 Session 管理、Cookie 处理
- 集成 JSP 编译、JNDI 查找、用户认证等容器级功能
Catalina 的架构是典型的 容器嵌套结构,核心接口是 org.apache.catalina.Container:
Engine (顶级容器)
└── Host (虚拟主机)
└── Context (Web应用)
└── Wrapper (单个Servlet)
- Engine:StandardEngine,代表整个 Catalina 引擎,可以配置多个虚拟主机(Host)
- Host,StandardHost:表示一个虚拟主机,对应 server.xml 中的 配置
- Context,StandardContext:表示一个 Web 应用,通常对应一个 WAR 包或一个 webapps 子目录
- Wrapper,StandardWrapper:表示一个 Servlet(如 LoginServlet)
这些容器都是 Container 接口的实现,支持递归嵌套与生命周期管理(start、stop、init)
分层结构
Tomcat 是有一个由一系列配置(conf/server.xml)的组件构成的Web容器,而Catalina是Tomcat的Servlet容器。
从另一个角度来说,Tomcat 本质上就是一款 Servlet 容器,因为 Catalina 才是 Tomcat的核心,其他模块都是为 Catalina 提供支撑的,比如:Coyote 模块提供链接通信,Jasper模块提供JSP引擎,Naming提供JNDI服务,Juli提供日志服务。
容器结构
我们可以认为整个 Tomcat 就是一个 Catalina 实例,Tomcat 启动的时候会初始化这个个例,Catalina 实例通过加载 server.xml 完成其他实例的创建,创建并管理一个 Server,Server创建管理多个服务,每个服务又可以有多个Connector和一个Container。
● 一个 Catalina 实例
● 一个 Server 实例
● 多个 Service 实例
每一个 Service 实例下可以有多个 Connector 和 一个 Container 实例
● Catalina:负责解析Tomcat配置文件(server.xml),以此来创建服务器Server 组件并进行管理
● Server:服务器表示整个Catalina Servlet容器以及其他组件,负责组装并启动Servlet引擎,Tomcat连接器,Server通过实现LifeCycle接口,提供了一种优雅的启动和关闭整个系统的方式
● Service:服务是Server内部的组件,一个Server包含多个Service,它将若干个Connector组件绑定到一个Container
● Container:容器,负责处理用户的Servlet请求,并返回给对象给Web用户的模块
Container 具体结构
Container 组件下有几种具体的组件,分别是 Engine、Host、Context 和 Wrapper。这 4 种组件是父子关系,Tomcat 通过一种分层的架构,使得 Servlet 容器具有很好的灵活性。
● Engine:表示整个Catalina的Servlet引擎,用来管理多个虚拟站点,一个Service最多只能有一个Engine,但是一个引擎可以包含多个Host
● Host:代表一个虚拟主机,或者说一个站点,可以给Tomca配置多个虚拟主机地址,而一个虚拟主机下可能包含多个Context
● Context:表示一个Web应用程序,一个Web应用可以包含多个Wrapper
● Wrapper:表示一个Servlet,Wrapper作为容器中的最低层,不能包含子容器。上述组件的配置其实就是 conf/server.xml 中
启动流程
Catalina 的启动流程可以通过 bin/startup.sh 脚本追溯到底层 Java 类:
startup.sh 脚本调用 catalina.sh
catalina.sh 会执行:java org.apache.catalina.startup.Bootstrap start
Bootstrap 类完成以下几件事:
- 加载 catalina.jar
- 创建并初始化 Catalina 实例
- 调用 catalina.load() 加载 server.xml 配置
- 调用 catalina.start() 启动服务(包含 Connector 和 Container)
核心流程源码位置:
org.apache.catalina.startup.Bootstrap
-> Catalina
-> Digester (解析 server.xml)
-> Server/Service/Connector/Engine/Host/Context 初始化
Catalina 和其他组件的关系
- Catalina,Servlet 容器核心,处理请求和 Servlet 生命周期
- Coyote,抽象出连接器(Connector),负责接收底层 Socket 请求,并将其转交 Catalina
- Jasper,JSP 编译器,把 JSP 转成 Servlet
- Cluster,会话复制、集群管理模块
- Realm,用户认证与权限模块
- Naming,JNDI 实现,支持资源查找
关系图:
浏览器请求
↓
[Coyote - Connector] ←——监听端口(如 8080)
↓
[Catalina - Engine] ←——实际执行 Servlet 调用逻辑
↓
Servlet 执行并返回结果
server.xml
<Server port="8005" shutdown="SHUTDOWN">
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1" />
<Engine name="Catalina" defaultHost="localhost">
<Host name="localhost" appBase="webapps">
<Context path="/myapp" docBase="myapp" />
</Host>
</Engine>
</Service>
</Server>
说明:
- Server 是最顶级的容器,代表整个 Tomcat 实例
- Service 是逻辑上的服务单元,里面组合了 Connector(通信)与 Engine(业务处理)
- Engine 是 Catalina 的核心执行体
- Host 可以有多个,支持虚拟主机
- Context 对应具体 web 项目
线程处理机制
Catalina 是基于线程池来处理请求的:
- 每个 Connector 内部使用线程池(如 org.apache.tomcat.util.threads.ThreadPoolExecutor)
- 请求进入后会转化为 HttpServletRequest/Response,交由对应的 Wrapper 执行 Servlet
这种机制既能高并发处理请求,也可通过配置限制最大线程数量(防止 OOM)。