Java-46 深入浅出 Tomcat 核心架构 Catalina 容器全解析 启动流程 线程机制

点一下关注吧!!!非常感谢!!持续更新!!!

🚀 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:

shell 复制代码
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)

核心流程源码位置:

shell 复制代码
 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 实现,支持资源查找

关系图:

shell 复制代码
浏览器请求
   ↓
[Coyote - Connector]  ←------监听端口(如 8080)
   ↓
[Catalina - Engine] ←------实际执行 Servlet 调用逻辑
   ↓
Servlet 执行并返回结果

server.xml

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)。

相关推荐
西阳未落9 分钟前
C++基础(21)——内存管理
开发语言·c++·面试
whltaoin13 分钟前
SpringCloud 项目阶段九:Kafka 接入实战指南 —— 从基础概念、安装配置到 Spring Boot 实战及高可用设计
spring boot·spring cloud·kafka
我的xiaodoujiao36 分钟前
Windows系统Web UI自动化测试学习系列2--环境搭建--Python-PyCharm-Selenium
开发语言·python·测试工具
callJJ39 分钟前
从 0 开始理解 Spring 的核心思想 —— IoC 和 DI(2)
java·开发语言·后端·spring·ioc·di
wangjialelele42 分钟前
Linux中的线程
java·linux·jvm·c++
谷咕咕44 分钟前
windows下python3,LLaMA-Factory部署以及微调大模型,ollama运行对话,开放api,java,springboot项目调用
java·windows·语言模型·llama
没有bug.的程序员1 小时前
MVCC(多版本并发控制):InnoDB 高并发的核心技术
java·大数据·数据库·mysql·mvcc
在下村刘湘2 小时前
maven pom文件中<dependencyManagement><dependencies><dependency> 三者的区别
java·maven
hsjkdhs2 小时前
万字详解C++之构造函数析构函数
开发语言·c++
不务专业的程序员--阿飞3 小时前
JVM无法分配内存
java·jvm·spring boot