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:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

武子康

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值