0%

tomcat之server配置文件

Tomcat server.xml 配置文件详解

server.xml 是 Tomcat 最核心的配置文件,定义了服务器的整体结构、组件关系及运行参数。本文将逐节点解析其配置细节,帮助理解 Tomcat 的工作机制及优化配置。

配置文件整体结构

Tomcat 的 server.xml 采用 XML 格式,核心节点层级关系如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
<Server>                 <!-- 整个 Tomcat 服务器 -->
<Listener /> <!-- 生命周期监听器 -->
<GlobalNamingResources /> <!-- 全局命名资源 -->
<Service> <!-- 服务(连接器 + 引擎) -->
<Executor /> <!-- 共享线程池 -->
<Connector /> <!-- 连接器(接收请求) -->
<Engine> <!-- 引擎(处理请求) -->
<Host> <!-- 虚拟主机 -->
<Context /> <!-- Web 应用上下文 -->
</Host>
</Engine>
</Service>
</Server>

每个节点代表 Tomcat 的一个核心组件,负责特定功能。

核心节点解析

<Server>:整个 Tomcat 实例的根节点

<Server> 是配置文件的根元素,代表整个 Tomcat 服务器,负责启动和管理所有组件。

主要属性
  • port:服务器监听的关闭端口(默认 8005),用于接收关闭命令。

  • shutdown:关闭服务器的指令字符串(默认 SHUTDOWN)。

    示例:通过 telnet 发送关闭命令:

    1
    2
    telnet 127.0.0.1 8005
    > SHUTDOWN # 输入后 Tomcat 会关闭
子节点
  • <Listener>:生命周期监听器,用于监控服务器启动、停止等事件(如 VersionLoggerListener 记录版本信息)。
  • <GlobalNamingResources>:全局 JNDI 资源配置(如数据源),供所有应用共享。
  • <Service>:一个或多个服务组件,每个服务包含连接器和引擎。

<Service>:连接器与引擎的组合

<Service> 将多个连接器(Connector)与一个引擎(Engine)绑定,形成一个独立的服务单元。

属性
  • name:服务名称(默认 Catalina),用于标识服务。
子节点
  • <Executor>:配置共享线程池,供多个连接器复用(优化性能)。
  • <Connector>:连接器,负责接收客户端请求。
  • <Engine>:引擎,负责处理连接器接收的请求。

<Executor>:共享线程池(性能优化关键)

<Executor> 定义全局线程池,多个连接器可共享该线程池,避免重复创建线程,提升性能。默认不配置,需手动添加。

配置示例
1
2
3
4
5
6
7
8
<Executor 
name="tomcatThreadPool" <!-- 线程池名称唯一-->
namePrefix="catalina-exec-" <!-- 线程名称前缀 -->
maxThreads="150" <!-- 最大线程数(默认 200) -->
minSpareThreads="4" <!-- 最小空闲线程数(默认 25) -->
maxIdleTime="60000" <!-- 空闲线程超时时间(毫秒,默认 60000) -->
maxQueueSize="1000" <!-- 任务队列最大长度(默认 Integer.MAX_VALUE) -->
/>
使用方式

<Connector> 中通过 executor 属性引用:

1
2
3
4
5
<Connector 
executor="tomcatThreadPool" <!-- 关联线程池 -->
port="8080"
protocol="HTTP/1.1"
/>

<Connector>:请求接收与协议处理

<Connector> 是 Tomcat 与客户端通信的接口,负责监听端口、接收请求并转换协议。默认配置 HTTP 和 AJP 两种连接器。

主要属性分类
类别 核心属性
基础配置 port(端口)、protocol(协议,如 HTTP/1.1AJP/1.3)、connectionTimeout(连接超时,默认 20000 毫秒)。
性能优化 maxThreads(最大处理线程数)、acceptCount(请求排队数)、maxConnections(最大并发连接数)。
编码与安全 URIEncoding(URI 编码,默认 ISO-8859-1,建议设为 UTF-8)、redirectPort(HTTPS 重定向端口,默认 8443)。
压缩配置 compression="on"(启用 GZIP 压缩)、compressionMinSize(压缩阈值,默认 2048 字节)、compressableMimeType(压缩的 MIME 类型)。
配置示例(HTTP 连接器)
1
2
3
4
5
6
7
8
9
10
11
<Connector 
port="8080"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8" <!-- 解决中文乱码 -->
maxThreads="500" <!-- 支持 500 并发线程 -->
acceptCount="200" <!-- 队列最多 200 个请求 -->
compression="on" <!-- 启用压缩 -->
compressionMinSize="1024" <!-- 大于 1KB 才压缩 -->
/>

<Engine>:请求处理的核心引擎

<Engine> 是服务的请求处理核心,负责将请求路由到对应的虚拟主机(Host)。一个 <Service> 只能有一个 <Engine>

主要属性
  • name:引擎名称(默认 Catalina)。
  • defaultHost:默认虚拟主机(默认 localhost),当请求的主机不存在时使用。
  • jvmRoute:负载均衡场景下的实例标识,用于粘性会话(如 tomcat1)。
子节点
  • <Host>:虚拟主机,引擎通过主机名匹配请求。
  • <Realm>:全局安全认证配置(如用户名密码验证)。

<Host>:虚拟主机配置

<Host> 代表一个虚拟主机(网站),负责管理多个 Web 应用(Context)。

主要属性
  • name:主机名(如 localhostwww.example.com),需与 DNS 配置一致。
  • appBase:应用基础目录(默认 webapps),存放 WAR 包或目录形式的 Web 应用。
  • unpackWARs:是否自动解压 WAR 包(默认 true,建议生产环境设为 false 节省空间)。
  • autoDeploy:是否自动部署新应用(默认 true,定期扫描 appBase 目录)。
配置示例
1
2
3
4
5
6
7
<Host 
name="www.example.com" <!-- 自定义域名 -->
appBase="/var/webapps" <!-- 应用存放路径 -->
unpackWARs="false" <!-- 不解压 WAR 包 -->
autoDeploy="true">
<Alias>example.com</Alias> <!-- 域名别名 -->
</Host>

<Context>:Web 应用上下文

<Context> 配置单个 Web 应用,定义应用的访问路径、部署位置等。

主要属性
  • path:应用访问路径(如 /myapp,根路径用 "")。
  • docBase:应用实际路径(可是目录或 WAR 包,如 webapps/myapp/opt/apps/myapp.war)。
  • reloadable:是否自动重载(默认 false,开发环境可设为 true,监控 WEB-INF 目录变更)。
配置示例
1
2
3
4
5
6
<!-- 将 /opt/myapp 目录映射到 /test 路径 -->
<Context
path="/test"
docBase="/opt/myapp"
reloadable="true" <!-- 开发模式自动重载 -->
/>
子节点(常用)
  • <Manager>:会话管理器配置(如持久化到文件或数据库)。
  • <Loader>:类加载器配置(控制类加载顺序)。
  • <CookieProcessor>:Cookie 解析器(默认 Rfc6265CookieProcessor,兼容最新标准)。

实用配置场景

1. 多虚拟主机配置

通过多个 <Host> 实现多网站部署:

1
2
3
4
5
6
7
8
9
10
11
<Engine name="Catalina" defaultHost="localhost">
<!-- 本地默认主机 -->
<Host name="localhost" appBase="webapps" />

<!-- 自定义网站 -->
<Host name="www.app1.com" appBase="/var/app1">
<Context path="" docBase="ROOT" /> <!-- 根路径应用 -->
</Host>

<Host name="www.app2.com" appBase="/var/app2" />
</Engine>

2. 会话持久化配置

将会话存储到文件(避免 Tomcat 重启丢失会话):

1
2
3
4
5
<Context path="/myapp">
<Manager className="org.apache.catalina.session.PersistentManager">
<Store className="org.apache.catalina.session.FileStore" directory="sessions" />
</Manager>
</Context>

3. 解决中文乱码

在 HTTP 连接器中设置编码:

1
2
3
4
5
6
<Connector 
port="8080"
protocol="HTTP/1.1"
URIEncoding="UTF-8" <!-- URI 编码 -->
useBodyEncodingForURI="true" <!-- 表单提交编码复用 contentType -->
/>

欢迎关注我的其它发布渠道