引擎容器
目錄
簡介
引擎元素代表與特定 Catalina 服務相關的整個要求處理機制。它接收並處理來自一個或多個連接器的所有要求,並將完成的回應傳回連接器,以最終傳輸回用戶端。
必須在 服務 元素內嵌套一個引擎元素,並在這個服務關聯的所有對應連接器元素之後。
屬性
常見屬性
引擎的所有實作都支援下列屬性
屬性 | 描述 |
---|---|
backgroundProcessorDelay |
此值代表這個引擎及其子容器(包括所有主機和內容)上 backgroundProcess 方法的呼叫之間的延遲(以秒為單位)。如果子容器的延遲值不是負值(這表示它們使用自己的處理執行緒),則不會呼叫子容器。將此值設定為正值會產生執行緒。在等待指定的時間後,執行緒將呼叫這個引擎及其所有子容器上的 backgroundProcess 方法。如果未指定,此屬性的預設值為 10,代表 10 秒的延遲。 |
className |
要使用的實作的 Java 類別名稱。此類別必須實作 |
預設主機 |
預設主機名稱,用於識別將處理導向此伺服器上主機名稱的請求,但未在此組態檔中設定的 主機。此名稱必須與內部巢狀 主機 元素之一的 |
jvmRoute |
識別碼,必須在負載平衡情境中使用,以啟用會話關聯性。此識別碼必須在參與叢集的所有 Tomcat 伺服器中是唯一的,將附加到產生的會話識別碼,因此允許前端代理始終將特定會話轉發到相同的 Tomcat 執行個體。 |
名稱 | |
startStopThreads |
此 引擎 將用於平行啟動子 主機 元素的執行緒數量。特殊值 0 將導致使用 |
標準實作
引擎 的標準實作是 org.apache.catalina.core.StandardEngine。它支援以下其他屬性(除了上面列出的共用屬性之外)
屬性 | 描述 |
---|
巢狀元件
您可以在此 引擎 元素內巢狀一個或多個 主機 元素,每個元素代表與此伺服器關聯的不同虛擬主機。至少需要一個 主機,且巢狀 主機 之一的名稱必須與上面列出的 defaultHost
屬性指定的相同。
您最多可以在 引擎 元素內巢狀一個對應元素,以巢狀下列公用程式元件
特殊功能
記錄
引擎與 org.apache.catalina.core.ContainerBase.[enginename]
記錄類別關聯。請注意,括號實際上是名稱的一部分,不要省略它們。
存取記錄
當您執行網路伺服器時,通常會產生的一個輸出檔案是存取記錄檔,它會針對伺服器處理的每個要求產生一行資訊,採用標準格式。Catalina 包含一個可選擇的Valve 實作,它可以在網路伺服器建立的相同標準格式中建立存取記錄檔,或採用任何數量的自訂格式。
您可以要求 Catalina 為Engine、Host或Context 處理的所有要求建立存取記錄檔,方式是巢狀一個Valve 元素,如下所示
<Engine name="Standalone" ...>
...
<Valve className="org.apache.catalina.valves.AccessLogValve"
prefix="catalina_access_log" suffix=".txt"
pattern="common"/>
...
</Engine>
請參閱存取記錄閥,以取得關於所支援組態屬性的更多資訊。
生命週期監聽器
如果您已實作一個 Java 物件,需要知道這個Engine 何時啟動或停止,您可以透過在此元素內巢狀一個Listener 元素來宣告它。您指定的類別名稱必須實作org.apache.catalina.LifecycleListener
介面,它會收到關於對應生命週期事件發生的通知。此類監聽器的組態如下所示
<Engine name="Standalone" ...>
...
<Listener className="com.mycompany.mypackage.MyListener" ... >
...
</Engine>
請注意,監聽器可以有任意數量的其他屬性,這些屬性可以從此元素中組態。屬性名稱會使用標準屬性方法命名模式與對應的 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>