3.3 Tomcat 主要配置文件


文档摘要

3.3 Tomcat 主要配置文件 3.3 Tomcat 主要配置文件详解 Tomcat 作为一款流行的开源 Servlet 容器和 Java 应用服务器,其灵活性和可配置性是其核心优势之一。为了实现各种功能和满足不同环境的需求,Tomcat 提供了丰富的配置文件。理解并熟练配置这些文件,是掌握 Tomcat 的关键步骤。本章节将深入探讨 Tomcat 的主要配置文件,帮助您全面了解 Tomcat 的配置体系。 3.3.1 Tomcat 配置文件概述 Tomcat 的配置文件主要集中在 目录下(通常 与 相同,即 Tomcat 安装目录)。这些文件采用 XML 格式,结构清晰,易于阅读和修改。

3.3 Tomcat 主要配置文件

3.3 Tomcat 主要配置文件详解

Tomcat 作为一款流行的开源 Servlet 容器和 Java 应用服务器,其灵活性和可配置性是其核心优势之一。为了实现各种功能和满足不同环境的需求,Tomcat 提供了丰富的配置文件。理解并熟练配置这些文件,是掌握 Tomcat 的关键步骤。本章节将深入探讨 Tomcat 的主要配置文件,帮助您全面了解 Tomcat 的配置体系。

3.3.1 Tomcat 配置文件概述

Tomcat 的配置文件主要集中在 $CATALINA_BASE/conf 目录下(通常 $CATALINA_BASE$CATALINA_HOME 相同,即 Tomcat 安装目录)。这些文件采用 XML 格式,结构清晰,易于阅读和修改。主要的配置文件包括:

  • server.xml: Tomcat 的核心配置文件,用于配置 Tomcat 服务器实例的全局设置,包括端口、连接器(Connector)、引擎(Engine)、虚拟主机(Host)、Realm、Valve 等。它是最重要、也是最复杂的配置文件。

  • web.xml: 默认的 Web 应用程序部署描述符。它定义了应用于所有 Web 应用程序的默认 Servlet、Filter、Listener 等配置。每个 Web 应用程序也可以有自己的 web.xml 文件,位于 WEB-INF 目录下,用于覆盖或扩展全局 web.xml 的配置。

  • context.xml: 用于配置 Context(上下文),代表一个独立的 Web 应用程序。可以配置数据源、资源、会话管理器、安全设置等。Context 配置可以放在 $CATALINA_BASE/conf/context.xml (全局默认 Context),或者在 $CATALINA_BASE/conf/[enginename]/[hostname]/context.xml.default (Host 默认 Context),或者在每个 Web 应用程序的 META-INF/context.xml 中(推荐方式)。

  • tomcat-users.xml: 用于配置 Tomcat 用户和角色信息,主要用于 Tomcat 自带的管理工具(如 Manager 应用和 Host Manager 应用)的身份验证。

  • logging.properties: 配置 Tomcat 的日志系统,包括日志级别、日志输出格式、日志文件位置等。Tomcat 使用 java.util.logging 包进行日志管理。

  • catalina.properties: Tomcat 的属性配置文件,可以定义 Tomcat 启动和运行时使用的各种属性,例如类加载器配置、JNDI 资源配置等。

  • jaspic-providers.xmljaspic-modules.xml: 用于配置 Java Authentication Service Provider Interface for Containers (JASPIC),用于自定义身份验证模块。

以下 Mermaid 图表展示了这些配置文件之间的关系以及它们在 Tomcat 配置体系中的位置:

接下来,我们将逐个深入探讨这些主要配置文件。

3.3.2 server.xml - 核心配置文件详解

server.xml 是 Tomcat 最核心的配置文件,它定义了 Tomcat 服务器的整体架构和运行参数。理解 server.xml 的结构和元素是配置 Tomcat 的基础。

server.xml 的基本结构

server.xml 的根元素是 <Server>,它代表整个 Tomcat 服务器实例。一个 <Server> 元素可以包含以下主要子元素:

  • <Service>: 代表一个或多个 Connector 和一个 Engine 的组合。一个 Tomcat 服务器可以有多个 Service,但通常至少有一个名为 "Catalina" 的 Service。

  • <Connector>: 定义 Tomcat 接收客户端请求的连接器。常见的 Connector 类型有 HTTP Connector (处理 HTTP 请求) 和 AJP Connector (用于与 Apache 等 Web 服务器集成)。

  • <Engine>: Servlet 引擎,负责处理 Connector 接收到的请求,并将请求分发到相应的虚拟主机(Host)和 Web 应用程序(Context)。

  • <Host>: 代表一个虚拟主机,用于托管一个或多个 Web 应用程序。可以配置域名、Web 应用程序部署目录等。

  • <Realm>: 用于配置用户身份验证和授权。Tomcat 提供了多种 Realm 实现,如 UserDatabaseRealm (基于 tomcat-users.xml)、JDBCRealm (基于数据库) 等。

  • <Valve>: 代表一个请求处理阀门,用于在请求处理管道中执行特定的操作,如日志记录、安全检查、会话管理等。

  • <Listener>: 定义在 Tomcat 生命周期事件发生时执行的操作,例如启动和停止事件。

以下 Mermaid 图表更清晰地展示了 <Server> 元素内部的主要结构:

代码实践与详解

下面我们通过代码示例和详细解释来深入了解 server.xml 中各个主要元素的配置。

1. <Server> 元素

<Server> 元素是 server.xml 的根元素,它代表整个 Tomcat 服务器实例。

<Server port="8005" shutdown="SHUTDOWN"> </Server>
  • port: 指定关闭服务器的端口。默认值是 8005。当 Tomcat 接收到发送到此端口的 "SHUTDOWN" 命令时,服务器将优雅地关闭。

  • shutdown: 指定关闭服务器的命令字符串。默认值是 "SHUTDOWN"。

2. <Service> 元素

<Service> 元素代表一个服务,通常包含一个 Engine 和一个或多个 Connector。默认的 Service 名称是 "Catalina"。

<Service name="Catalina"> </Service>
  • name: Service 的名称,用于标识不同的 Service。默认值为 "Catalina"。

3. <Connector> 元素

<Connector> 元素定义了 Tomcat 接收客户端请求的连接器。最常用的 Connector 是 HTTP Connector 和 AJP Connector。

HTTP Connector (处理 HTTP 请求)

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
  • port: 监听的 HTTP 端口。默认值是 8080

  • protocol: 使用的协议。对于 HTTP Connector,通常设置为 HTTP/1.1org.apache.coyote.http11.Http11NioProtocol (NIO 模式)。

  • connectionTimeout: 连接超时时间,单位是毫秒。默认值是 20000 毫秒 (20 秒)。

  • redirectPort: 如果需要使用 SSL/TLS,指定重定向到安全端口的端口号。通常设置为 HTTPS Connector 的端口 (例如 8443)。

HTTPS Connector (处理 HTTPS 请求)

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="${user.home}/.keystore" keystorePass="changeit" />
  • port: 监听的 HTTPS 端口。通常设置为 8443

  • protocol: 通常使用 NIO 或 APR 协议,例如 org.apache.coyote.http11.Http11NioProtocol

  • SSLEnabled: 启用 SSL/TLS 加密。设置为 true 启用 HTTPS。

  • scheme: 协议方案,设置为 https

  • secure: 指示 Connector 是安全的。设置为 true

  • clientAuth: 是否需要客户端身份验证。false 表示不需要,true 表示需要。

  • sslProtocol: 使用的 SSL/TLS 协议版本,例如 TLSSSLv3 等。建议使用 TLS

  • keystoreFile: 密钥库文件路径,存储服务器的证书和私钥。

  • keystorePass: 密钥库密码。

AJP Connector (与 Apache 集成)

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
  • port: 监听的 AJP 端口。默认值是 8009

  • protocol: 设置为 AJP/1.3org.apache.coyote.ajp.AjpNioProtocol (NIO 模式)。

  • redirectPort: 如果需要使用 SSL/TLS,指定重定向到安全端口的端口号。

4. <Engine> 元素

<Engine> 元素是 Servlet 引擎,负责处理请求并将请求路由到相应的虚拟主机。

<Engine name="Catalina" defaultHost="localhost"> </Engine>
  • name: Engine 的名称。默认值是 "Catalina"。

  • defaultHost: 默认虚拟主机的名称。当请求的 Host 头信息与任何配置的 <Host> 都不匹配时,请求将被路由到默认虚拟主机。默认值是 "localhost"。

  • jvmRoute: 在集群环境中,用于 Session Sticky 会话保持的 JVM 路由名称。

5. <Host> 元素

<Host> 元素代表一个虚拟主机,用于托管一个或多个 Web 应用程序。

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> </Host>
  • name: 虚拟主机的域名。例如 "localhost" 或 "www.example.com"。

  • appBase: Web 应用程序的部署目录。默认值是 "webapps",相对于 $CATALINA_BASE 目录。

  • unpackWARs: 是否自动解压 WAR 文件。设置为 true 表示自动解压,false 表示不解压。建议设置为 true

  • autoDeploy: 是否自动部署 Web 应用程序。设置为 true 表示自动检测 appBase 目录下的 Web 应用程序并自动部署,false 表示不自动部署。建议在开发环境设置为 true,生产环境根据需要设置。

  • deployOnStartup: Tomcat 启动时是否部署 Web 应用程序。默认值为 true

  • xmlValidationxmlNamespaceAware: 用于控制 Context XML 文件的验证。通常保持默认值即可。

6. <Context> 元素 (在 server.xml 中嵌套)

虽然更推荐在单独的 context.xml 文件中配置 Context,但也可以在 <Host> 元素中直接嵌套 <Context> 元素来配置 Web 应用程序。

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Context path="/myapp" docBase="myapp" reloadable="true"> </Context> </Host>
  • path: Web 应用程序的上下文路径。例如 "/myapp"。

  • docBase: Web 应用程序的文档根目录,可以是相对于 appBase 的路径,也可以是绝对路径。例如 "myapp"。

  • reloadable: 是否启用热部署。设置为 true 表示当 Web 应用程序的类或配置文件发生更改时,Tomcat 会自动重新加载应用程序。建议在开发环境设置为 true,生产环境设置为 false 以提高性能。

7. <Realm> 元素

<Realm> 元素用于配置用户身份验证和授权。常用的 Realm 实现包括 UserDatabaseRealmJDBCRealm

UserDatabaseRealm (基于 tomcat-users.xml)

<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
  • className: Realm 实现的类名。对于 UserDatabaseRealm,设置为 org.apache.catalina.realm.UserDatabaseRealm

  • resourceName: JNDI 资源名称,用于查找用户数据库资源。对于 UserDatabaseRealm,通常设置为 "UserDatabase",与 context.xml 中配置的 <Resource> 对应。

JDBCRealm (基于数据库)

<Realm className="org.apache.catalina.realm.JDBCRealm" driverName="com.mysql.cj.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/mydb?serverTimezone=UTC" connectionName="username" connectionPassword="password" userTable="users" userNameCol="user_name" userCredCol="user_password" userRolesTable="user_roles" roleNameCol="role_name" roleUserCol="user_name"/>
  • className: Realm 实现的类名。对于 JDBCRealm,设置为 org.apache.catalina.realm.JDBCRealm

  • driverName: 数据库驱动类名。

  • connectionURL: 数据库连接 URL。

  • connectionName: 数据库用户名。

  • connectionPassword: 数据库密码。

  • userTable: 用户表名。

  • userNameCol: 用户名列名。

  • userCredCol: 用户密码列名。

  • userRolesTable: 用户角色关联表名。

  • roleNameCol: 角色名列名。

  • roleUserCol: 用户角色关联表中的用户外键列名。

8. <Valve> 元素

<Valve> 元素代表请求处理阀门,用于在请求处理管道中执行特定的操作。

AccessLogValve (访问日志)

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" resolveHosts="false"/>
  • className: Valve 实现的类名。对于访问日志 Valve,设置为 org.apache.catalina.valves.AccessLogValve

  • directory: 日志文件存放目录,相对于 $CATALINA_BASE 目录。默认值是 "logs"。

  • prefix: 日志文件名前缀。

  • suffix: 日志文件名后缀。

  • pattern: 日志格式模式。

  • resolveHosts: 是否解析主机名。false 表示不解析,使用 IP 地址,可以提高性能。

9. <Listener> 元素

<Listener> 元素定义在 Tomcat 生命周期事件发生时执行的操作。

AprLifecycleListener (APR 支持)

<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  • className: Listener 实现的类名。对于 APR 生命周期 Listener,设置为 org.apache.catalina.core.AprLifecycleListener

  • SSLEngine: 是否启用 APR SSL 引擎。设置为 "on" 启用。

总结 server.xml

server.xml 是 Tomcat 最核心的配置文件,理解其结构和各个元素的作用至关重要。通过合理配置 server.xml,可以定制 Tomcat 服务器的各种行为,满足不同的应用场景需求。

3.3.3 web.xml - 默认 Web 应用程序部署描述符

web.xml 文件是 Web 应用程序的部署描述符,用于配置 Servlet、Filter、Listener、欢迎页面、错误页面、安全约束等。Tomcat 提供了全局默认的 web.xml 文件,位于 $CATALINA_BASE/conf/web.xml。这个文件定义的配置会应用于所有部署在 Tomcat 上的 Web 应用程序,除非 Web 应用程序自身在 WEB-INF/web.xml 中覆盖了这些配置。

web.xml 的主要元素

  • <servlet>: 定义 Servlet。

  • <servlet-mapping>: 将 Servlet 映射到 URL 模式。

  • <filter>: 定义 Filter。

  • <filter-mapping>: 将 Filter 映射到 URL 模式或 Servlet。

  • <listener>: 定义 Listener。

  • <welcome-file-list>: 定义欢迎页面列表。

  • <error-page>: 定义错误页面。

  • <session-config>: 配置会话管理。

  • <security-constraint>: 定义安全约束。

  • <mime-mapping>: 定义 MIME 类型映射。

  • <jsp-config>: 配置 JSP 相关的设置。

代码实践与详解

以下是一个简单的默认 web.xml 文件示例,展示了一些常用的配置:

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <display-name>Default Web Application Deployment Descriptor</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <error-page> <error-code>404</error-code> <location>/error/404.jsp</location> </error-page> <session-config> <session-timeout>30</session-timeout> <!-- 单位:分钟 --> </session-config> <mime-mapping> <extension>html</extension> <mime-type>text/html</mime-type> </mime-mapping> </web-app>
  • <display-name>: Web 应用程序的显示名称。

  • <welcome-file-list>: 定义欢迎文件列表。当用户访问 Web 应用程序的根目录时,Tomcat 会按照列表顺序查找欢迎文件,找到第一个存在的文件就返回给用户。

  • <error-page>: 定义错误页面。当发生指定的 HTTP 错误代码时,Tomcat 会将请求转发到指定的错误页面。

  • <session-config>: 配置会话管理。<session-timeout> 子元素定义会话超时时间,单位是分钟。

  • <mime-mapping>: 定义 MIME 类型映射。将文件扩展名映射到 MIME 类型,以便浏览器正确处理不同类型的文件。

web.xml 的作用

默认 web.xml 文件提供了一组全局的默认配置,可以简化 Web 应用程序的部署和配置。例如,通过在默认 web.xml 中配置常用的 Servlet 和 Filter,可以避免在每个 Web 应用程序的 web.xml 中重复配置。

3.3.4 context.xml - Context 上下文配置文件

context.xml 文件用于配置 Tomcat 的 Context(上下文),代表一个独立的 Web 应用程序。Context 配置可以放在多个位置,优先级从低到高依次为:

  1. $CATALINA_BASE/conf/context.xml: 全局默认 Context 配置,应用于所有 Web 应用程序。

  2. $CATALINA_BASE/conf/[enginename]/[hostname]/context.xml.default: Host 默认 Context 配置,应用于指定 Host 下的所有 Web 应用程序。

  3. $CATALINA_BASE/conf/[enginename]/[hostname]/[webappname].xml: 特定 Web 应用程序的 Context 配置,应用于指定的 Web 应用程序。文件名必须与 Web 应用程序的上下文路径或 WAR 文件名相同。

  4. [webapp]/META-INF/context.xml: Web 应用程序自身的 Context 配置,推荐的配置方式。

context.xml 的主要元素

  • <Resource>: 定义 JNDI 资源,例如数据源 (DataSource)、邮件会话 (MailSession) 等。

  • <Realm>: 配置 Context 级别的安全 Realm,会覆盖 server.xml 中 Engine 级别的 Realm。

  • <Manager>: 配置会话管理器,例如持久化会话管理器。

  • <Loader>: 配置类加载器。

  • <Parameter>: 定义 Context 初始化参数。

  • <Environment>: 定义 Context 环境变量。

  • <Valve>: 配置 Context 级别的 Valve,仅应用于当前 Context。

  • <Listener>: 配置 Context 级别的 Listener,仅应用于当前 Context。

代码实践与详解

以下是一个 META-INF/context.xml 文件示例,展示了如何配置数据源:

<?xml version="1.0" encoding="UTF-8"?> <Context reloadable="true"> <Resource name="jdbc/mydb" auth="Container" type="javax.sql.DataSource" driverClassName="com.mysql.cj.jdbc.Driver" url="jdbc:mysql://localhost:3306/mydb?serverTimezone=UTC" username="dbuser" password="dbpassword" maxActive="20" maxIdle="10" maxWait="-1"/> </Context>
  • <Context reloadable="true">: 根元素 <Context>reloadable="true" 表示启用热部署。

  • <Resource>: 定义 JNDI 资源。

    • name: JNDI 资源名称,例如 "jdbc/mydb"。

    • auth: 身份验证类型,通常设置为 "Container"。

    • type: 资源类型,例如 "javax.sql.DataSource" 表示数据源。

    • driverClassName: 数据库驱动类名。

    • url: 数据库连接 URL。

    • **`


发布者: 作者: 转发
评论区 (0)
U