- 简介
- 属性
- 嵌套组件
- 标准实现
- APR 生命周期监听器 - org.apache.catalina.core.AprLifecycleListener
- Context 命名信息监听器 - org.apache.catalina.core.ContextNamingInfoListener
- 全局资源生命周期监听器 - org.apache.catalina.mbeans.GlobalResourcesLifecycleListener
- JNI 库加载监听器 - org.apache.catalina.core.JniLifecycleListener
- JRE 内存泄漏预防监听器 - org.apache.catalina.core.JreMemoryLeakPreventionListener
- OpenSSL 生命周期监听器 - org.apache.catalina.core.OpenSSLLifecycleListener
- 属性角色映射监听器 - org.apache.catalina.core.PropertiesRoleMappingListener
- 安全生命周期监听器 - org.apache.catalina.security.SecurityListener
- StoreConfig 生命周期监听器 - org.apache.catalina.storeconfig.StoreConfigLifecycleListener
- ThreadLocal 泄漏预防监听器 - org.apache.catalina.core.ThreadLocalLeakPreventionListener
- TLS 配置重新加载监听器 - org.apache.catalina.security.TLSCertificateReloadListener
- UserConfig - org.apache.catalina.startup.UserConfig
- 版本日志生命周期监听器 - org.apache.catalina.startup.VersionLoggerListener
- HTTPD mod_heartmonitor 监听器 - org.apache.catalina.ha.backend.HeartbeatListener
生命周期监听器组件
目录
简介
一个 Listener 元素定义了一个组件,当特定事件发生时执行操作,通常是 Tomcat 启动或 Tomcat 停止时。
监听器可以嵌套在 Server、Engine、Host 或 Context 中。某些监听器只意图嵌套在特定的元素中。这些约束将在下面的文档中注明。
属性
通用属性
所有 Listener 的实现都支持以下属性:
属性 | 描述 |
---|---|
className |
要使用的实现类的 Java 类名。此G类必须实现 |
嵌套组件
Listener 内部不能嵌套任何元素。
标准实现
与大多数 Catalina 组件不同,有几个标准 Listener 实现可用。因此,必须使用 className
属性来选择您希望使用的实现。
APR 生命周期监听器 - org.apache.catalina.core.AprLifecycleListener
APR 生命周期监听器检查 Apache Tomcat Native 库是否存在,如果存在则加载该库。更多信息请参阅 APR/native 指南。
此监听器只能嵌套在 Server 元素中。
APR 生命周期监听器支持以下额外属性:
属性 | 描述 |
---|---|
SSLEngine |
要使用的 SSLEngine 名称。 默认值为 on。这会初始化原生 SSL 引擎,该引擎必须通过使用 有关支持的 SSL 硬件引擎和制造商的更多详细信息,请参阅OpenSSL 官方网站。 Tomcat Native 2.x 及更高版本需要 SSL,因此如果在使用 Tomcat Native 2.x 及更高版本时将 SSLEngine 设置为 |
SSLRandomSeed |
用于为 SSLEngine 的 PRNG 播种的熵源。默认值为 |
FIPSMode |
此属性的行为取决于 Tomcat Native 是针对 OpenSSL 1.x 还是 OpenSSL 3.x 编译的。 对于 OpenSSL 1.x:设置为 对于 OpenSSL 3.x: FIPS 模式要求您拥有支持 FIPS 的 OpenSSL 库。如果此属性设置为 默认值为 |
useOpenSSL |
此属性控制 OpenSSL JSSE 实现的自动选择。默认值为 |
Context 命名信息监听器 - org.apache.catalina.core.ContextNamingInfoListener
Context 命名信息监听器从 Context 添加以下环境条目(隐含 java:comp/env
):context/path
、context/encodedPath
、context/webappVersion
、context/name
、context/baseName
、context/displayName
。
此监听器只能嵌套在 Context 元素中。
Context 命名信息监听器支持以下额外属性:
属性 | 描述 |
---|---|
emptyOnRoot |
对于根上下文, 默认值为 |
全局资源生命周期监听器 - org.apache.catalina.mbeans.GlobalResourcesLifecycleListener
JNI 库加载监听器 - org.apache.catalina.core.JniLifecycleListener
JNI 库加载监听器使得多个 Web 应用程序能够使用原生库,通过使用共享类加载器(通常是通用类加载器,但在某些配置中可能有所不同)加载原生库。
该监听器支持两个互斥属性,因此必须使用其中一个,但不能同时使用两个。
属性 | 描述 |
---|---|
libraryName |
原生库的名称,如 |
libraryPath |
原生库的绝对路径,如 |
JRE 内存泄漏预防监听器 - org.apache.catalina.core.JreMemoryLeakPreventionListener
JRE 内存泄漏预防监听器提供了已知的 Java 运行时环境使用上下文类加载器加载单例导致内存泄漏的工作方案,因为如果 Web 应用程序类加载器在当时恰好是上下文类加载器,这将导致内存泄漏。工作方案是在此监听器启动时初始化这些单例,因为那时 Tomcat 的通用类加载器是上下文类加载器。它还提供了已知可能导致 JAR 文件锁定的问题的工作方案。
此监听器只能嵌套在 Server 元素中。
JRE 内存泄漏预防监听器支持以下额外属性:
属性 | 描述 |
---|---|
appContextProtection |
启用保护,以便 Web 应用程序触发的 |
classesToInitialize |
在此监听器启动期间要加载和初始化的、逗号分隔的完全限定类名列表。这允许预加载已知会在请求处理期间加载时导致类加载器泄漏的类。可以引用非 JRE 类,例如 |
driverManagerProtection |
首次使用 |
initSeedGenerator |
首次使用 |
urlCacheProtection |
启用保护,以便使用 |
JreMemoryLeakPreventionListener 示例
以下是如何配置此监听器的 classesToInitialize
属性的示例。
如果此监听器在 server.xml 中配置为
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"
classesToInitialize="oracle.jdbc.driver.OracleTimeoutThreadPerVM" />
则 OracleTimeoutThreadPerVM
类将在监听器启动期间加载和初始化,而不是在请求处理期间。
OpenSSL 生命周期监听器 - org.apache.catalina.core.OpenSSLLifecycleListener
OpenSSL 生命周期监听器检查 OpenSSL 库是否存在,如果存在则加载该库。这使用 Java 22 的 FFM API 而不是额外的原生代码。当启用并成功加载时,NIO 和 NIO2 连接器将利用 OpenSSL 提供 TLS 功能。这是上述 APR 生命周期监听器的功能替代品。
此监听器只能嵌套在 Server 元素中。
OpenSSL 生命周期监听器支持以下额外属性:
属性 | 描述 |
---|---|
SSLEngine |
对于 OpenSSL 1.x,要使用的 SSLEngine 名称。 有关支持的 SSL 硬件引擎和制造商的更多详细信息,请参阅OpenSSL 官方网站。 |
SSLRandomSeed |
用于为 SSLEngine 的 PRNG 播种的熵源。默认值为 |
FIPSMode |
此属性的行为取决于 Tomcat Native 是针对 OpenSSL 1.x 还是 OpenSSL 3.x 编译的。 对于 OpenSSL 1.x:设置为 对于 OpenSSL 3.x: FIPS 模式要求您拥有支持 FIPS 的 OpenSSL 库。如果此属性设置为 默认值为 |
useOpenSSL |
此属性控制 OpenSSL JSSE 实现的自动选择。默认值为 |
属性角色映射监听器 - org.apache.catalina.core.PropertiesRoleMappingListener
属性角色映射监听器从属性文件填充上下文的角色映射。键代表应用程序角色(例如,admin、user、uservisor 等),而值代表技术角色(例如,DNs、SIDs、UUIDs 等)。如果属性文件还包含通用应用程序配置,例如 app-roles.
,则键也可以带有前缀。
此监听器只能嵌套在 Context 元素中。
属性角色映射监听器支持以下额外属性:
属性 | 描述 |
---|---|
roleMappingFile |
角色映射属性文件的路径。您可以使用协议 默认值为 |
keyPrefix |
要从属性键中过滤的前缀。所有不带此前缀的其他键都将被忽略。 |
安全生命周期监听器 - org.apache.catalina.security.SecurityListener
安全生命周期监听器在 Tomcat 启动时执行一系列安全检查,如果检查失败则阻止 Tomcat 启动。此监听器默认未启用。要启用它,请取消注释 $CATALINA_BASE/conf/server.xml 中的监听器。
此监听器只能嵌套在 Server 元素中。
安全生命周期监听器支持以下额外属性:
属性 | 描述 |
---|---|
checkedOsUsers |
逗号分隔的 OS 用户列表,这些用户不能用于启动 Tomcat。如果未指定,则使用默认值 root。要禁用此检查,请将属性设置为空字符串。用户名检查不区分大小写。 |
minimumUmask |
Tomcat 启动前必须配置的最不严格的 umask。如果未指定,则使用默认值 0007。要禁用此检查,请将属性设置为空字符串。此检查不在 Windows 平台上执行。 |
buildDateWarningAgeDays |
此 Tomcat 实例的构建日期与其启动日期之间的最大天数,超过该天数将记录警告。设置为小于 0 的任何值(例如 -1)以禁用此检查。如果未指定,则使用默认值 -1。 |
StoreConfig 生命周期监听器 - org.apache.catalina.storeconfig.StoreConfigLifecycleListener
StoreConfig 生命周期监听器配置一个 StoreConfig MBean,该 MBean 可用于将当前服务器配置保存到 server.xml 中,或将 Web 应用程序的当前配置保存到 context.xml 文件中。
此监听器只能嵌套在 Server 元素中。
StoreConfig 生命周期监听器支持以下额外属性:
属性 | 描述 |
---|---|
storeConfigClass |
要使用的 |
storeRegistry |
配置 |
ThreadLocal 泄漏预防监听器 - org.apache.catalina.core.ThreadLocalLeakPreventionListener
TLS 配置重新加载监听器 - org.apache.catalina.security.TLSCertificateReloadListener
此监听器可用于监控 TLS 证书的过期日期,并在 TLS 证书过期前设定的天数触发 TLS 配置的自动重新加载。
此监听器假定有其他进程(certbot、云基础设施等)定期更新证书并用新证书替换当前证书。
此监听器不会重新读取 server.xml 中的 Tomcat 配置。如果您对 server.xml 进行了更改,则必须重新启动 Tomcat 进程才能使这些更改生效。
此监听器只能嵌套在 Server 元素中。
属性 | 描述 |
---|---|
checkPeriod |
重新加载检查之间的时间,以秒为单位。 |
daysBefore |
在 TLS 证书过期前,预计新证书将到位并可以触发重新加载的天数。如果未指定,则使用默认值 14 天。 |
UserConfig - org.apache.catalina.startup.UserConfig
UserConfig 提供了用户 Web 应用程序功能。用户 Web 应用程序将以波浪号字符("~")和用户名开头的请求 URI 映射到服务器上该用户主目录中的目录(通常命名为 public_html)。
有关更多信息,请参阅 Host 元素上的用户 Web 应用程序特殊功能。
UserConfig 支持以下额外属性:
属性 | 描述 |
---|---|
directoryName |
要在每个用户主目录中搜索的目录名称。默认值为 |
userClass |
用户数据库类的类名。目前有两个用户数据库, |
homeBase |
包含用户主目录的基本目录。这仅在使用 |
allow |
定义允许部署的用户的正则表达式。如果指定此属性,则要部署的用户必须匹配此模式。如果未指定此属性,则将部署所有用户,除非用户匹配拒绝模式。 |
deny |
定义拒绝部署的用户的正则表达式。如果指定此属性,则要部署的用户不得匹配此模式。如果未指定此属性,则用户的部署将由 allow 属性控制。 |
版本日志生命周期监听器 - org.apache.catalina.startup.VersionLoggerListener
版本日志生命周期监听器在 Tomcat 启动时记录 Tomcat、Java 和操作系统信息。
此监听器只能嵌套在 Server 元素中,并且应该是定义的第一个监听器。
版本日志生命周期监听器支持以下额外属性:
属性 | 描述 |
---|---|
logArgs |
如果为 |
logEnv |
如果为 |
logProps |
如果为 |
HTTPD mod_heartmonitor 监听器 - org.apache.catalina.ha.backend.HeartbeatListener
HTTPD mod_heartmonitor 监听器允许 tomcat 向 Apache HTTPD mod_heartmonitor 模块发送心跳消息。
HTTPD mod_heartmonitor 监听器支持以下额外属性:
属性 | 描述 |
---|---|
Port |
接收来自 HTTPD 代理流量的连接器端口,默认为第一个连接器。 |
Host |
Host 是与接收代理流量的连接器的 address 对应的 IP,默认为空,将使用 Port。 |
proxyURL |
proxyURL 是与 httpd 配置中心跳处理程序的 Location 对应的 URL,默认为 /HeartbeatListener。 |
ProxyList |
ProxyList 是 Tomcat 将从中接收请求的代理列表,格式为 "address:port,address:port"。一旦填充此列表,多播逻辑将被禁用,并忽略多参数。 |
Group |
Group 是向 HTTPD 广播消息的多播 IP,默认为 224.0.1.105。 |
Multiport |
Multiport 是向 HTTPD 广播消息的多播端口,默认为 23364。 |
Ttl |
Ttl 是广播消息的 TTL,默认为 16。 |