Tomcat 介绍-01
Tomcat 详细介绍
一、Tomcat 概述
Apache Tomcat 是一个开源的 Java Servlet 容器,实现了 Java Servlet、JavaServer Pages (JSP)、Java Expression Language 和 Java WebSocket 技术。它是 Apache 软件基金会的一个顶级项目,是开发和部署 Java Web 应用程序的流行选择。
主要特点:
-
轻量级且高效
-
完全符合 Java EE (现 Jakarta EE) 规范
-
高度可配置和可扩展
-
良好的社区支持和文档
-
跨平台(可在任何支持 Java 的平台上运行)
二、Tomcat 目录结构
典型的 Tomcat 安装目录结构如下:
apache-tomcat-x.y.z/ ├── bin/ # 可执行脚本和程序 ├── conf/ # 配置文件 ├── lib/ # 共享库文件 ├── logs/ # 日志文件 ├── temp/ # 临时文件 ├── webapps/ # 部署的Web应用程序 ├── work/ # 工作目录,存放JSP编译后的类文件 └── LICENSE └── NOTICE └── README.md
详细目录说明:
-
bin 目录
-
包含启动和停止 Tomcat 的脚本
-
主要文件:
-
startup.sh/startup.bat- 启动 Tomcat -
shutdown.sh/shutdown.bat- 停止 Tomcat -
catalina.sh/catalina.bat- 主控制脚本 -
version.sh/version.bat- 显示版本信息
-
-
-
conf 目录
-
包含 Tomcat 的主要配置文件
-
重要文件:
-
server.xml- 主配置文件,定义服务器设置 -
web.xml- 默认的Web应用程序部署描述符 -
context.xml- 默认的上下文配置 -
tomcat-users.xml- 用户、角色和密码配置 -
logging.properties- 日志系统配置
-
-
-
lib 目录
-
包含 Tomcat 服务器和所有 Web 应用程序共享的 JAR 文件
-
包括 Servlet API、JSP API 等核心库
-
-
logs 目录
-
存储 Tomcat 运行时的日志文件
-
主要日志文件:
-
catalina.out- 主日志输出 -
localhost.log- 本地主机相关日志 -
localhost_access_log.*.txt- 访问日志
-
-
-
webapps 目录
-
默认的 Web 应用程序部署目录
-
每个子目录或 WAR 文件代表一个 Web 应用
-
包含一些默认应用:
-
ROOT- 根应用(访问/时显示) -
docs- Tomcat 文档 -
examples- Servlet 和 JSP 示例 -
host-manager和manager- 管理应用
-
-
-
work 目录
-
Tomcat 的工作目录
-
存储 JSP 编译后的 Servlet 类和临时文件
-
可以安全删除,Tomcat 会在需要时重新生成
-
-
temp 目录
-
存储临时文件
-
用于文件上传等临时操作
-
三、Tomcat 核心组件
Tomcat 的核心架构基于以下组件:
-
Server - 代表整个 Tomcat 容器
-
Service - 包含一个或多个 Connector 和一个 Engine
-
Connector - 处理与客户端的通信(HTTP/1.1, AJP 等)
-
Engine - 请求处理管道,包含多个 Host
-
Host - 虚拟主机,包含多个 Context
-
Context - 代表一个 Web 应用程序
Server -》Service -》Connector -》Host -》Context
四、Tomcat 配置文件详解
1. server.xml
主配置文件,主要元素:(可修改访问端口信息,可配置多个connector)
<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 ... />
</Host>
</Engine>
</Service>
</Server>
server.xml 是 Tomcat 的主配置文件,而 Connector(连接器)是其中最重要的组件之一,负责处理客户端与 Tomcat 之间的通信。下面我将详细介绍 Connector 的配置。
一、Connector 基本概念
Connector 是 Tomcat 与外界通信的接口,它:
-
监听特定端口上的请求
-
将请求传递给适当的容器(Engine)
-
将响应返回给客户端
-
支持多种协议(HTTP/1.1, AJP, HTTP/2等)
二、Connector 类型
Tomcat 支持多种 Connector 实现:
-
HTTP Connector - 处理 HTTP/1.1 请求
-
默认端口:8080
-
类名:
org.apache.catalina.connector.http.HttpConnector(Tomcat 4) -
现代 Tomcat 使用:
org.apache.catalina.connector.Connector
-
-
AJP Connector - Apache JServ Protocol,用于与前端 Web 服务器(如 Apache HTTPD)集成
-
默认端口:8009
-
类名:
org.apache.coyote.ajp.AjpProtocol
-
-
HTTP/2 Connector - 支持 HTTP/2 协议
-
需要基于 NIO 或 APR/native 实现
-
三、HTTP Connector 详细配置
以下是一个典型的 HTTP Connector 配置示例:
<Connector
port="8080"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxThreads="200"
minSpareThreads="10"
acceptCount="100"
maxConnections="10000"
compression="on"
compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript"
URIEncoding="UTF-8"
useBodyEncodingForURI="true"
enableLookups="false"
server="Unknown" />
关键属性说明:
1. 基本属性
-
port: 监听的端口号(必需)
-
protocol: 协议类型,如 "HTTP/1.1"(默认)
-
可以指定具体实现类:
org.apache.coyote.http11.Http11NioProtocol
-
-
address: 绑定到特定IP地址(默认监听所有地址)
-
server: 隐藏Tomcat版本信息,设置响应头中的Server字段
2. 连接处理
-
connectionTimeout: 连接超时时间(毫秒),默认60000(1分钟)
-
keepAliveTimeout: Keep-Alive连接超时时间(毫秒)
-
maxKeepAliveRequests: 一个连接上允许的最大请求数(默认100)
3. 线程池配置
-
maxThreads: 最大工作线程数(默认200)
-
minSpareThreads: 最小空闲线程数(默认10)
-
acceptCount: 当所有线程都在使用时,传入连接请求的最大队列长度(默认100)
-
maxConnections: 在任何给定时间服务器接受和处理的最大连接数(默认10000)
4. 性能优化
-
compression: 是否启用压缩(on/off/force)
-
compressionMinSize: 启用压缩的最小数据大小(字节)
-
compressableMimeType: 可压缩的MIME类型列表
-
disableUploadTimeout: 上传时是否禁用超时(默认false)
5. 编码与安全
-
URIEncoding: URI字符编码(默认ISO-8859-1,推荐UTF-8)
-
useBodyEncodingForURI: 是否使用请求体编码解析URI参数
-
enableLookups: 是否对远程客户端执行DNS查询(影响性能,建议false)
-
xpoweredBy: 是否显示X-Powered-By头(建议false)
四、AJP Connector 配置示例
<Connector
port="8009"
protocol="AJP/1.3"
redirectPort="8443"
secretRequired="false"
address="127.0.0.1"
tomcatAuthentication="false" />
AJP 特定属性:
-
secret: AJP协议密钥(安全考虑建议设置)
-
secretRequired: 是否要求密钥(默认true)
-
tomcatAuthentication: 是否使用Tomcat认证(默认true)
五、高级 Connector 配置
1. 使用 NIO 连接器
<Connector
port="8080"
protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="200"
... />
NIO (Non-blocking I/O) 提供更好的并发性能。
2. 使用 APR/native 连接器
<Connector
port="8080"
protocol="org.apache.coyote.http11.Http11AprProtocol"
... />
需要安装 APR 库,提供最佳性能。
3. SSL/TLS 配置
<Connector
port="8443"
protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150"
SSLEnabled="true"
scheme="https"
secure="true">
<SSLHostConfig>
<Certificate
certificateKeystoreFile="conf/localhost-rsa.jks"
certificateKeystorePassword="changeit"
type="RSA" />
</SSLHostConfig>
</Connector>
六、Connector 性能调优建议
-
根据负载调整线程池:
-
maxThreads:根据CPU核心数和应用类型设置(通常200-800) -
acceptCount:设置合理的等待队列大小
-
-
连接超时:
-
生产环境适当减少
connectionTimeout(如20000毫秒)
-
-
启用压缩:
-
对文本内容启用压缩可显著减少传输量
-
-
禁用DNS查询:
-
设置
enableLookups="false"提高性能
-
-
选择合适的协议实现:
-
高并发场景使用NIO或APR/native
-
七、常见问题解决
-
端口冲突:
-
确保端口未被其他程序占用
-
检查防火墙设置
-
-
性能瓶颈:
-
监控线程使用情况调整
maxThreads -
检查
acceptCount是否过小导致请求被拒绝
-
-
内存泄漏:
-
长连接应用适当减少
connectionTimeout -
监控
maxConnections
-
Connector 是 Tomcat 性能调优的关键组件,合理的配置可以显著提高服务器的并发处理能力和稳定性。生产环境中应根据实际负载情况和硬件配置进行细致的调优。
2. web.xml
定义默认的 Servlet、MIME 类型映射、会话配置等。
3. context.xml
定义 Context 级别的配置,如数据源、环境变量等。
五、Tomcat 部署方式
-
自动部署 - 将 WAR 文件或解压的目录放入 webapps 目录
-
手动部署 - 通过编辑 server.xml 或创建 context.xml 文件
-
使用 Manager 应用 - 通过 Web 界面部署
六、Tomcat 管理工具
-
Manager 应用 - 提供基本的部署和管理功能
-
访问路径:
/manager/html -
需要配置 tomcat-users.xml 中的用户角色
-
-
Host Manager - 管理虚拟主机
-
访问路径:
/host-manager/html
-
七、性能调优建议
-
JVM 调优 - 调整内存参数(-Xms, -Xmx)
-
连接器调优 - 调整 maxThreads, acceptCount 等参数
-
禁用不需要的服务 - 如 AJP 连接器(如果不使用)
-
启用压缩 - 减少传输数据量
-
使用 APR/Native 连接器 - 提高性能
八、安全建议
-
删除默认应用(docs, examples, manager 等)如果不需要
-
限制 Manager 应用的访问
-
定期更新 Tomcat 版本
-
使用安全领域(Realm)进行认证
-
配置适当的文件系统权限
Tomcat 是一个强大而灵活的 Servlet 容器,通过了解其目录结构和配置文件,可以更好地管理和优化 Java Web 应用程序的部署和运行。

浙公网安备 33010602011771号