Engine 容器

目录

简介

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

Service 元素内部,且在所有与此 Service 关联的相应 Connector 元素之后,必须且只能嵌套一个 Engine 元素。

属性

通用属性

所有 Engine 的实现都支持以下属性:

属性描述
backgroundProcessorDelay

此值表示此 Engine 及其子容器(包括所有 Host 和 Context)调用 backgroundProcess 方法之间的延迟(以秒为单位)。如果子容器的延迟值不为负(这意味着它们正在使用自己的处理线程),则不会调用它们。将其设置为正值将导致生成一个线程。在等待指定的时间后,该线程将在此 Engine 及其所有子容器上调用 backgroundProcess 方法。如果未指定,此属性的默认值为 10,表示 10 秒的延迟。

className

要使用的实现的 Java 类名。此类必须实现 org.apache.catalina.Engine 接口。如果未指定,将使用标准值(定义如下)。

defaultHost

默认主机名,用于标识将处理指向此服务器但未在此配置文件中配置的主机名的请求的 Host。此名称必须与直接嵌套在此元素内部的某个 Host 元素的 name 属性匹配。

jvmRoute

在负载均衡场景中用于启用会话亲和性的标识符。此标识符在参与集群的所有 Tomcat 服务器中必须是唯一的,它将附加到生成的会话标识符中,从而允许前端代理始终将特定会话转发到相同的 Tomcat 实例。

name

此 Engine 的逻辑名称,用于日志和错误消息中。当在同一个 Server 中使用多个 Service 元素时,每个 Engine 都必须分配一个唯一的名称。

startStopThreads

Engine 用于并行启动子 Host 元素的线程数。特殊值 0 将导致使用 Runtime.getRuntime().availableProcessors() 的值。负值将导致使用 Runtime.getRuntime().availableProcessors() + value,除非此值小于 1,在这种情况下将使用 1 个线程。如果未指定,将使用默认值 1。如果使用 1 个线程,则不使用 ExecutorService,而是使用当前线程。

标准实现

Engine 的标准实现是 org.apache.catalina.core.StandardEngine。它支持以下附加属性(除了上面列出的通用属性):

属性描述

嵌套组件

您可以在此 Engine 元素内部嵌套一个或多个 Host 元素,每个元素代表一个与此服务器关联的不同虚拟主机。至少需要一个 Host,并且其中一个嵌套的 Host 必须有一个与上面列出的 defaultHost 属性名称匹配的名称。

通过在 Engine 元素内部嵌套相应的元素,您可以最多嵌套以下实用组件的一个实例:

  • Realm - 配置一个 Realm,允许其用户数据库及其关联的角色在此 Engine 内部嵌套的所有 HostContext 之间共享,除非被较低级别的 Realm 配置覆盖。

特殊功能

日志

一个 Engine 与 org.apache.catalina.core.ContainerBase.[enginename] 日志类别关联。请注意,方括号实际上是名称的一部分,不要省略它们。

访问日志

当您运行 Web 服务器时,通常会生成一个访问日志输出文件,它以标准格式为服务器处理的每个请求生成一行信息。Catalina 包含一个可选的 Valve 实现,可以创建与 Web 服务器创建的相同标准格式或任何自定义格式的访问日志。

您可以通过嵌套一个 Valve 元素,要求 Catalina 为由 EngineHostContext 处理的所有请求创建访问日志,如下所示:

<Engine name="Standalone" ...>
  ...
  <Valve className="org.apache.catalina.valves.AccessLogValve"
         prefix="catalina_access_log" suffix=".txt"
         pattern="common"/>
  ...
</Engine>

有关支持的配置属性的更多信息,请参阅访问日志 Valve

生命周期监听器

如果您已经实现了一个 Java 对象,需要知道此 Engine 何时启动或停止,可以通过在此元素内部嵌套一个 Listener 元素来声明它。您指定的类名必须实现 org.apache.catalina.LifecycleListener 接口,并且它将收到相应生命周期事件的通知。此类监听器的配置示例如下:

<Engine name="Standalone" ...>
  ...
  <Listener className="com.mycompany.mypackage.MyListener" ... >
  ...
</Engine>

请注意,一个 Listener 可以有任意数量的额外属性,这些属性可以从此元素配置。属性名称使用标准属性方法命名模式与相应的 JavaBean 属性名称匹配。

请求过滤器

您可以要求 Catalina 检查指向周围的 EngineHostContext 元素的每个传入请求的 IP 地址或主机名。远程地址或名称将根据配置的“接受”和/或“拒绝”过滤器进行检查,这些过滤器使用 java.util.regex 正则表达式语法定义。来自不被接受位置的请求将被 HTTP“禁止”错误拒绝。过滤器声明示例如下:

<Engine name="Standalone" ...>
  ...
  <Valve className="org.apache.catalina.valves.RemoteHostValve"
         allow=".*\.mycompany\.com|www\.yourcompany\.com"/>
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         deny="192\.168\.1\.\d+"/>
  ...
</Engine>

有关支持的配置选项的更多信息,请参阅远程地址过滤器远程主机过滤器