Tomcat 基础与整体架构

在这里插入图片描述

1. 引言

Tomcat 是 Apache 基金会下最成功的开源项目之一,既是 Servlet 容器,又可作为 轻量级 Web 服务器
它实现了 Servlet 规范JSP 规范,是大多数 Java Web 应用的默认运行环境。
要理解 Tomcat,必须先掌握它的整体架构,包括核心组件、生命周期、配置与源码入口。


2. Tomcat 的定位

  • Web 服务器:可以处理 HTTP 请求,返回静态文件(HTML、CSS、JS、图片等)。
  • Servlet 容器:遵循 Java Servlet 规范,支持动态请求处理(Servlet、JSP、Filter、Listener)。
  • 嵌入式应用容器:Spring Boot 默认内置 Tomcat,简化了应用部署。

Tomcat 不是功能最全的 Web 服务器,但它轻量、灵活,适合 中小型应用和微服务架构


3. Tomcat 核心组件模型

Tomcat 内部采用 分层解耦 的设计,主要分为两大核心部分:

  • Connector(连接器)

    • 负责接收请求、解析协议(HTTP/HTTPS/AJP)、封装成 Request/Response,再交给容器处理。
    • 核心类:org.apache.coyote.http11.Http11NioProtocol
  • Container(容器)

    • 负责执行请求,调用对应的 Servlet。
    • 采用四层容器模型:Engine → Host → Context → Wrapper。
    • 核心类:org.apache.catalina.core.StandardEngine

两者之间由 Service 进行绑定,最终由 Server 统一管理。

👉 结构图:

Server
 └── Service
      ├── Connector (Coyote)
      └── Container (Catalina)
            └── Engine
                 └── Host
                      └── Context
                           └── Wrapper

4. Server 与 Service

  • Server

    • 整个 Tomcat 实例的顶层对象,代表一个运行的 Tomcat 进程。
    • 管理多个 Service,可通过 JMX 暴露管理接口。
    • 配置入口:<Server port="8005" shutdown="SHUTDOWN">
  • Service

    • 将多个 Connector 与一个 Container 组合在一起。
    • 一个 Service 可以同时支持 HTTP、HTTPS、AJP 协议。
    • 配置入口:<Service name="Catalina">

源码入口:

// org.apache.catalina.startup.Catalina
public void load() {
    Server server = new StandardServer();
    // 解析 server.xml,创建 Service、Connector、Container
}

5. Connector(连接器)

  • 作用:负责监听端口、接收请求、解析协议。

  • 协议实现

    • BIO(阻塞 IO)
    • NIO(非阻塞 IO,默认)
    • APR(基于 Apache Portable Runtime,性能更高)

请求流转:

  1. Socket 接收请求 → Endpoint
  2. 协议解析(HTTP/1.1、AJP) → Processor
  3. 封装为 Request/Response 对象
  4. 转交给 Container 处理

源码关键类:

  • org.apache.coyote.AbstractProtocol
  • org.apache.coyote.http11.Http11Processor

6. Container(容器)

容器是 Tomcat 的核心,负责 请求分发与执行 Servlet。采用 四层嵌套容器模型

  • Engine:一个 Service 只能有一个 Engine,代表整个 Servlet 引擎。
  • Host:表示一个虚拟主机(域名绑定)。
  • Context:表示一个 Web 应用(对应 webapps/ 目录下的项目)。
  • Wrapper:表示单个 Servlet 实例。

👉 请求流转:
Connector → Engine → Host → Context → Wrapper → Servlet

源码关键类:

  • org.apache.catalina.core.StandardEngine
  • org.apache.catalina.core.StandardHost
  • org.apache.catalina.core.StandardContext
  • org.apache.catalina.core.StandardWrapper

7. Tomcat 启动流程

Tomcat 的启动由 Bootstrap 完成:

  1. Bootstrap 初始化

    • 加载配置文件 server.xml
    • 初始化 Catalina(核心控制器)
  2. Catalina 加载 Server

    • 创建 StandardServer → Service → Connector/Container
  3. 启动 Server

    • 调用 server.start(),启动所有 Service
    • Service 内部启动 Connector(监听端口)、Container(初始化 WebApp)

源码入口:

// org.apache.catalina.startup.Bootstrap
public static void main(String[] args) {
    Bootstrap bootstrap = new Bootstrap();
    bootstrap.init();
    bootstrap.start();
}

8. Tomcat 配置文件结构

  • server.xml

    • 定义 Server、Service、Connector、Engine、Host
    • 入口配置文件
  • web.xml

    • 定义 Servlet、Filter、Listener
    • 全局与应用级别配置
  • context.xml

    • 定义 Web 应用上下文配置(Session、数据源、JNDI)

👉 配置关系图:

server.xml
 └── Service
      ├── Connector
      └── Engine
           └── Host
                └── Context
                     └── web.xml

9. 总结

在这一篇,我们从 宏观架构 出发,梳理了 Tomcat 的核心组成:

  • Server/Service:整体运行环境和服务绑定
  • Connector:协议处理入口(Coyote)
  • Container:请求执行核心(Catalina)
  • 启动流程:Bootstrap → Catalina → Server
  • 配置体系:server.xml、web.xml、context.xml

这为后续深入理解 连接器原理、容器体系、类加载机制 打下基础。
在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐