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

相关推荐
开心-开心急了3 分钟前
Flask入门教程——李辉 第一、二章关键知识梳理(更新一次)
后端·python·flask
锦***林5 分钟前
用 Python 写一个自动化办公小助手
开发语言·python·自动化
掘金码甲哥15 分钟前
调试grpc的哼哈二将,你值得拥有
后端
2202_7557443027 分钟前
外贸独立站SEO技术架构深度优化指南
架构·cdn分布式架构
陈小桔27 分钟前
idea中重新加载所有maven项目失败,但maven compile成功
java·maven
小学鸡!28 分钟前
Spring Boot实现日志链路追踪
java·spring boot·后端
xiaogg367840 分钟前
阿里云k8s1.33部署yaml和dockerfile配置文件
java·linux·kubernetes
逆光的July1 小时前
Hikari连接池
java
微风粼粼1 小时前
eclipse 导入javaweb项目,以及配置教程(傻瓜式教学)
java·ide·eclipse
番茄Salad1 小时前
Spring Boot临时解决循环依赖注入问题
java·spring boot·spring cloud