DefaultContext組件

Introduction

DefaultContext元素代表Context元素的配置設置的一個子集,可以嵌套在Engine或者Host元素中,表示自動創建的Context的缺省配置屬性。

在什么情況下,Catalina會自動創建Context?有關這方面的更多信息,參考應用自動發布和用戶web應用。

屬性
公共屬性

所有DefaultContext的實現支持如下屬性:

屬性 描述
cookies

如果想利用cookies來傳遞session identifier(需要客戶端支持cookies),設為ture。否則為false,這種情況下只能依靠URL Rewriting傳遞session identifier。

 

crossContext

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

reloadable

如果希望Catalina監視/WEB-INF/classes/和/WEB-INF/lib下面的類是否發生變化,在發生變化的時候自動重載web application,設為true。這個特征在開發階段很有用,但也大大增加了服務器的開銷。因此,在發布以后,不推薦使用。但是,你可以使用Manager應用在必要的時候觸發應用的重載。

wrapperClass

org.apache.catalina.Wrapper實現類的名稱,用于該Context管理的servlets。如果沒有指定,使用標準的缺省值。

標準實現

 

 

 

DefaultContext的標準實現是org.apache.catalina.core.DefaultContext,它還支持如下的附加屬性:

屬性 描述
swallowOutput

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

useNaming

如果希望Catalina為該web應用使能一個JNDI InitialContext對象,設為true。該InitialialContext符合J2EE平臺的約定,缺省值為true。

嵌套組件
專有特征
Contxt參數(Context Parameters

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

 

<DefaultContext ...>
                                    ...
                                    <Parameter name="companyName" value="My Company, Incorporated"
                                    override="false"/>
                                    ...
                                    </DefaultContext>
                                    
這與在/WEB-INF/web.xml中包含如下元素相等:

 

<context-param>
                                    <param-name>companyName</param-name>
                                    <param-value>My Company, Incorporated</param-value>
                                    </context-param>
                                    
區別是,前者不需要修改deployment descriptor來定制這個值。

<Parameter>元素的有效屬性值如下:

 

屬性 描述
description

關于該context初始化參數的文字描述(可選)

name

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

override

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

value

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

環境條目

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

 

<DefaultContext ...>
                                    ...
                                    <Environment name="maxExemptions" value="10"
                                    type="java.lang.Integer" override="false"/>
                                    ...
                                    </DefaultContext>
                                    
這與在/WEB-INF/web.xml中包含如下元素是等價的:

 

<env-entry>
                                    <env-entry-name>maxExemptions</param-name>
                                    <env-entry-value>10</env-entry-value>
                                    <env-entry-type>java.lang.Integer</env-entry-type>
                                    </env-entry>
                                    

but does not require modification of the deployment descriptor to customize 區別是,前者不需要修改deployment descriptor來定制這個值。

<Environment>元素的有效屬性所如下:

屬性 描述
description

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

name

環境條目的名稱,相對于java:comp/env context。

override

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

type

環境條目的Java類名的全稱.在/WEB-INF/web.xml中,<env-entry-type>必須是如下的值: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(Lifecycle Listeners

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

<DefaultContext  ...>
                                    ...
                                    <Listener className="com.mycompany.mypackage.MyListener" ... >
                                    ...
                                    </DefaultContext>
                                    

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

資源定義(Resource Definitions

可以在/WEB-INF/web.xml中定義資源的特性。使用JNDI查找<resource-ref>和<resource-env-ref>元素時,這些特性被返回。對同一資源名稱,還必須定義資源參數(見下面“資源參數”小節),這些參數用來配置對象工廠(object factory)以及對象工廠的屬性。

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

 

<DefaultContext ...>
                                    ...
                                    <Resource name="jdbc/EmployeeDB" auth="Container"
                                    type="javax.sql.DataSource"
                                    description="Employees Database for HR Applications"/>
                                    ...
                                    </DefaultContext>
                                    
這等價于在/WEB-INF/web.xml中包含如下元素:

 

<resource-ref>
                                    <description>Employees Database for HR Applications</description>
                                    <res-ref-name>jdbc/EmployeeDB</res-ref-name>
                                    <res-ref-type>javax.sql.DataSource</res-ref-type>
                                    <res-auth>Container</res-auth>
                                    </resource-ref>
                                    
區別是,前者不需要修改deployment descriptor來定制這個值。

<Resource>元素的有效屬性如下:

屬性 描述
auth

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

description

資源的文字描述(可選)

name

資源的名稱,相對于java:comp/env context

scope

指定通過這個resource manager得到的連接是否共享。該屬性的值必須是Shareable或者Unshareable。缺省情況下,假定連接是共享的。

type

當web應用查找該資源的時候,返回的Java類名的全稱。

資源參數(Resource Parameters

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

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

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

 

<DefaultContext ...>
                                    ...
                                    <ResourceParams name="jdbc/EmployeeDB">
                                    <parameter>
                                    <name>driverClassName</name>
                                    <value>org.hsql.jdbcDriver</value>
                                    </parameter>
                                    <parameter>
                                    <name>driverName</name>
                                    </value>jdbc:HypersonicSQL:database</value>
                                    </parameter>
                                    <parameter>
                                    <name>user</name>
                                    <value>dbusername</value>
                                    </parameter>
                                    <parameter>
                                    <name>password</name>
                                    <value>dbpassword</value>
                                    </parameter>
                                    </ResourceParams>
                                    ...
                                    </DefaultContext>
                                    
如果你需要為某個特定的資源類型指定工廠內的Java類名,在<ResourceParams>元素中嵌套一個叫做factory的<parameter>條目。

<Resourceparams>元素的有效屬性如下:

屬性 描述
name

配置的資源名稱,相對于java:comp/env context。這個名稱必須與$CATALINA_HOME/conf/server.xml中某個<Resource>元素定義的資源名稱匹配,或者在/WEB-INF/web.xml中通過<resource-ref>或者<resource-env-ref>元素應用。

資源連接(Resource Links

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

<DefaultContext ...>
                                    ...
                                    <ResourceLink name="linkToGlobalResource"
                                    global="simpleValue"
                                    type="java.lang.Integer"
                                    ...
                                    </DefaultContext>
                                    

<ResourceLink>元素的有效屬性如下:

屬性 描述
global

被連接的連接全局資源的名稱

name

創建的資源連接的名稱,相對于java:comp/env context

type

當web應用在該資源連接上進行查找時,返回的Java類名的全稱