引擎容器
目录
简介
Engine 元素表示与特定 Catalina Service 关联的整个请求处理机制。它接收并处理来自一个或多个 Connectors 的所有请求,并将完成的响应返回给 Connector,以便最终传输回客户端。
必须在 Service 元素内嵌套恰好一个 Engine 元素,紧跟与此服务关联的所有相应 Connector 元素之后。
属性
通用属性
Engine 的所有实现都支持以下属性
属性 | 说明 |
---|---|
backgroundProcessorDelay |
此值表示在此引擎及其子容器(包括所有主机和上下文)上调用 backgroundProcess 方法之间的延迟(以秒为单位)。如果子容器的延迟值不为负(这意味着它们正在使用自己的处理线程),则不会调用它们。将此值设置为正值将导致生成一个线程。在等待指定的时间后,线程将在此引擎及其所有子容器上调用 backgroundProcess 方法。如果未指定,此属性的默认值为 10,表示延迟 10 秒。 |
className |
要使用的实现的 Java 类名。此类必须实现 |
defaultHost |
默认主机名,用于标识将处理针对此服务器上的主机名(但未在此配置文件中配置)的请求的 Host。此名称必须与立即嵌套在内部的一个 Host 元素的 |
jvmRoute |
在负载平衡场景中必须使用的标识符,以启用会话亲和性。此标识符在参与集群的所有 Tomcat 服务器中必须唯一,将附加到生成的会话标识符,因此允许前端代理始终将特定会话转发到同一 Tomcat 实例。 |
name |
此 Engine 的逻辑名称,用于日志和错误消息。在同一 Server 中使用多个 Service 元素时,每个 Engine 都必须分配一个唯一名称。 |
startStopThreads |
此 Engine 将使用的线程数,以并行启动子 Host 元素。0 的特殊值将导致使用 |
标准实现
Engine 的标准实现是 org.apache.catalina.core.StandardEngine。它支持以下附加属性(除了上面列出的常见属性之外)
属性 | 说明 |
---|
嵌套组件
您可以在此 Engine 元素中嵌套一个或多个 Host 元素,每个元素都代表与此服务器关联的不同虚拟主机。至少需要一个 Host,并且嵌套的 Host 之一必须具有与上面列出的 defaultHost
属性指定的名称匹配的名称。
您可以通过在 Engine 元素中嵌套相应的元素来嵌套以下实用组件的一个或多个实例
特殊功能
日志记录
引擎与 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>