亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Tomcat 體系結(jié)構(gòu)介紹 ZT

系統(tǒng) 2127 0

轉(zhuǎn)自: http://bbs.163jsp.com/posts/list/607.html



Apache Tomcat
是一款非常著名的開(kāi)源 Servlet/JSP 容器,被用做 Java Servlet 和 JavaServer Pages 技術(shù)的官方參考實(shí)現(xiàn)。如果您要了解這兩種技術(shù)的細(xì)節(jié)可以查閱參考資料。

讓我們先來(lái)瀏覽一下 Tomcat 體系結(jié)構(gòu)中的六個(gè)主要概念:

  ● Server
  ● Service
  ● Engine
  ● Host
  ● Connector
  ● Context


由于Tomcat體系結(jié)構(gòu)的內(nèi)容非常豐富,所以本文非常長(zhǎng)。因此我們盡量的使每一部分盡可能自成一體,使您可以獨(dú)立閱讀。如果您不是想全面了解Tomcat 的體系結(jié)構(gòu),只是想解決某一部分的具體問(wèn)題,那么我們建議您使用目錄導(dǎo)航到相關(guān)的內(nèi)容,而不必在其它的內(nèi)容上花費(fèi)寶貴的時(shí)間。
=============================================================================
Server
Server代表整個(gè)容器(container)。它可以包含一個(gè)或多個(gè)Service,還可以包含一個(gè)GlobalNamingResources。

值得注意的是在標(biāo)準(zhǔn)的Server接口中沒(méi)有包括Lifecycle接口,但是在標(biāo)準(zhǔn)實(shí)現(xiàn) org.apache.catalina.core.StandardServer中卻實(shí)現(xiàn)了Lifecycle這個(gè)接口,這使得我們可以為T(mén)omcat 的標(biāo)準(zhǔn)實(shí)現(xiàn)設(shè)置Listener。一般的方法是在conf/server.xml文件中加入:

<Server port="8005" shutdown="SHUTDOWN">

<Listener className="org.solol.listener.XXXLifecycleListener" />
<Listener className="org.solol.listener.XXXLifecycleListener" />
:
:
:

</Server>

其中的XXXLifecycleListener為您自定義的LifecycleListener,而且必須要實(shí)現(xiàn)LifecycleListener接口。您可以在這里設(shè)置多個(gè)LifecycleListener,但要使用不同的名字。

由于在Tomcat的官方文檔中沒(méi)有顯著的說(shuō)明,所以這種使用Listener的方式?jīng)]有體現(xiàn)在稍后給出的 體系結(jié)構(gòu)圖 中。

Server支持className,port和shutdown三個(gè)公共屬性,而標(biāo)準(zhǔn)實(shí)現(xiàn)org.apache.catalina.core.StandardServer還可能支持一些擴(kuò)展屬性。詳細(xì)的內(nèi)容您可以查閱 這里

您可以通過(guò)稍后給出的 體系結(jié)構(gòu)圖 了解在整個(gè)Tomcat體系結(jié)構(gòu)中Server所處的位置。
=============================================================================
Service
Service中可以含有一個(gè)或多個(gè)Connector,但只能含有一個(gè)Engine。這使得不同的Connector可以共享同一個(gè)Engine。同一個(gè)Server中的多個(gè)Service之間沒(méi)有相關(guān)性。

值得注意的是在標(biāo)準(zhǔn)的Service接口中沒(méi)有包括Lifecycle接口,但是在標(biāo)準(zhǔn)實(shí)現(xiàn) org.apache.catalina.core.StandardService中卻實(shí)現(xiàn)了Lifecycle這個(gè)接口,這使得我們可以為 Tomcat的標(biāo)準(zhǔn)實(shí)現(xiàn)設(shè)置Listener。

由于在Tomcat的官方文檔中沒(méi)有顯著的說(shuō)明,所以這種使用Listener的方式?jīng)]有體現(xiàn)在稍后給出的 體系結(jié)構(gòu)圖 中。

Service支持className和name兩個(gè)公共屬性,而標(biāo)準(zhǔn)實(shí)現(xiàn)org.apache.catalina.core.StandardService還可能支持一些擴(kuò)展屬性。詳細(xì)的內(nèi)容您可以查閱 這里

您可以通過(guò)稍后給出的 體系結(jié)構(gòu)圖 了解在整個(gè)Tomcat體系結(jié)構(gòu)中Service所處的位置。
=============================================================================
Engine
Engine負(fù)責(zé)接收和處理來(lái)自它所屬的Service中的所有Connector的請(qǐng)求。

Engine 支持backgroundProcessorDelay、className、defaultHost、jvmRoute和name五個(gè)公共屬性,而標(biāo)準(zhǔn)實(shí)現(xiàn)org.apache.catalina.core.StandardEngine還可能支持一些擴(kuò)展屬性。詳細(xì)的內(nèi)容您可以查閱 這里

您可以通過(guò)稍后給出的 體系結(jié)構(gòu)圖 了解在整個(gè)Tomcat體系結(jié)構(gòu)中Engine所處的位置。

從圖中可以看出Engine右邊有四個(gè)不同顏色的小方塊,它們表示Engine所支持的四個(gè)不同的特性。相同顏色的小方塊可能也會(huì)出現(xiàn)在其它的地方,這表示在那里也支持相同的或相似的特性。每種特性的具體描述可以在文中的Special Features中找到。

從圖中可以看出Engine下邊有一個(gè)紅色的圓角矩形,它們表示Engine所支持的一個(gè)內(nèi)嵌組件。相同顏色的圓角矩形可能也會(huì)出現(xiàn)在其它的地方,這表示在那里也支持相同的或相似的內(nèi)嵌組件。每種內(nèi)嵌組件的具體描述可以在文中的Nested Components中找到。
=============================================================================
Host
Host表示一個(gè)虛擬主機(jī),并和一個(gè)服務(wù)器的網(wǎng)絡(luò)名關(guān)聯(lián)。注意Engine中必須有一個(gè)Host的名字和Engine的defaultHost屬性匹配。

有時(shí)候,網(wǎng)絡(luò)管理員可能希望將多個(gè)網(wǎng)絡(luò)名關(guān)聯(lián)到一個(gè)虛擬主機(jī),這可以通過(guò)下文介紹的Host Name Aliases特性完成。

Host 支持appBase、autoDeploy、backgroundProcessorDelay、className、deployOnStartup和 name六個(gè)公共屬性,而標(biāo)準(zhǔn)實(shí)現(xiàn)org.apache.catalina.core.StandardHost還可能支持一些擴(kuò)展屬性。詳細(xì)的內(nèi)容您可以查閱這里。

您可以通過(guò)稍后給出的 體系結(jié)構(gòu)圖 了解在整個(gè)Tomcat體系結(jié)構(gòu)中Host所處的位置。

從圖中可以看出Host右邊有八個(gè)不同顏色的小方塊,它們表示Host所支持的八個(gè)不同的特性。相同顏色的小方塊可能也會(huì)出現(xiàn)在其它的地方,這表示在那里也支持相同的或相似的特性。每種特性的具體描述可以在文中的Special Features中找到。

從圖中可以看出Host下邊有一個(gè)紅色的圓角矩形,它們表示Host所支持的一個(gè)內(nèi)嵌組件。相同顏色的圓角矩形可能也會(huì)出現(xiàn)在其它的地方,這表示在那里也支持相同的或相似的內(nèi)嵌組件。每種內(nèi)嵌組件的具體描述可以在文中的Nested Components中找到。
=============================================================================
Connector

Connector負(fù)責(zé)接收來(lái)自客戶端(Client)的請(qǐng)求。比較常見(jiàn)的兩個(gè)是 HTTP Connector AJP Connector

您可以通過(guò)稍后給出的 體系結(jié)構(gòu)圖 了解在整個(gè)Tomcat體系結(jié)構(gòu)中Connector所處的位置。
=============================================================================
Context
Context表示在虛擬主機(jī)中運(yùn)行的web應(yīng)用程序。一個(gè)虛擬主機(jī)中能夠運(yùn)行多個(gè)Context,它們通過(guò)各自的Context Path進(jìn)行相互區(qū)分。如果Context Path為"",那么該web應(yīng)用為該虛擬主機(jī)的默認(rèn)的web應(yīng)用。

目前可以通過(guò)四種方式將Context加入Host:

  ● $CATALINA_HOME/conf/context.xml,其中Context元素中的信息會(huì)被所有web應(yīng)用程序加載
  ● $CATALINA_HOME/conf/[enginename]/[hostname]/context.xml.default,其中Context元素中的信息會(huì)被hostname主機(jī)下的所有web應(yīng)用程序加載
  ● $CATALINA_HOME/conf/[enginename]/[hostname]/目錄中所有以.xml為擴(kuò)展名的文件,其中Context元素中的信息會(huì)被hostname主機(jī)下的所有web應(yīng)用程序加載
  ● 如果通過(guò)上面的步驟沒(méi)有找到,那么最后要從web應(yīng)用程序的/META-INF/context.xml目錄中查找

Context 支持backgroundProcessorDelay、className、cookies、crossContext、docBase、 override、privileged、path、reloadable和wrapperClass十個(gè)公共屬性,而標(biāo)準(zhǔn)實(shí)現(xiàn) org.apache.catalina.core.StandardContext還可能支持一些擴(kuò)展屬性。詳細(xì)的內(nèi)容您可以查閱這里。

您可以通過(guò)稍后給出的 體系結(jié)構(gòu)圖 了解在整個(gè)Tomcat體系結(jié)構(gòu)中Context所處的位置。

從圖中可以看出Context右邊有十個(gè)不同顏色的小方塊,它們表示Context所支持的十個(gè)不同的特性。相同顏色的小方塊可能也會(huì)出現(xiàn)在其它的地方,這表示在那里也支持相同的或相似的特性。每種特性的具體描述可以在文中的Special Features中找到。

從圖中可以看出Context下邊有五個(gè)不同顏色的圓角矩形,它們表示Context所支持的五個(gè)內(nèi)嵌組件。相同顏色的圓角矩形可能也會(huì)出現(xiàn)在其它的地方,這表示在那里也支持相同的或相似的內(nèi)嵌組件。每種內(nèi)嵌組件的具體描述可以在文中的Nested Components中找到。
=============================================================================
體系結(jié)構(gòu)圖

=============================================================================
Nested Components
=============================================================================
GlobalNamingResources

GlobalNamingResources 組件為 Server 定義全局 JNDI 資源。這些資源出現(xiàn)在 Server 的全局 JNDI 資源上下文中。這個(gè)上下文和每個(gè) web 應(yīng)用程序的 JNDI 上下文不同。在全局 JNDI 上下文中定義的資源在每個(gè) web 應(yīng)用程序的 JNDI 上下文中不可見(jiàn),但是可以通過(guò) Resource Links 來(lái)改變這種可見(jiàn)性。如果您要了解在 Tomcat 中如何使用 JNDI 資源可以查閱參考 http://tomcat.apache.org/tomcat-6.0-doc/jndi-resources-howto.html。

從前面給出的 體系結(jié)構(gòu)圖 中可以看出GlobalNamingResources右邊有四個(gè)不同顏色的小方塊,它們表示GlobalNamingResources所支持的四個(gè)不同的特性。相同顏色的小方塊可能也會(huì)出現(xiàn)在其它的地方,這表示在那里也支持相同的或相似的特性。每種特性的具體描述可以在文中的Special Features中找到。

Realm

從前面給出的 體系結(jié)構(gòu)圖 中可以看出,Realm組件在Engine、Host和Context中都有支持。

Realm 是一個(gè)"數(shù)據(jù)庫(kù)"存儲(chǔ)著用戶名、密碼和角色信息。通過(guò)自定義Realm可以將Catalina集成到其它的環(huán)境。Engine、Host和Context 中的Realm可以被較低級(jí)別的容器繼承,即Host繼承Engine的Realm,Context繼承Host的Realm,除非我們顯示的禁止這種繼承。

Realm支持className一個(gè)公共屬性。Tomcat提供了多個(gè)實(shí)現(xiàn):

  ● org.apache.catalina.realm.JDBCRealm
  ● org.apache.catalina.realm.DataSourceRealm
  ● org.apache.catalina.realm.JNDIRealm
  ● org.apache.catalina.realm.MemoryRealm

如果您要了解這些Realm的更多信息,可以查閱 這里

Loader

從前面給出的 體系結(jié)構(gòu)圖 中可以看出,Loader組件只在Context中都有支持。

Loader是web應(yīng)用程序的類(lèi)裝載器。必須有一個(gè)類(lèi)裝載器按照Servlet Specification的要求從如下的位置裝載類(lèi):

  ● 從web應(yīng)用程序的/WEB-INF/classes目錄裝載
  ● 從web應(yīng)用程序的/WEB-INF/lib目錄中的jar文件中裝載
  ● 從Catalina中裝載對(duì)于所有web應(yīng)用可見(jiàn)的資源

Loader元素應(yīng)該嵌入到Context元素中,如果沒(méi)有設(shè)置那么會(huì)自動(dòng)創(chuàng)建一個(gè)默認(rèn)的Loader。如果想更深入的了解Catalina實(shí)現(xiàn)的Loader可以查閱參考資料。

Loader支持className、delegate和reloadable三個(gè)公共屬性,而標(biāo)準(zhǔn)實(shí)現(xiàn)org.apache.catalina.loader.WebappLoader還可能支持一些擴(kuò)展屬性。詳細(xì)的內(nèi)容您可以查閱 這里

Manager

從前面給出的 體系結(jié)構(gòu)圖 中可以看出,Manager組件只在Context中有支持。

Manager是session管理器(session manager),負(fù)責(zé)session的創(chuàng)建和維護(hù)。

Manager元素應(yīng)該嵌入到Context元素中,如果沒(méi)有設(shè)置那么會(huì)自動(dòng)創(chuàng)建一個(gè)默認(rèn)的Manager。

Manager 支持className和distributable兩個(gè)公共屬性,而標(biāo)準(zhǔn)實(shí)現(xiàn) org.apache.catalina.session.StandardManager和 org.apache.catalina.session.PersistentManager還可能支持一些擴(kuò)展屬性。詳細(xì)的內(nèi)容您可以查閱 這里

Resources

從前面給出的 體系結(jié)構(gòu)圖 中可以看出,Resources組件只在Context中有支持。

Resources表示web應(yīng)用程序的靜態(tài)資源。這使得我們有可能實(shí)現(xiàn)non-filesystem based Resources。

Resources元素應(yīng)該嵌入到Context元素中,如果沒(méi)有設(shè)置那么會(huì)自動(dòng)創(chuàng)建一個(gè)默認(rèn)的基于文件系統(tǒng)的Resources。

Resources支持className一個(gè)公共屬性,而標(biāo)準(zhǔn)實(shí)現(xiàn)org.apache.naming.resources.FileDirContext還可能支持一些擴(kuò)展屬性。詳細(xì)的內(nèi)容您可以查閱 這里

WatchedResource

從前面給出的 體系結(jié)構(gòu)圖 中可以看出,WatchedResource組件只在Context中都有支持。

WatchedResource用來(lái)告知Auto Deployer那些靜態(tài)資源的更新需要被監(jiān)控。如果被監(jiān)控的資源被更新了那么該資源所對(duì)應(yīng)的web應(yīng)用將會(huì)被重新裝載。這個(gè)元素的內(nèi)容必須是一個(gè)String。
=============================================================================
Special Features
=============================================================================
Logging

從前面給出的 體系結(jié)構(gòu)圖 中可以看出,Logging特性在Engine、Host和Context中都有支持。這個(gè)特性使得我們可以區(qū)分日志記錄的具體來(lái)源。

在Engine、Host和Context中的日志類(lèi)別分別為:

  ● org.apache.catalina.core.ContainerBase.[enginename]
  ● org.apache.catalina.core.ContainerBase.[enginename].[hostname]
  ● org.apache.catalina.core.ContainerBase.[enginename].[hostname].[path]

其中中括號(hào)([])中為具體的名稱(chēng)。

Logging特性的實(shí)現(xiàn)是通過(guò)org.apache.catalina.core.ContainerBase來(lái)完成的。

Access Logs

從前面給出的 體系結(jié)構(gòu)圖 中可以看出,Access Logs特性在Engine、Host和Context中都有支持。

  ● Engine中的Access Logs記錄所有Engine處理的請(qǐng)求的訪問(wèn)日志
  ● Host中的Access Logs記錄所有Host處理的請(qǐng)求的訪問(wèn)日志
  ● Context中的Access Logs記錄所有Context處理的請(qǐng)求的訪問(wèn)日志

一般的配置方法是在conf/server.xml文件的相關(guān)元素中加入:

<Engine ...>
...
<Valve className="org.apache.catalina.valves.AccessLogValve"
prefix="catalina_access_log." suffix=".txt" pattern="common"/>
...
</Engine>

上面的<Engine>,在Host中要被換成<Host>,在Context中要被換成<Context>。

Access Logs特性的實(shí)現(xiàn)是通過(guò)Tomcat的Value框架來(lái)完成的。

如果您要了解Access Log Valve設(shè)置的更多信息,可以查閱 這里

Lifecycle Listeners

從前面給出的 體系結(jié)構(gòu)圖 中可以看出,Lifecycle Listeners特性在Engine、Host和Context中都有支持。這個(gè)特性使得我們可以方便的進(jìn)行生命周期的管理。

值得一提的是在Tomcat的標(biāo)準(zhǔn)實(shí)現(xiàn)中Server和Service也支持生命周期的管理,但是在官方文檔中沒(méi)有顯著的說(shuō)明,所以沒(méi)有在圖中體現(xiàn)出來(lái)。細(xì)節(jié)可以查閱Server和Service部分。

  ● Engine中的Lifecycle Listeners監(jiān)聽(tīng)該Engine的生命周期事件(Eifecycle Event)
  ● Host中的Lifecycle Listeners監(jiān)聽(tīng)該Host的生命周期事件(Eifecycle Event)
  ● Context中的Lifecycle Listeners監(jiān)聽(tīng)該Context的生命周期事件(Eifecycle Event)

一般的配置方法是在conf/server.xml文件的相關(guān)元素中加入:

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

上面的<Engine>,在Host中要被換成<Host>,在Context中要被換成<Context>。

另外,可以通過(guò)<Listener>元素為listener添加屬性。

注意和Container Event區(qū)別。

Request Filters

從前面給出的 體系結(jié)構(gòu)圖 中可以看出,Request Filters特性在Engine、Host和Context中都有支持。

  ● Engine中的Request Filters過(guò)濾所有Engine處理的請(qǐng)求
  ● Host中的Request Filters過(guò)濾所有Host處理的請(qǐng)求
  ● Context中的Request Filters過(guò)濾所有Context處理的請(qǐng)求

一般的配置方法是在conf/server.xml文件的相關(guān)元素中加入:

<Engine ...>
...
<Valve className="org.apache.catalina.valves.RemoteHostValve"
allow="*.mycompany.com,www.yourcompany.com"/>
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
deny="192.168.1.*"/>
...
</Engine/>

上面的<Engine>,在Host中要被換成<Host>,在Context中要被換成<Context>。

Request Filters特性的實(shí)現(xiàn)是通過(guò)Tomcat的Value框架來(lái)完成的。

如果您要了解Remote Address Filter設(shè)置的更多信息,可以查閱 這里

如果您要了解Remote Host Filter設(shè)置的更多信息,可以查閱 這里

Automatic Application Deployment

從前面給出的 體系結(jié)構(gòu)圖 中可以看出,Automatic Application Deployment特性只在Host中都有支持。

如果使用Host的標(biāo)準(zhǔn)實(shí)現(xiàn),同時(shí)deployOnStartup屬性值為true(這是默認(rèn)值),那么Catalina在首次啟動(dòng)時(shí)會(huì)自動(dòng)完成下面的工作:

  ● $CATALINA_HOME/conf/[engine_name]/[host_name]目錄下的所有XML文件都被假定含有<Context>元素。
  ● appBase 目錄下的所有沒(méi)有展開(kāi)的war文件(沒(méi)有展開(kāi)的意思是沒(méi)有和war文件名不包括.war擴(kuò)展名對(duì)應(yīng)的目錄存在)會(huì)被自動(dòng)展開(kāi),除非unpackWARs屬性值為false。如果重新部署更新的war文件,在重起Tomcat之前要?jiǎng)h除先前展開(kāi)的目錄(如果autoDeploy屬性值為true那么只要?jiǎng)h除先前展開(kāi)的目錄更新后的war文件就會(huì)自動(dòng)展開(kāi))。
  ● 對(duì)于appBase中含有/WEB-INF/web.xml文件的任何子目錄都會(huì)自動(dòng)產(chǎn)生一個(gè)Context,不管該子目錄是否在 conf/server.xml文件中出現(xiàn)過(guò)。這個(gè)新產(chǎn)生的Context將會(huì)根據(jù)DefaultContext的屬性值進(jìn)行設(shè)置,其context path為“/目錄名”。如果目錄名為ROOT,那么context path為“”。

因此要使用上面的規(guī)則需要將XML設(shè)置文件拷貝到$CATALINA_HOME/conf/[engine_name]/[host_name]目錄下或?qū)ar文件和含有web應(yīng)用的目錄拷貝到appBase目錄下。

自動(dòng)部署(Auto Deployer)也會(huì)跟蹤如下web應(yīng)用程序的變化:

  ● 更新WEB-INF/web.xml文件將會(huì)使web應(yīng)用程序重新加載
  ● 更新已展開(kāi)的war文件會(huì)使web應(yīng)用程序卸載(undeploy)(同時(shí)移除先前展開(kāi)的目錄)并重新部署(deployment)
  ● 更新XML設(shè)置文件會(huì)使web應(yīng)用程序卸載(undeploy)(不移除任何展開(kāi)的目錄)并重新部署(deployment)

在使用自動(dòng)部署的時(shí)候XML設(shè)置文件中的docBase要指向appBase目錄之外。否則部署將很困難或應(yīng)用程序會(huì)被部署兩次。

如果要顯示的定義context,那么需要關(guān)閉自動(dòng)部署。否則相應(yīng)的context將會(huì)部署兩次,這可能會(huì)有問(wèn)題。
Host Name Aliases

從前面給出的 體系結(jié)構(gòu)圖 中可以看出,Host Name Aliases特性只在Host中都有支持。

在一些時(shí)候,網(wǎng)絡(luò)管理員會(huì)將多個(gè)網(wǎng)絡(luò)名(在DNS服務(wù)器中)解析到同一個(gè)服務(wù)器。通常每一個(gè)網(wǎng)絡(luò)名會(huì)對(duì)應(yīng)到一個(gè)Host。不過(guò)有時(shí)候需要將多個(gè)網(wǎng)絡(luò)名對(duì)應(yīng)到一個(gè)Host,Host Name Aliases用來(lái)完成這個(gè)目標(biāo)。

一般的配置方法是在conf/server.xml文件的相關(guān)元素中加入:

<Host name="www.mycompany.com" ...>
...
<Alias>mycompany.com</Alias>
...
</Host>

<Host>元素中可以嵌入一個(gè)或多個(gè)<Alias>元素。
Single Sign On

從前面給出的 體系結(jié)構(gòu)圖 中可以看出,Single Sign On特性只在Host中都有支持。

在一些時(shí)候,特別是在Portal環(huán)境下,可能會(huì)希望當(dāng)用戶訪問(wèn)一個(gè)虛擬主機(jī)下的多個(gè)web應(yīng)用時(shí)只登陸一次,即所謂的單點(diǎn)登陸。

一般的配置方法是在conf/server.xml文件的相關(guān)元素中加入:

<Host name="localhost" ...>
...
<Valve className="org.apache.catalina.authenticator.SingleSignOn"
debug="0"/>
...
</Host>

Single Sign On操作遵循下面的規(guī)則:

  ● 該虛擬主機(jī)下的所有Web應(yīng)用程序必須共享同一個(gè)Realm。在實(shí)踐中通常通過(guò)為Host或(對(duì)應(yīng)的Engine)嵌入Realm而不是為每一個(gè)Context嵌入相同的Realm來(lái)實(shí)現(xiàn)。
  ● 在用戶訪問(wèn)該虛擬主機(jī)下的所有Web應(yīng)用程序中的非保護(hù)資源時(shí)不需要驗(yàn)證。
  ● 在用戶訪問(wèn)該虛擬主機(jī)下的所有Web應(yīng)用程序中的保護(hù)資源時(shí)需要驗(yàn)證。
  ● 一旦被驗(yàn)證,就會(huì)對(duì)該虛擬主機(jī)下的所有Web應(yīng)用程序有效,而不用每個(gè)應(yīng)用程序單獨(dú)驗(yàn)證。
  ● 如果用戶從一個(gè)Web應(yīng)用中退出,那么所有Web應(yīng)用程序中的session都會(huì)失效。
  ● 使用SSO需要客戶環(huán)境支持cookies。

Single Sign On特性的實(shí)現(xiàn)是通過(guò)Tomcat的Value框架來(lái)完成的。

如果您要了解Single Sign On設(shè)置的更多信息,可以查閱 這里
User Web Applications

從前面給出的 體系結(jié)構(gòu)圖 中可以看出,User Web Applications特性只在Host中都有支持。

許多Web服務(wù)器都可以處理如下形式的請(qǐng)求:

http://www.mycompany.com:8080/~craigmcc

其中craigmcc為系統(tǒng)的一位用戶名。具體的處理過(guò)程和操作系統(tǒng)相關(guān)。

在類(lèi)Unix或Linux等操作系統(tǒng)下配置方法如下:

<Host name="localhost" ...>
...
<Listener className="org.apache.catalina.startup.UserConfig"
directoryName="public_html"
userClass="org.apache.catalina.startup.PasswdUserDatabase"/>
...
</Host>

在Windows等操作系統(tǒng)下配置方法如下:

<Host name="localhost" ...>
...
<Listener className="org.apache.catalina.startup.UserConfig"
directoryName="public_html"
homeBase="c:\Homes"
userClass="org.apache.catalina.startup.HomesUserDatabase"/>
...
</Host>

這兩種配置最主要的區(qū)別就是發(fā)現(xiàn)用戶和為用戶匹配路徑。PasswdUserDatabase依據(jù)/etc/passwd發(fā)現(xiàn)用戶而HomesUserDatabase依據(jù)homeBase="c:\Homes"發(fā)現(xiàn)用戶。

User Web Applications是通過(guò)Listener(org.apache.catalina.startup.UserConfig)的方式實(shí)現(xiàn)的。即在Host啟動(dòng)時(shí)該Listener會(huì)被執(zhí)行,它會(huì)為每一個(gè)發(fā)現(xiàn)的用戶構(gòu)建對(duì)應(yīng)Context。

使用User Web Applications時(shí)需要考慮以下的一些問(wèn)題:

  ● 依據(jù)DefaultContext來(lái)設(shè)置為每一個(gè)用戶建立Context
  ● 可以使用多個(gè)Listener元素(在這么做之前您最好查閱一下UserConfig)
  ● 用戶所對(duì)應(yīng)的目錄應(yīng)該具有讀寫(xiě)權(quán)限

Automatic Context Configuration

從前面給出的 體系結(jié)構(gòu)圖 中可以看出,Automatic Context Configuration特性只在Context中都有支持。

如果使用標(biāo)準(zhǔn)的Context實(shí)現(xiàn),當(dāng)Catalina啟動(dòng)或Web應(yīng)用裝載時(shí),會(huì)按如下的步驟自動(dòng)進(jìn)行設(shè)置:

  ● 如果沒(méi)有指定Loader元素,那么一個(gè)標(biāo)準(zhǔn)的Loader將會(huì)被設(shè)置
  ● 如果沒(méi)有指定Manager元素,那么一個(gè)標(biāo)準(zhǔn)的Manager將會(huì)被設(shè)置
  ● 如果沒(méi)有指定Resources元素,那么一個(gè)標(biāo)準(zhǔn)的Resources將會(huì)被設(shè)置
  ● 處理conf/web.xml文件
  ● 處理/WEB-INF/web.xml文件
  ● 如果設(shè)置了security constraints,那么一個(gè)對(duì)應(yīng)的Authenticator會(huì)被創(chuàng)建

Context Parameters

從前面給出的 體系結(jié)構(gòu)圖 中可以看出,Context Parameters特性只在Context中有支持。

如下的兩種配置等價(jià),都是為Web配置初始參數(shù):

<Context ...>
...
<Parameter name="companyName" value="My Company, Incorporated" override="false"/>
...
</Context>

<context-param>
<param-name>companyName</param-name>
<param-value>My Company, Incorporated</param-value>
</context-param>

Environment Entries

從前面給出的 體系結(jié)構(gòu)圖 中可以看出,Environment Entries特性在GlobalNamingResources和Context中都有支持。

如下的兩種配置等價(jià),都是為配置environment entry resources:

<GlobalNamingResources ...>
...
<Environment name="maxExemptions" value="10" type="java.lang.Integer" override="false"/>
...
</GlobalNamingResources>

<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>

這里使用GlobalNamingResources表示environment entry resources對(duì)于所有Web應(yīng)用程序可見(jiàn)。如果換成Context則表示只對(duì)相應(yīng)Web應(yīng)用程序可見(jiàn)。

Resource Definitions

從前面給出的 體系結(jié)構(gòu)圖 中可以看出,Resource Definitions特性在GlobalNamingResources和Context中都有支持。

如下的兩種配置等價(jià),都是為定義Resource:

<GlobalNamingResources ...>
...
<Resource name="jdbc/EmployeeDB" auth="Container" type="javax.sql.DataSource"
description="Employees Database for HR Applications"/>
...
</GlobalNamingResources>

<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>

這里使用GlobalNamingResources表示Resource對(duì)于所有Web應(yīng)用程序可見(jiàn)。如果換成Context則表示只對(duì)相應(yīng)Web應(yīng)用程序可見(jiàn)。

Resource Links

從前面給出的 體系結(jié)構(gòu)圖 中可以看出,Resource Links特性在GlobalNamingResources和Context中都有支持。

ResourceLink 元素用來(lái)將資源從全局上下文(global context)中連接到每個(gè)Web應(yīng)用的上下文(per-web-application contexts)中。使用方式依據(jù)GlobalNamingResources和Context的不同分成兩種:

<DefaultContext>
<ResourceLink name="bean/MyBeanFactory" global="bean/MyBeanFactory" type="com.mycompany.MyBean"/>
</DefaultContext>

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

Transaction

從前面給出的 體系結(jié)構(gòu)圖 中可以看出,Transaction特性在GlobalNamingResources和Context中都有支持。

通過(guò)在JNDI中查詢java:comp/UserTransaction可以得到UserTransaction的引用。

Tomcat 體系結(jié)構(gòu)介紹 ZT


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 国产精品福利视频手机免费观看 | 97精品视频共享总站 | 国产91九色在线播放 | 久久综合亚洲 | 国产成人精品精品欧美 | 亚洲 欧美 精品 | 99久久免费国产精品 | 欧美伦理一区 | 久久这里精品青草免费 | 国产一级毛片网站 | 国产在线观看自拍 | 久久久四虎成人永久免费网站 | 精品一区二区三区影片 | 一区二区三区在线免费观看视频 | 久久国产精品一区二区 | h片在线观看 | 日本免费人成黄页网观看视频 | 毛片b| 在线亚洲日产一区二区 | 波多野结衣手机视频一区 | 热久久这里只有精品 | 看看的在线视频国产 | 精品色| 国产精品久久自在自2021 | 久久国产精品最新一区 | 免费看欧美一级片 | 久久在精品线影院精品国产 | 国产欧美另类第一页 | 日本黄大片影院一区二区 | 四房婷婷在线视频播放 | 伊人精品视频 | 看毛片网| 伊人亚洲 | 亚洲国产www | 国产精品亚洲玖玖玖在线靠爱 | 伊人精品 | www.伊人网| 欧美成人片在线 | 中国第一毛片 | 国产成人h综合亚洲欧美在线 | 一级片久久 |