引擎容器

目錄

簡介

引擎元素代表與特定 Catalina 服務相關的整個要求處理機制。它接收並處理來自一個或多個連接器所有要求,並將完成的回應傳回連接器,以最終傳輸回用戶端。

必須在 服務 元素內嵌套一個引擎元素,並在這個服務關聯的所有對應連接器元素之後。

屬性

常見屬性

引擎的所有實作都支援下列屬性

屬性 描述
backgroundProcessorDelay

此值代表這個引擎及其子容器(包括所有主機和內容)上 backgroundProcess 方法的呼叫之間的延遲(以秒為單位)。如果子容器的延遲值不是負值(這表示它們使用自己的處理執行緒),則不會呼叫子容器。將此值設定為正值會產生執行緒。在等待指定的時間後,執行緒將呼叫這個引擎及其所有子容器上的 backgroundProcess 方法。如果未指定,此屬性的預設值為 10,代表 10 秒的延遲。

className

要使用的實作的 Java 類別名稱。此類別必須實作 org.apache.catalina.Engine 介面。如果未指定,將使用標準值(定義如下)。

預設主機

預設主機名稱,用於識別將處理導向此伺服器上主機名稱的請求,但未在此組態檔中設定的 主機。此名稱必須與內部巢狀 主機 元素之一的 name 屬性相符。

jvmRoute

識別碼,必須在負載平衡情境中使用,以啟用會話關聯性。此識別碼必須在參與叢集的所有 Tomcat 伺服器中是唯一的,將附加到產生的會話識別碼,因此允許前端代理始終將特定會話轉發到相同的 Tomcat 執行個體。

名稱

此引擎的邏輯名稱,用於記錄和錯誤訊息。在同一個 伺服器 中使用多個 服務 元素時,每個引擎都必須指定一個唯一名稱。

startStopThreads

引擎 將用於平行啟動子 主機 元素的執行緒數量。特殊值 0 將導致使用 Runtime.getRuntime().availableProcessors() 的值。負值將導致使用 Runtime.getRuntime().availableProcessors() + 值,除非小於 1,否則將使用 1 個執行緒。如果未指定,將使用預設值 1。如果使用 1 個執行緒,則會使用目前執行緒,而不是使用 ExecutorService

標準實作

引擎 的標準實作是 org.apache.catalina.core.StandardEngine。它支援以下其他屬性(除了上面列出的共用屬性之外)

屬性 描述

巢狀元件

您可以在此 引擎 元素內巢狀一個或多個 主機 元素,每個元素代表與此伺服器關聯的不同虛擬主機。至少需要一個 主機,且巢狀 主機 之一的名稱必須與上面列出的 defaultHost 屬性指定的相同。

您最多可以在 引擎 元素內巢狀一個對應元素,以巢狀下列公用程式元件

  • 領域 - 設定一個領域,允許其使用者資料庫及其關聯的角色在巢狀在此引擎中的所有 主機內容 中共用,除非被較低層級的 領域 設定覆寫。

特殊功能

記錄

引擎與 org.apache.catalina.core.ContainerBase.[enginename] 記錄類別關聯。請注意,括號實際上是名稱的一部分,不要省略它們。

存取記錄

當您執行網路伺服器時,通常會產生的一個輸出檔案是存取記錄檔,它會針對伺服器處理的每個要求產生一行資訊,採用標準格式。Catalina 包含一個可選擇的Valve 實作,它可以在網路伺服器建立的相同標準格式中建立存取記錄檔,或採用任何數量的自訂格式。

您可以要求 Catalina 為EngineHostContext 處理的所有要求建立存取記錄檔,方式是巢狀一個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 檢查傳送至周圍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>

請參閱遠端位址篩選器遠端主機篩選器,以取得關於所支援組態選項的更多資訊。