1. 程式人生 > >Tomcat中Context容器配置詳解(一)

Tomcat中Context容器配置詳解(一)

Context元素代表一個web應用,執行在某個特定的虛擬主機上。如Servlet Specification 2.2或以後版本中描述的那樣,每個web應用基於一個Web Application Archive(WAR)檔案,或者是一個目錄,包含WAR檔案解壓後的內容。有關Web Application Archive的更多資訊,可以參考Servlet Specification和Tomcat 應用程式開發者指南。
通過將請求URI的最長可能字首與每個Context的context路徑進行匹配,Catalina選擇相應的web 應用處理HTTP請求。一旦選定,根據web application deployment descriptor 檔案中定義的servlet對映,Context會選擇一個正確的servlet來處理進來的請求。servlet對映必須定義在該web應用目錄層次結構中的/WEB-INF/web.xml中。

你可以在一個Host元素中巢狀任意多的Context元素。每個Context的路徑必須是惟一的,由path屬性定義。另外,你必須定義一個context路徑長度為0的Context,這個Context稱為該虛擬主機的預設web應用,用來處理那些不能匹配任何Context的Context路徑的請求。

除了在Host元素中巢狀Context元素以外,你也可以將它們儲存在單個檔案中(以.xml為字尾),放在$CATALINA_HOME/conf/[enginename]/[hostname]/目錄下面。有關這方面的更多資訊,參考應用的自動釋出。這種方法允許動態重新配置web應用,因為如果修改了conf/server.xml,就必須重新啟動Tomcat。

除了明確指定Context元素以外,還有其他幾種技術可以自動生成Context元素。參考Automatic Application Deployment 和 User Web Applications

以下的描述使用變數$CATALINA_HOME來指Tomcat 5安裝的目錄。大多數的相對路徑都是以該目錄為基準。但是,通過設定CATALINA_BASE目錄,可以執行多個Tomcat 5例項,這時你應該使用$CATALINA_BASE來作為目錄基準,而不是使用$CATALINA_HOME。

屬性
通用屬性
所有Context的實現支援如下屬性:
backgroundProcessorDelay 這個值代表在context及其子容器(包括所有的wrappers)上呼叫backgroundProcess方法的延時,以秒為單位。如果延時值非負,子容器不會被呼叫,也就是說子容器使用自己的處理執行緒。如果該值為正,會建立一個新的執行緒。在等待指定的時間以後,該執行緒在主機及其 子容器上呼叫backgroundProcess方法。context利用後臺處理session過期,監測類的變化用於重新載入。如果沒有指定,該屬性的預設值是-1,說明context依賴其所屬的Host的後臺處理。
className 實現的Java類名。該類必須實現org.apache.catalina.Context介面。如果沒有指定,使用標準實現(在下面定義)。
cookies 如果想利用cookies來傳遞session identifier(需要客戶端支援cookies),設為ture。否則為false,這種情況下只能依靠URL Rewriting傳遞session identifier。


crossContext 如果想在應用內呼叫ServletContext.getContext()來返回在該虛擬主機上執行的其他web application的request dispatcher,設為true。在安全性很重要的環境中,設為false,使得getContext()總是返回null。預設值為false。

docBase 該web應用的文件基準目錄(Document Base,也稱為Context Root),或者是WAR檔案的路徑。可以使用絕對路徑,也可以使用相對於context所屬的Host的appBase路徑。


override 如果想利用該Context元素中的設定覆蓋DefaultContext中相應的設定,設為true。預設情況下使用DefaultContext中的設定。

privileged 設為true,允許context使用container servlets,比如manager servlet。

path web應用的context路徑。catalina將每個URL的起始和context path進行比較,選擇合適的web應用處理該請求。特定Host下的context path必須是惟一的。如果context path為空字串(""),這個context是所屬Host的預設web應用,用來處理不能匹配任何context path的請求。


reloadable 如果希望Catalina監視/WEB-INF/classes/和/WEB-INF/lib下面的類是否發生變化,在發生變化的時候自動過載web application,設為true。這個特徵在開發階段很有用,但也大大增加了伺服器的開銷。因此,在釋出以後,不推薦使用。但是,你可以使用Manager應用在必要的時候觸發應用的過載。
wrapperClass org.apache.catalina.Wrapper實現類的名稱,用於該Context管理的servlets。如果沒有指定,使用標準的預設值。

標準實現
Context的標準實現是org.apache.catalina.core.StandardContext.它還支援如下的附加屬性:

屬性 描述
debug 與這個Engine關聯的Logger記錄的除錯資訊的詳細程度。數字越大,輸出越詳細。如果沒有指定,預設為0。


swallowOutput 如果該值為true,System.out和System.err的輸出被重定向到web應用的logger。如果沒有指定,預設值為false

useNaming 如果希望Catalina為該web應用使能一個JNDI InitialContext物件,設為true。該InitialialContext符合J2EE平臺的約定,預設值為true。

workDir Context提供的臨時目錄的路徑,用於servlet的臨時讀/寫。利用javax.servlet.context.tempdir屬性,servlet可以訪問該目錄。如果沒有指定,使用$CATALINA_HOME/work下一個合適的目錄。


巢狀元件
下列元素可以巢狀在Context元素中,但每個元素至多隻能巢狀一次。

Loader-配置該web應用用來載入servlet和javabean的類載入器。正常情況下,使用預設的類載入器就足夠了;
Logger - 配置用來接收和處理所有日誌訊息的logger,包括呼叫ServletContext.log()函式記錄的所有訊息;
Manager -配置用於建立,銷燬,維持HTTP session的session manager.正常情況下,使用預設的session manager配置就足夠了;
Realm - 配置Realm,該Realm的使用者資料庫以及相關的角色僅用於這個特定的web應用中。如果沒有指定,該web應用使用所屬的Host或Engine的Realm。
Resources - 配置用於訪問與這個web應用相關聯的靜態資源。正常情況下,使用預設的resource manager就足夠了。