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就足夠了。

專有特徵
訪問日誌
正常情況下,運行web伺服器會生成訪問日誌。訪問日誌以標準格式為每個請求輸出一行資訊。Catalina包含一個可選的Valve實現,可以用標準格式生成日誌,還可以使用任意定制的格式。

通過在Engine,Host或者CoNtext中嵌套一個Valve元素,Catalina會為該容器處理的所有請求創建訪問日誌,如下所示:



...
prefix="localhost_access_log." suffix=".txt"
pattern="common"/>
...




參考Access Log Valve,以獲得更多配置屬性的資訊;

CoNtext的自動設定
如果使用標準的CoNtext實現,當Catalina啟動,或者重載web應用的時候,如下的配置步驟會自動發生,不需要特殊的配置來使能這個特徵。

如果沒有定義自己的Loader元素,將會配置一個標準的web應用class loader;
如果沒有定義自己的Manager元素,會配置一個標準的session manager;
如果沒有定義自己的Resources元素,使用標準的resource manager。
在conf/web.xml中列出的web應用的屬性會當做該web應用的缺省的屬性。這被用於建立缺省的映射(比如將.jsp映射成對應的JSP servlet),以及其他的標準屬性。
列舉在/WEB-INF/web.xml資源中的屬性被處理(如果資源存在);
如果web應用指定了安全限制,並且可能需要對使用者進行認證,Catalina會配置選定的Authenticator,該Authenticator實現了login方法。

CoNtext參數
可以在CoNtext中元素中嵌套元素,配置帶有名稱的值,這些值作為servletcoNtext初始化參數,對整個web應用可見。比如,你可以像這樣創建初始化參數:



...
override="false"/>
...




這與在/WEB-INF/web.xml中包含如下元素相等:



companyName
My Company, Incorporated




區別是,前者不需要修改deployment descriptor來定制這個值。

元素的有效屬性值如下:

屬性 描述
description 關於該coNtext初始化參數的文字描述(可選)

name









要創建的coNtext初始化參數的名稱

override 如果不希望/WEB-INF/web.xml中具有相同參數名稱的覆蓋這裡指定的值,設為false。缺省值為true。

value 調用ServletCoNtext.getInitParameter()時,返回給應用的參數值。


環境條目
可以在CoNtext中嵌套元素,配置命名的值,這些值作為環境條目資源(Environment Entry Resource),對整個web應用可見。比如,可以按照如下方法創建一個環境條目:



...
type="java.lang.Integer" override="false"/>
...




這與在/WEB-INF/web.xml中包含如下元素是等價的:



maxExemptions
10
java.lang.Integer




區別是,前者不需要修改deployment descriptor來定制這個值。

元素的有效屬性所如下:

屬性 描述
description 環境條目的文字描述(可選)


name 環境條目的名稱,相對於java:comp/env coNtext。

override 如果不希望/WEB-INF/web.xml中具有相同名稱的覆蓋這裡指定的值,設為false。缺省值為true。

type 環境條目的JAVA類名的全稱.在/WEB-INF/web.xml中,必須是如下的值:java.lang.Boolean, java.lang.Byte, java.lang.Character, java.lang.Double, java.lang.Float, java.lang.Integer, java.lang.Long, java.lang.Short, or java.lang.String.

value 通過JNDI coNtext請求時,返回給應用的參數值。這個值必須轉換成type屬性定義的JAVA類型




生命期Listeners
如果一個JAVA物件需要知道CoNtext什麼時候啟動,什麼時候停止,可以在這個物件中嵌套一個Listener元素。該Listener元素必須實現了org.apache.catalina.LifecycleListener介面,在發生對應的生命期事件的時候,通知該Listener。可以按照如下的格式配置這樣的Listener:



...

...




注意,一個listener可以具有任意多的附加屬性。屬性名與JavaBean的屬性名相對應,使用標準的屬性命名方法。

請求篩檢程式(Request Filters)
對每個發送到Engine,Host或者CoNtext的請求,可以要求Catalina檢查IP位址或主機名稱稱。Catalina使用一系列配置好的 「接受」或者「拒絕」篩檢程式對用戶端的位址或者主機名稱進行檢查,篩檢程式是按照正則運算式語法定義的,由Jakarta Regexp正則運算式庫支援。不被接受的請求會返回一個HTTP「Forbidden」錯誤。下面是篩檢程式的定義。



...
allow="*.mycompany.com," target="_blank">" target="_blank">www.yourcompany.com"/>
deny="192.168.1.*"/>
...




資源定義(Resource Definitions)
可以在/WEB-INF/web.xml中定義資源的特性。使用JNDI查找和元素時,這些特性被返回。對同一資源名稱,還必須定義資源參數(見下面「資源參數」小節),這些參數用來設定物件工廠(object factory)以及物件工廠的屬性。

比如,你可以按照如下方式創建資源定義:



...
type="javax.sql.DataSource"
description="Employees Database for HR Applications"/>
...




這等價于在/WEB-INF/web.xml中包含如下元素:



Employees Database for HR Applications
jdbc/EmployeeDB
javax.sql.DataSource
Container




區別是,前者不需要修改deployment descriptor來定制這個值。

元素的有效屬性如下:

屬性 描述
auth 指定時web應用代碼本身sign on到對應的resource mananger,還是由container代表web應用sign on到resource manager。該屬性的值必須是Application或者Container。如果在web application deployment descriptor中使用,這個屬性是必需的,如果使用,這個屬性是可選的。

description 資源的文字描述(可選)

name 資源的名稱,相對於java:comp/env coNtext

scope 指定通過這個resource manager得到的連接是否共用。該屬性的值必須是Shareable或者Unshareable。缺省情況下,假定連接是共用的。
type 當web應用查找該資源的時候,返回的JAVA類名的全稱。


資源參數
資源參數用來配置資源管理器(resource manager,或物件工廠,object factory)。在做JNDI查找時,資源管理器返回查找的物件。在資源可以被訪問之前,對或元素的每個元素,或者/WEB-INF/web.xml中定義的每個或元素,都必須定義資源參數。

資源參數是用名稱定義的,使用的資源管理器(或者object factory)不同,參數名稱的集合也不一樣。這些參數名和工廠類的JavaBeans屬性相對應。JNDI實現通過調用對應的JavaBeans屬性設置函數來配置特定的工廠類,然後通過lookup()調用使得該實例可見。

一個JDBC資料來源的資源參數可以按照如下方式定義:



...


driverClassName
org.hsql.jdbcDriver


url
jdbc:HypersonicSQL:database


user
dbusername


password
dbpassword


...




如果你需要為某個特定的資源類型指定工廠內的JAVA類名,在元素中嵌套一個叫做factory的條目。

元素的有效屬性如下:

屬性 描述
name 配置的資源名稱,相對於java:comp/env coNtext。這個名稱必須與$CATALINA_HOME/conf/server.xml中某個元素定義的資源名稱匹配,或者在/WEB-INF/web.xml中通過或者元素應用。


資源連接(Resource Links)
資源連接用於創建到全域JNDI資源的連接。在連接名稱上進行JNDI查詢會返回被連接的global 資源。
比如,你可以按照如下方法創建一個資源連接:



...
global="simpleValue"
type="java.lang.Integer"
...




元素的有效屬性如下:

屬性 描述
global 被連接的連接全域資源的名稱



name 創建的資源連接的名稱,相對於java:comp/env coNtext

type 當web應用在該資源連接上進行查找時,返回的JAVA類名的全稱
創作者介紹
創作者 shadow 的頭像
shadow

資訊園

shadow 發表在 痞客邦 留言(0) 人氣()