Engine 容器
目录
简介
Engine 元素表示与特定 Catalina Service 相关联的整个请求处理机制。它接收并处理来自一个或多个 Connectors 的所有请求,并将完成的响应返回给 Connector,以便最终传输回客户端。
在 Service 元素内部,且在所有与此 Service 关联的相应 Connector 元素之后,必须且只能嵌套一个 Engine 元素。
属性
通用属性
所有 Engine 的实现都支持以下属性:
属性 | 描述 |
---|---|
backgroundProcessorDelay |
此值表示此 Engine 及其子容器(包括所有 Host 和 Context)调用 backgroundProcess 方法之间的延迟(以秒为单位)。如果子容器的延迟值不为负(这意味着它们正在使用自己的处理线程),则不会调用它们。将其设置为正值将导致生成一个线程。在等待指定的时间后,该线程将在此 Engine 及其所有子容器上调用 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 元素内部嵌套相应的元素,您可以最多嵌套以下实用组件的一个实例:
特殊功能
日志
一个 Engine 与 org.apache.catalina.core.ContainerBase.[enginename]
日志类别关联。请注意,方括号实际上是名称的一部分,不要省略它们。
访问日志
当您运行 Web 服务器时,通常会生成一个访问日志输出文件,它以标准格式为服务器处理的每个请求生成一行信息。Catalina 包含一个可选的 Valve 实现,可以创建与 Web 服务器创建的相同标准格式或任何自定义格式的访问日志。
您可以通过嵌套一个 Valve 元素,要求 Catalina 为由 Engine、Host 或 Context 处理的所有请求创建访问日志,如下所示:
<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 检查指向周围的 Engine、Host 或 Context 元素的每个传入请求的 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>