【Apache Tomcat】

目录

  • [Tomcat 基本简介](#Tomcat 基本简介)
  • [Tomcat 架构组成](#Tomcat 架构组成)
  • [Tomcat 的目录结构](#Tomcat 的目录结构)
  • [Tomcat 的工作原理](#Tomcat 的工作原理)
  • [Tomcat 的配置文件](#Tomcat 的配置文件)
  • [Tomcat 与其他服务器对比](#Tomcat 与其他服务器对比)
  • [Tomcat 使用场景](#Tomcat 使用场景)
  • [Tomcat 与 Spring Boot](#Tomcat 与 Spring Boot)
  • 常见问题与优化

Tomcat(全称 Apache Tomcat)是由 Apache 软件基金会开发和维护的一款 开源的 Web 服务器与 Servlet 容器,用于运行基于 Java 的 Web 应用程序。它广泛应用于中小型企业和开发测试环境中,是学习和部署 Java Web 的首选服务器。

Tomcat 基本简介

  • 开发者:Apache 软件基金会
  • 编程语言:Java
  • 最新版本:可参考官网 https://tomcat.apache.org
  • 核心功能:
    • 支持 Servlet 规范(如 Servlet 4.0)
    • 支持 JSP(Java Server Pages)
    • 支持 WebSocket
    • 支持 HTTP/1.1、HTTP/2 等协议(版本依赖)

Tomcat 实际上是一个轻量级的 Servlet 容器(Servlet Container),它也可以当作 HTTP Web 服务器来使用,但它不是一个完整的 Java EE 应用服务器(如 GlassFish、WildFly)。

Tomcat 架构组成

Tomcat 主要由以下几个核心组件组成:

  1. Server
    • 表示整个服务器实例,server.xml 配置文件中最顶层的元素。
  2. Service
    • Server 可以包含多个 Service。
    • 每个 Service 由 Connector 和 Engine 两部分组成。
  3. Connector(连接器)
    • 负责与客户端通信(接收 HTTP 请求,返回响应)。
    • 支持协议:HTTP、AJP 等。
    • 常见配置:
xml 复制代码
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/>
  1. Engine(引擎)
    • 处理 Connector 传入的请求。
    • 属于 Service 内部组件。
    • 包含 Host 容器。
  2. Host(虚拟主机)
    • 每个 Host 表示一个虚拟主机。
    • 一个 Host 包含多个 Web 应用(Context)。
  3. Context(上下文)
    • 表示一个 Web 应用,通常对应 webapps 下的一个目录。
    • 每个 Context 对应一个 web.xml 文件。

Tomcat 的目录结构

perl 复制代码
apache-tomcat-<version>/
├── bin/         # 启动与关闭脚本(startup.sh / shutdown.bat)
├── conf/        # 配置文件(server.xml、web.xml 等)
├── lib/         # 所有 Tomcat 运行所需的 jar 包
├── logs/        # 日志文件
├── webapps/     # 默认 Web 应用部署目录
├── work/        # Servlet/JSP 编译后的临时文件
├── temp/        # 临时文件

Tomcat 的工作原理

  1. 启动 Tomcat(执行 bin/startup.sh)
  2. 初始化配置(加载 server.xml)
  3. 创建 Connector,监听端口(如 8080)
  4. 接收到 HTTP 请求后交给对应 Context
  5. Servlet 容器处理请求:
    • 查找对应 Servlet
    • 调用其 service() 方法
  6. 返回处理结果给客户端

Tomcat 的配置文件

  1. conf / server.xml
    Tomcat 的主配置文件,管理服务、端口、连接器等。
  2. conf / web.xml
    默认 Web 应用的全局配置文件,比如 MIME 类型映射、默认欢迎页、错误页面等。
  3. conf / context.xml
    所有 Web 应用的共享 Context 配置。

Tomcat 与其他服务器对比

服务器 类型 是否支持 Java EE 完整规范 特点
Tomcat Web服务器+Servlet容器 否 轻量、高性能、易于部署
Jetty Servlet 容器 否 模块化、嵌入式应用多
GlassFish Java EE 应用服务器 是 官方 Java EE 实现,重量级
WildFly Java EE 应用服务器 是 高性能企业级服务器

Tomcat 使用场景

  1. Java Web 开发与学习
  2. 轻量级 Web 应用部署
  3. 微服务架构中的 Servlet 容器嵌入
  4. 嵌入式服务器(可内嵌到 Spring Boot)

Tomcat 与 Spring Boot

Spring Boot 内置了 Tomcat,默认使用的是 org.apache.catalina.startup.Tomcat 启动类,实现嵌入式部署:

java 复制代码
@SpringBootApplication
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}

可以通过配置文件指定端口:

yaml 复制代码
server:
  port: 8081

常见问题与优化

  1. 启动慢 / 内存不足
  2. 端口占用
    • 修改 server.xml 中
  3. Session 共享问题
    • 使用 Redis / 数据库持久化 session
    • 或配置 Tomcat 集群
  4. JSP 编译慢
    • 预编译 JSP 或使用更高版本的 JDK