引擎容器

目录

简介

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

必须在 Service 元素内嵌套恰好一个 Engine 元素,紧跟与此服务关联的所有相应 Connector 元素之后。

属性

通用属性

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

属性 说明
backgroundProcessorDelay

此值表示在此引擎及其子容器(包括所有主机和上下文)上调用 backgroundProcess 方法之间的延迟(以秒为单位)。如果子容器的延迟值不为负(这意味着它们正在使用自己的处理线程),则不会调用它们。将此值设置为正值将导致生成一个线程。在等待指定的时间后,线程将在此引擎及其所有子容器上调用 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 - 配置一个领域,允许其用户数据库及其关联的角色在嵌套在此 Engine 中的所有 HostContext 中共享,除非被较低级别的 Realm 配置覆盖。

特殊功能

日志记录

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

访问日志

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

您可以要求 Catalina 为由 引擎主机上下文 处理的所有请求创建访问日志,方法是像这样嵌套 元素

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

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

生命周期侦听器

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

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

请注意,侦听器可以具有任意数量的其他属性,这些属性可以从此元素进行配置。属性名称与相应的 JavaBean 属性名称匹配,使用标准属性方法命名模式。

请求过滤器

您可以要求 Catalina 检查针对周围 引擎主机上下文 元素的每个传入请求的 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>

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