Tomca教程
Tomcat Manager
Tomcat Realm 配置
Tomcat 安全管理
Tomcat JNDI 资源
Tomcat JDBC 数据源
Tomcat 类加载机制
Tomcat JSPs
Tomcat SSL/TLS配置
Tomcat SSI
Tomcat CGI
Tomcat 代理支持
Tomcat MBean 描述符
Tomcat 默认 Servlet
Tomcat 集群
Tomcat 连接器
Tomcat监控与管理
Tomcat 日志机制
Tomcat 基于 APR 的原生库
Tomcat 虚拟主机
Tomcat 高级 IO 机制
Tomcat 附加组件
Tomcat 安全性注意事项
Tomcat Windows 服务
Tomcat Windows 认证
Tomcat 的 JDBC 连接池
Tomcat WebSocket 支持
Tomcat 重写机制

Tomcat配置

本节将列举一些重要、常见的配置项。详细的 Tomcat8 配置可以参考 Tomcat 8 配置官方参考文档 。

Server

Server 元素表示整个 Catalina servlet 容器。

因此,它必须是 conf/server.xml 配置文件中的根元素。它的属性代表了整个 servlet 容器的特性。

属性表

属性

描述

备注

className

这个类必须实现org.apache.catalina.Server接口。

默认 org.apache.catalina.core.StandardServer

address

服务器等待关机命令的TCP / IP地址。如果没有指定地址,则使用localhost。

 

port

服务器等待关机命令的TCP / IP端口号。设置为-1以禁用关闭端口。

 

shutdown

必须通过TCP / IP连接接收到指定端口号的命令字符串,以关闭Tomcat。

 

Service

Service元素表示一个或多个连接器组件的组合,这些组件共享一个用于处理传入请求的引擎组件。Server 中可以有多个 Service。

属性表

属性

描述

备注

className

这个类必须实现org.apache.catalina.Service接口。

默认 org.apache.catalina.core.StandardService

name

此服务的显示名称,如果您使用标准 Catalina 组件,将包含在日志消息中。与特定服务器关联的每个服务的名称必须是唯一的。

 

实例 - conf/server.xml 配置文件示例

  ...

Executor

Executor表示可以在Tomcat中的组件之间共享的线程池。

属性表

属性

描述

备注

className

这个类必须实现org.apache.catalina.Executor接口。

默认 org.apache.catalina.core.StandardThreadExecutor

name

线程池名称。

要求唯一, 供Connector元素的executor属性使用

namePrefix

线程名称前缀。

 

maxThreads

最大活跃线程数。

默认200

minSpareThreads

最小活跃线程数。

默认25

maxIdleTime

当前活跃线程大于minSpareThreads时,空闲线程关闭的等待最大时间。

默认60000ms

maxQueueSize

线程池满情况下的请求排队大小。

默认Integer.MAX_VALUE

Connector

Connector代表连接组件。Tomcat 支持三种协议:HTTP/1.1、HTTP/2.0、AJP。

属性表

属性

说明

备注

asyncTimeout

Servlet3.0规范中的异步请求超时

默认30s

port

请求连接的TCP Port

设置为0,则会随机选取一个未占用的端口号

protocol

协议. 一般情况下设置为 HTTP/1.1,这种情况下连接模型会在NIO和APR/native中自动根据配置选择

 

URIEncoding

对URI的编码方式.

如果设置系统变量org.apache.catalina.STRICT_SERVLET_COMPLIANCE为true,使用 ISO-8859-1编码;如果未设置此系统变量且未设置此属性, 使用UTF-8编码

useBodyEncodingForURI

是否采用指定的contentType而不是URIEncoding来编码URI中的请求参数

 

以下属性在标准的Connector(NIO, NIO2 和 APR/native)中有效:

属性

说明

备注

acceptCount

当最大请求连接maxConnections满时的最大排队大小

默认100,注意此属性和Executor中属性maxQueueSize的区别.这个指的是请求连接满时的堆栈大小,Executor的maxQueueSize指的是处理线程满时的堆栈大小

connectionTimeout

请求连接超时

默认60000ms

executor

指定配置的线程池名称

 

keepAliveTimeout

keeAlive超时时间

默认值为connectionTimeout配置值.-1表示不超时

maxConnections

最大连接数

连接满时后续连接放入最大为acceptCount的队列中. 对 NIO和NIO2连接,默认值为10000;对 APR/native,默认值为8192

maxThreads

如果指定了Executor, 此属性忽略;否则为Connector创建的内部线程池最大值

默认200

minSpareThreads

如果指定了Executor, 此属性忽略;否则为Connector创建线程池的最小活跃线程数

默认10

processorCache

协议处理器缓存Processor对象的大小

-1表示不限制.当不使用servlet3.0的异步处理情况下: 如果配置Executor,配置为Executor的maxThreads;否则配置为Connnector的maxThreads. 如果使用Serlvet3.0异步处理, 取maxThreads和maxConnections的最大值

Context

Context元素表示一个Web应用程序,它在特定的虚拟主机中运行。每个Web应用程序都基于Web应用程序存档(WAR)文件,或者包含相应的解包内容的相应目录,如Servlet规范中所述。

属性表

属性

说明

备注

altDDName

web.xml部署描述符路径

默认 /WEB-INF/web.xml

docBase

Context的Root路径

和Host的appBase相结合, 可确定web应用的实际目录

failCtxIfServletStartFails

同Host中的failCtxIfServletStartFails, 只对当前Context有效

默认为false

logEffectiveWebXml

是否日志打印web.xml内容(web.xml由默认的web.xml和应用中的web.xml组成)

默认为false

path

web应用的context path

如果为根路径,则配置为空字符串(""), 不能不配置

privileged

是否使用Tomcat提供的manager servlet

 

reloadable

/WEB-INF/classes/ 和/WEB-INF/lib/ 目录中class文件发生变化是否自动重新加载

默认为false

swallowOutput

true情况下, System.out和System.err输出将被定向到web应用日志中

默认为false

Engine

Engine元素表示与特定的Catalina服务相关联的整个请求处理机器。它接收并处理来自一个或多个连接器的所有请求,并将完成的响应返回给连接器,以便最终传输回客户端。

属性表

属性

描述

备注

defaultHost

默认主机名,用于标识将处理指向此服务器上主机名称但未在此配置文件中配置的请求的主机。

这个名字必须匹配其中一个嵌套的主机元素的名字属性。

name

此引擎的逻辑名称,用于日志和错误消息。

在同一服务器中使用多个服务元素时,每个引擎必须分配一个唯一的名称。

Host

Host元素表示一个虚拟主机,它是一个服务器的网络名称(如“www.mycompany.com”)与运行Tomcat的特定服务器的关联。

属性表

属性

说明

备注

name

名称

用于日志输出

appBase

虚拟主机对应的应用基础路径

可以是个绝对路径, 或CATALINABASE相对路径||xmlBase|虚拟主机XML基础路径,里面应该有Contextxml配置文件|可以是个绝对路径,或CATALINABASE相对路径||xmlBase|虚拟主机XML基础路径,里面应该有Contextxml配置文件|可以是个绝对路径,或{CATALINA_BASE}相对路径

createDirs

当appBase和xmlBase不存在时,是否创建目录

默认为true

autoDeploy

是否周期性的检查appBase和xmlBase并deploy web应用和context描述符

默认为true

deployIgnore

忽略deploy的正则

 

deployOnStartup

Tomcat启动时是否自动deploy

默认为true

failCtxIfServletStartFails

配置为true情况下,任何load-on-startup >=0的servlet启动失败,则其对应的Contxt也启动失败

默认为false

Cluster

由于在实际开发中,我从未用过Tomcat集群配置,所以没研究。

启动

部署方式

这种方式要求本地必须安装 Tomcat 。

将打包好的 war 包放在 Tomcat 安装目录下的 webapps 目录下,然后在 bin 目录下执行 startup.bat 或 startup.sh ,Tomcat 会自动解压 webapps 目录下的 war 包。

成功后,可以访问 http://localhost:8080/xxx (xxx 是 war 包文件名)。

注意

以上步骤是最简单的示例。步骤中的 war 包解压路径、启动端口以及一些更多的功能都可以修改配置文件来定制 (主要是 server.xml 或 context.xml 文件)。

嵌入式

API 方式

在 pom.xml 中添加依赖


  org.apache.tomcat.embed
  tomcat-embed-core
  8.5.24
添加 SimpleEmbedTomcatServer.java 文件,内容如下:
import java.util.Optional;import org.apache.catalina.startup.Tomcat;
public class SimpleTomcatServer {
    private static final int PORT = 8080;
    private static final String CONTEXT_PATH = "/javatool-server";

    public static void main(String[] args) throws Exception {
        // 设定 profile
        Optional profile = Optional.ofNullable(System.getProperty("spring.profiles.active"));
        System.setProperty("spring.profiles.active", profile.orElse("develop"));

        Tomcat tomcat = new Tomcat();
        tomcat.setPort(PORT);
        tomcat.getHost().setAppBase(".");
        tomcat.addWebapp(CONTEXT_PATH, getAbsolutePath() + "src/main/webapp");
        tomcat.start();
        tomcat.getServer().await();
    }

    private static String getAbsolutePath() {
        String path = null;
        String folderPath = SimpleEmbedTomcatServer.class.getProtectionDomain().getCodeSource().getLocation().getPath()
                .substring(1);
        if (folderPath.indexOf("target") > 0) {
            path = folderPath.substring(0, folderPath.indexOf("target"));
        }
        return path;
    }}

成功后,可以访问 http://localhost:8080/javatool-server 。

说明

本示例是使用 org.apache.tomcat.embed 启动嵌入式 Tomcat 的最简示例。

这个示例中使用的是 Tomcat 默认的配置,但通常,我们需要对 Tomcat 配置进行一些定制和调优。为了加载配置文件,启动类就要稍微再复杂一些。这里不想再贴代码,有兴趣的同学可以参考:

示例项目

使用 maven 插件启动(不推荐)

不推荐理由:这种方式启动 maven 虽然最简单,但是有一个很大的问题是,真的很久很久没发布新版本了(最新版本发布时间:2013-11-11)。且貌似只能找到 Tomcat6 、Tomcat7 插件。

使用方法

在 pom.xml 中引入插件


  org.apache.tomcat.maven
  tomcat7-maven-plugin
  2.2
  
    8080
    /${project.artifactId}
    UTF-8
  

运行 mvn tomcat7:run 命令,启动 Tomcat。

成功后,可以访问 http://localhost:8080/xxx (xxx 是 ${project.artifactId} 指定的项目名)。

IDE 插件

常见 Java IDE 一般都有对 Tomcat 的支持。

以 Intellij IDEA 为例,提供了 Tomcat and TomEE Integration 插件(一般默认会安装)。

使用步骤

·点击 Run/Debug Configurations > New Tomcat Server > local ,打开 Tomcat 配置页面。

·点击 Confiure... 按钮,设置 Tomcat 安装路径。

·点击 Deployment 标签页,设置要启动的应用。

·设置启动应用的端口、JVM 参数、启动浏览器等。

·成功后,可以访问 http://localhost:8080/(当然,你也可以在 url 中设置上下文名称)。

说明

个人认为这个插件不如 Eclipse 的 Tomcat 插件好用,Eclipse 的 Tomcat 插件支持对 Tomcat xml 配置文件进行配置。而这里,你只能自己去 Tomcat 安装路径下修改配置文件。