帮助文档 > 117数据 >Tomcat 核心配置

Tomcat 核心配置

发布时间:2024-08-09 17:08

Tomcat 的主要配置文件是 `server.xml`,该文件位于 `$TOMCAT_HOME/conf` 目录中,在本例中,完整路径为 `/usr/local/conf/server.xml`。接下来我们将对 `server.xml` 配置文件进行详细解释。这个文件的主要标签结构如下:

```xml









```

接下来逐一介绍 `server.xml` 配置文件中的主要标签。

【1】 Server 标签

Tomcat 默认的管理端口是 8005,该端口默认监听本地服务器 `127.0.0.1`。如果将 `port` 属性设置为 0,Tomcat 会选择一个随机端口。Tomcat 接收到 `SHUTDOWN`(大小写敏感)字符串后,会关闭这个 Server 实例。为了安全起见,建议禁用此管理功能。可以通过将 `SHUTDOWN` 修改为一个难以猜测的字符串,或者将 `port` 设置为 -1 等无效端口来实现。

示例代码如下:

















type="org.apache.catalina.UserDatabase"
description="可更新和保存的用户数据库"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml"/>



...

注意: 此处的 `Server` 标签不能被注释,否则 Tomcat 服务将无法启动。

【2】Service 标签

`Service` 标签用于创建一个 `Service` 实例,默认实现类为 `org.apache.catalina.core.StandardService`。在默认配置中,Tomcat 仅为 `Service` 指定了名称,默认为 `Catalina`。`Service` 标签的子标签包括 `Listener`、`Executor`、`Connector` 和 `Engine`,各子标签的功能如下:

①`Listener`:用于为 `Service` 添加生命周期监听器。
②`Executor`:用于配置 `Service` 共享的线程池。
③`Connector`:用于配置 `Service` 中包含的连接器。
④`Engine`:用于配置与 `Service` 中连接器关联的 Servlet 容器引擎。

示例代码如下:

```xml

...

```

【3】 Executor 标签

在默认情况下,`Service` 没有配置共享线程池。如果需要添加线程池,可以在 `` 标签下进行如下配置:

①`name`:线程池的名称,用于在 `Connector` 中指定。
②`namePrefix`:每个创建的线程的名称前缀,单个线程的名称格式为 `namePrefix + threadNumber`。
③`maxThreads`:线程池中允许的最大线程数。
④`minSpareThreads`:最小的活跃线程数,也称为核心池线程数,这些线程不会被销毁,始终存在。
⑤`maxIdleTime`:线程的空闲时间,超过该时间的空闲线程将被销毁。默认值为 60000 毫秒(1 分钟)。
⑥`maxQueueSize`:在执行前,线程排队的最大数量,默认为 `Integer.MAX_VALUE`,即理论上的无限制。这个值通常不需要修改,除非特殊情况下,以免导致请求无法处理。
⑦`prestartminSpareThreads`:指示是否在启动线程池时预先启动部分最小活跃线程,默认值为 `false`(不预先启动)。
⑧`threadPriority`:线程池中线程的优先级,默认值为 5,取值范围为 1 至 10。
⑨`className`:线程池的实现类。如果未指定,默认使用 `org.apache.catalina.core.StandardThreadExecutor` 作为实现类。如果要使用自定义线程池,首先需要实现 `org.apache.catalina.Executor` 接口。

示例代码如下:

```xml

namePrefix="thread-exec-"
maxThreads="200"
minSpareThreads="100"
maxIdleTime="60000"
maxQueueSize="Integer.MAX_VALUE"
prestartminSpareThreads="false"
threadPriority="5"
className="org.apache.catalina.core.StandardThreadExecutor"/>
```

【4】Connector 标签

`Connector` 标签用于创建连接器实例。默认情况下,`server.xml` 中配置了两个连接器,一个支持 HTTP 协议,另一个支持 AJP 协议。在大多数情况下,我们不需要额外添加连接器配置,而是根据实际需求优化现有的连接器。`Connector` 标签的常用属性如下:

①`port`:指定连接器的端口号。`Connector` 用于创建服务端的 Socket 并进行监听,以等待客户端的连接请求。如果此属性设置为 0,则 Tomcat 会随机选择一个可用端口号供当前连接器使用。
②`protocol`:当前连接器支持的协议,默认值为 HTTP/1.1。该属性采用自动切换机制,根据本地环境选择基于 Java NIO 的连接器或基于本地 APR 的连接器(取决于是否安装了 Tomcat 的本地库)。
③`connectionTimeout`:连接器在接收到连接后的等待超时时间,单位为毫秒。设置为 -1 表示不会超时。
④`redirectPort`:当前连接器不支持 SSL 请求,因此当接收到一个需要 SSL 传输的请求时,Catalina 会自动将请求重定向到指定的端口。
⑤`executor`:指定共享线程池的名称,也可以通过 `maxThreads`、`minSpareThreads` 等属性来配置内部线程池。
⑥`URIEncoding`:指定 URI 编码的字符编码。Tomcat 8.x 版本默认编码为 UTF-8,而 Tomcat 7.x 版本默认使用 ISO8859-1。

示例代码如下:

```xml



```

如果未指定共享线程池,可以通过配置一些线程池属性,连接器将自行维护一个线程池。但如果每个连接器都维护一个独立的线程池,可能会导致资源浪费。

示例代码如下:

```xml

protocol="HTTP/1.1"
executor="commonThreadPool"
maxThreads="1000"
minSpareThreads="1000"
acceptCount="1000"
maxConnections="1000"
connectionTimeout="20000"
compression="on"
compressionMinSize="2048"
disableUploadTimeout="true"
redirectPort="8443"
URIEncoding="UTF-8" />
```

【5】 Engine 标签

`Engine` 标签表示 Servlet 引擎,其常用属性如下:

①`name`:指定引擎的名称,默认值为 Catalina。
②`defaultHost`:默认使用的虚拟主机名称。当客户端请求的主机无效时,默认虚拟主机会处理请求,默认值为 `localhost`。

示例代码如下:

```xml

...

```

【6】 Host 标签

`Host` 标签用于配置虚拟主机,其常见属性如下:

①`name`:主机名称,对应 `Engine` 配置中的 `defaultHost`。
②`appBase`:项目存放的位置,支持相对路径或绝对路径。
③`unpackWARs`:是否自动解压 WAR 文件。
④`autoDeploy`:是否启用自动部署,即热部署。

示例代码如下:

```xml

...

```

【7】Context 标签

`Context` 标签用于配置 Web 应用,常见属性如下:

①`docBase`(磁盘路径):Web 应用目录或 WAR 包的部署路径,可以是绝对路径,也可以是相对于 `Host` 的 `appBase` 的相对路径。
②`path`(浏览器路径):Web 应用的上下文路径。如果主机名为 `localhost`,则该 Web 应用的访问根路径为 `http://localhost:8080/web_demo`。

示例代码如下:

```xml
www.abc.com" appBase="webapps" unpackWARs="true" autoDeploy="true">



directory="logs"
prefix="localhost_access_log"
suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />

```

本文导读

客户热线:13306992629

客户服务中心
Baidu
map