明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

Tomcat4.1.x以上中類的加載

[摘要]Tomcat4.1.x以上中類的加載快速開始1.某一個(gè)特殊的web應(yīng)用用到的類或者資源,應(yīng)該把它解壓縮放在這個(gè)web應(yīng)用的web-inf/classes下,或者把jar文件放在這個(gè)web應(yīng)用的web...
Tomcat4.1.x以上中類的加載
快速開始
1.某一個(gè)特殊的web應(yīng)用用到的類或者資源,應(yīng)該把它解壓縮放在這個(gè)web應(yīng)用的web-inf/classes下,或者把jar文件放在這個(gè)web應(yīng)用的web-inf/lib下
2.很多web應(yīng)用公用的類或者資源,應(yīng)該把它解壓縮放在%CATALINA_HOME%/shared/classes下(如果是4.0.x則是%CATALINA_HOME%/classes),或者把jar文件放在%CATALINA_HOME%/shared/lib下(如果是4.0.x則是%CATALINA_HOME%/lib)
預(yù)覽
象很多應(yīng)用程序服務(wù)器一樣,tomcat4.x安裝了一種特殊的class loader(這個(gè)類繼承了抽象類java.lang.ClassLoader),所以它允許容器的不同部分和應(yīng)用程序訪問相應(yīng)的不同的資源。
在java2(jdk1.2以上)環(huán)境中,class loader被抽象成一個(gè)樹型。當(dāng)一個(gè)class loader被請(qǐng)求裝載一個(gè)特殊的類或資源時(shí),它把這個(gè)請(qǐng)求委派給自己的上一層,當(dāng)上一層沒有找到這個(gè)類或資源時(shí),它才在自己的范圍內(nèi)查找并加載。Web 應(yīng)用程序類的裝載有細(xì)微的不同,但是主要的原理都是一樣的。
當(dāng)tomcat4啟動(dòng)時(shí),它建立如下所示的樹型關(guān)系。
Bootstrap

System

Common
/ \
Catalina Shared
/ \
Webapp1 Webapp2 ...
詳細(xì)解釋
當(dāng)tomcat初始化時(shí),它建立了如上圖所示的class loader結(jié)構(gòu)。
Bootstrap
這個(gè)class loader 包含了基本的運(yùn)行時(shí)的類,和一些擴(kuò)展類(在%JAVA_HOME%/jre/lib/ext 目錄下),這些類都由jvm自動(dòng)加載。
System
這個(gè)class loader 通常用來(lái)初始化classpath環(huán)境變量的內(nèi)容,所有的這些類對(duì)tomcat內(nèi)在的類和所有的web應(yīng)用程序是可見的。但是標(biāo)準(zhǔn)的tomcat4.x啟動(dòng)腳本(%CATALINA_HOME%/bin/catalina.sh 或者 %CATALINA_HOME%/bin/catalina.bat)忽略classpath,而叢下面的地方裝載
1.%CATALINA_HOME%/bin/bootstrap.jar-包含了main()方法初始化tomcat4.x Server,而且class loader依靠它實(shí)現(xiàn)。
2.%JAVA_HOME%/lib/tools.jar-包含了javac 編譯程序,它可以把jsp頁(yè)面轉(zhuǎn)換為servlet。
Common
這個(gè)class loader加載的類對(duì)tomcat內(nèi)在的類和所有的web應(yīng)用程序是可見的,通常web應(yīng)用程序的類不應(yīng)該放在這里。
解壓后的類或資源放在%CATALINA_HOME%/common/classes 目錄下,沒有解壓的類或資源的jar文件放在
%CATALINA_HOME%/commons/endorsed 和%CATALINA_HOME%/common/lib directories 目錄下。這里默認(rèn)的包含了如下資源和類:
1.jndi.jar - The Java Naming and Directory Interface API classes (這個(gè)包僅僅在jdk1.2才會(huì)被加載,jdk1.3或更高版本由jvm自動(dòng)加載)。
2.naming-common.jar – tomcat實(shí)現(xiàn)的jndi 描述內(nèi)存中的命名上下文。
3.naming-resources.jar – tomcat實(shí)現(xiàn)的特殊的jndi用來(lái)表現(xiàn)web應(yīng)用程序的靜態(tài)資源。
4.Servlet.jar – Servlet 和 jsp 用到的類。
5.Xserces.jar - xml解析器默認(rèn)情況下對(duì)tomcat內(nèi)在的類和所有的web應(yīng)用程序是可見的,如果要對(duì)一個(gè)特殊的web應(yīng)用程序用特殊的xml解析器,可以把這個(gè)解析器放在/web-inf/lib中。
Catalina
這個(gè)class loader 為tomcat自己初始化所有的類和資源,這些類和資源對(duì)web應(yīng)用程序來(lái)說(shuō)都是不可見的,所有的解壓縮的類和資源都在%CATALINA_HOME%/server/classes目錄下,所有的壓縮的類和資源的jar文件都在%CATALINA_HOME%/server/lib目錄下。
Shared
這個(gè)類裝載器載入的類和資源能對(duì)所有的web應(yīng)用程序可見(如果tomcat的內(nèi)置類也要用到這些,則應(yīng)該把這些放入到common裝載器中)。
沒有壓縮的類和資源放在%CATALINA_HOME%/shared/classes目錄中,壓縮的類和資源的jar文件放在%CATALINA_HOME%/lib(為了和前面的版本兼容)或者%CATALINA_HOME%/shared/lib目錄中。通常包含了以下幾個(gè)默認(rèn)包:
1.jasper-compiler.jar - 編譯把jsp轉(zhuǎn)換成servlet并編譯他們所用到的類。
2.jasper-runtime.jar - 運(yùn)行由jsp編譯成servlet后的class要用到的環(huán)境。
3.naming-factory.jar - 為web應(yīng)用程序提供默認(rèn)的jndi服務(wù)所要用到的類。
WebappX
Tomcat實(shí)例為每一個(gè)web應(yīng)用程序?qū)崿F(xiàn)一個(gè)webapp class loader,所有的解壓縮類和資源都放在這個(gè)web應(yīng)用程序的/web-inf/classes目錄下,所有的類和資源的壓縮文件jar都放在這個(gè)web應(yīng)用程序的/web-inf/lib目錄下,這些類和資源只對(duì)這個(gè)web應(yīng)用程序是可見的,對(duì)其它的web應(yīng)用程序都是不可見的。
和前面不同的是,當(dāng)一個(gè)web應(yīng)用程序請(qǐng)求加載一個(gè)類時(shí),它首先在這個(gè)web class loader范圍內(nèi)加載,而不是和通用的規(guī)則一樣先從父class loader開始加載。
因此web應(yīng)用程序類的加載是按一下的順序的
1.這個(gè)應(yīng)用程序的/WEB-INF/classes
2.這個(gè)應(yīng)用程序的/WEB-INF/lib/*.jar
3.JVM 的Bootstrap classes r
4.System class loader classses (見上面的描述)
5.%CATALINA_HOME%/common/classes
6.%CATALINA_HOME%/common/endorsed/*.jar
7.%CATALINA_HOME%/common/lib/*.jar
8.%CATALINA_HOME%/shared/classes
9.%CATALINA_HOME%/shared/lib/*.jar