DefaultContext組件

Introduction

DefaultContext元素代表Context元素的配置設(shè)置的一個(gè)子集,可以嵌套在Engine或者Host元素中,表示自動(dòng)創(chuàng)建的Context的缺省配置屬性。

在什么情況下,Catalina會(huì)自動(dòng)創(chuàng)建Context?有關(guān)這方面的更多信息,參考應(yīng)用自動(dòng)發(fā)布和用戶web應(yīng)用。

屬性
公共屬性

所有DefaultContext的實(shí)現(xiàn)支持如下屬性:

屬性 描述
cookies

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

 

crossContext

如果想在應(yīng)用內(nèi)調(diào)用ServletContext.getContext()來(lái)返回在該虛擬主機(jī)上運(yùn)行的其他web application的request dispatcher,設(shè)為true。在安全性很重要的環(huán)境中,設(shè)為false,使得getContext()總是返回null。缺省值為false。

reloadable

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

wrapperClass

org.apache.catalina.Wrapper實(shí)現(xiàn)類的名稱,用于該Context管理的servlets。如果沒(méi)有指定,使用標(biāo)準(zhǔn)的缺省值。

標(biāo)準(zhǔn)實(shí)現(xiàn)

 

 

 

DefaultContext的標(biāo)準(zhǔn)實(shí)現(xiàn)是org.apache.catalina.core.DefaultContext,它還支持如下的附加屬性:

屬性 描述
swallowOutput

如果該值為true,System.out和System.err的輸出被重定向到web應(yīng)用的logger。如果沒(méi)有指定,缺省值為false

useNaming

如果希望Catalina為該web應(yīng)用使能一個(gè)JNDI InitialContext對(duì)象,設(shè)為true。該InitialialContext符合J2EE平臺(tái)的約定,缺省值為true。

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

可以在Context中元素中嵌套<Parameter>元素,配置帶有名稱的值,這些值作為servletcontext初始化參數(shù),對(duì)整個(gè)web應(yīng)用可見(jiàn)。比如,你可以像這樣創(chuàng)建初始化參數(shù):

 

<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>
                                    
區(qū)別是,前者不需要修改deployment descriptor來(lái)定制這個(gè)值。

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

 

屬性 描述
description

關(guān)于該context初始化參數(shù)的文字描述(可選)

name

要?jiǎng)?chuàng)建的context初始化參數(shù)的名稱

override

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

value

調(diào)用ServletContext.getInitParameter()時(shí),返回給應(yīng)用的參數(shù)值。

環(huán)境條目

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

 

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

 

<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 區(qū)別是,前者不需要修改deployment descriptor來(lái)定制這個(gè)值。

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

屬性 描述
description

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

name

環(huán)境條目的名稱,相對(duì)于java:comp/env context。

override

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

type

環(huán)境條目的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

通過(guò)JNDI context請(qǐng)求時(shí),返回給應(yīng)用的參數(shù)值。這個(gè)值必須轉(zhuǎn)換成type屬性定義的Java類型

 

生命期Listeners(Lifecycle Listeners

如果一個(gè)Java對(duì)象需要知道Context什么時(shí)候啟動(dòng),什么時(shí)候停止,可以在這個(gè)對(duì)象中嵌套一個(gè)Listener元素。該Listener元素必須實(shí)現(xiàn)了org.apache.catalina.LifecycleListener接口,在發(fā)生對(duì)應(yīng)的生命期事件的時(shí)候,通知該Listener。可以按照如下的格式配置這樣的Listener:

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

注意,一個(gè)listener可以具有任意多的附加屬性。屬性名與JavaBean的屬性名相對(duì)應(yīng),使用標(biāo)準(zhǔn)的屬性命名方法。

資源定義(Resource Definitions

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

比如,你可以按照如下方式創(chuàng)建資源定義:

 

<DefaultContext ...>
                                    ...
                                    <Resource name="jdbc/EmployeeDB" auth="Container"
                                    type="javax.sql.DataSource"
                                    description="Employees Database for HR Applications"/>
                                    ...
                                    </DefaultContext>
                                    
這等價(jià)于在/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>
                                    
區(qū)別是,前者不需要修改deployment descriptor來(lái)定制這個(gè)值。

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

屬性 描述
auth

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

description

資源的文字描述(可選)

name

資源的名稱,相對(duì)于java:comp/env context

scope

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

type

當(dāng)web應(yīng)用查找該資源的時(shí)候,返回的Java類名的全稱。

資源參數(shù)(Resource Parameters

資源參數(shù)用來(lái)配置資源管理器(resource manager,或?qū)ο蠊S,object factory)。在做JNDI查找時(shí),資源管理器返回查找的對(duì)象。在資源可以被訪問(wèn)之前,對(duì)<Context>或<DefaultContext>元素的每個(gè)<Resource>元素,或者/WEB-INF/web.xml中定義的每個(gè)<resource-ref>或<resource-env-ref>元素,都必須定義資源參數(shù)。

資源參數(shù)是用名稱定義的,使用的資源管理器(或者object factory)不同,參數(shù)名稱的集合也不一樣。這些參數(shù)名和工廠類的JavaBeans屬性相對(duì)應(yīng)。JNDI實(shí)現(xiàn)通過(guò)調(diào)用對(duì)應(yīng)的JavaBeans屬性設(shè)置函數(shù)來(lái)配置特定的工廠類,然后通過(guò)lookup()調(diào)用使得該實(shí)例可見(jiàn)。

一個(gè)JDBC數(shù)據(jù)源的資源參數(shù)可以按照如下方式定義:

 

<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>
                                    
如果你需要為某個(gè)特定的資源類型指定工廠內(nèi)的Java類名,在<ResourceParams>元素中嵌套一個(gè)叫做factory的<parameter>條目。

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

屬性 描述
name

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

資源連接(Resource Links

資源連接用于創(chuàng)建到全局JNDI資源的連接。在連接名稱上進(jìn)行JNDI查詢會(huì)返回被連接的global 資源。
比如,你可以按照如下方法創(chuàng)建一個(gè)資源連接:

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

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

屬性 描述
global

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

name

創(chuàng)建的資源連接的名稱,相對(duì)于java:comp/env context

type

當(dāng)web應(yīng)用在該資源連接上進(jìn)行查找時(shí),返回的Java類名的全稱