Skip to content

Tomcat

概述

Apache Tomcat 是由 Apache 基金会开发的 Servlet 容器(Servlet Container),实现了 Java Servlet 和 JavaServer Pages (JSP) 规范,是一个开源的 Web 应用服务器。

JRE与JDK的区别

  • JRE是JAVA运行环境,包含JVM
  • JDK是JAVA开发环境,包含JRE
  • 如果只运行JAVA代码,则只需要JRE,一般情况下直接安装JDK

版本与规范对应

Tomcat 版本Servlet 规范JSP 规范JDK 版本
Tomcat 10.16.03.1>= 21
Tomcat 10.06.03.1>= 17
Tomcat 9.x4.02.3>= 8
Tomcat 8.53.12.3>= 7

核心组件

Tomcat
  ├── Server          顶层容器,代表整个 Tomcat 实例
  │   └── Service     服务,包含一个或多个 Connector 和一个 Engine
  │       ├── Connector   连接器,处理特定协议的请求(HTTP/AJP)
  │       └── Engine      引擎,处理来自 Connector 的请求
  │           └── Host   虚拟主机
  │               └── Context    Web 应用上下文
  │                   └── Wrapper    Servlet 包装器

目录结构

$CATALINA_HOME/
├── bin/           启动/关闭脚本
├── conf/          配置文件
│   ├── server.xml       主配置文件
│   ├── web.xml          Web 应用默认配置
│   ├── tomcat-users.xml 用户配置
│   └── catalina.policy 安全策略
├── lib/           依赖库
├── logs/          日志目录
├── temp/          临时文件
├── webapps/       部署目录
└── work/          编译缓存(JSP → Servlet)

安装与配置

Linux 安装

bash
# 安装jdk
rpm -ivh rpm -ivh jdk-8u181-linux-x64.rpm

# 下载
wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.121/bin/apache-tomcat-9.0.121.tar.gz

# 解压
tar -xzf apache-tomcat-9.0.121.tar.gz -C /opt/

# 创建软连接
ln -s apache-tomcat-9.0.121.tar.gz tomcat

# 设置环境变量
export CATALINA_HOME=/opt/tomcat
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk

常用配置

修改端口

编辑 conf/server.xml

xml
<!-- HTTP 连接器 -->
<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />

<!-- AJP 连接器(与 Nginx/IIS 集成时使用) -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

虚拟主机配置

xml
<Host name="www.example.com" appBase="webapps"
      unpackWARs="true" autoDeploy="true">
  <Context path="/app" docBase="/data/app" />
</Host>

线程池配置

xml
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
          maxThreads="200" minSpareThreads="25" maxQueueSize="100" />

<Connector port="8080" protocol="HTTP/1.1"
           executor="tomcatThreadPool"
           acceptCount="100"
           maxConnections="10000" />

部署方式

1. 自动部署

将 WAR 文件放入 webapps/ 目录,Tomcat 自动解压部署。

2. 手动部署

bash
# 使用 manager 应用
curl -u admin:password http://localhost:8080/manager/text/deploy?path=/myapp&war=file:/path/to/app.war

# 热部署(Tomcat 7+)
# 监控 /path/to/ 目录下的 app.war

3. 配置文件部署

conf/Catalina/localhost/ 下创建 XML 文件:

xml
<!-- conf/Catalina/localhost/myapp.xml -->
<Context docBase="/data/app" path="/myapp" reloadable="true" />

与 Nginx 集成

方式一:反向代理(HTTP)

nginx
server {
    listen 80;
    server_name www.example.com;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

方式二:AJP 协议(性能更优)

nginx
# Nginx 需编译时启用 --with-http_ajp_module
location / {
    proxy_pass ajp://127.0.0.1:8009;
}