摘要:所有這些類(lèi)對(duì)于和應(yīng)用程序都是可見(jiàn)的?;蛘呷罩緦?shí)現(xiàn)類(lèi)。其中包括稱為的的增強(qiáng)類(lèi)以及由內(nèi)部使用的庫(kù)的軟件包重命名副本。這個(gè)類(lèi)加載器搜索的位置由中的屬性定義。中的所有其他類(lèi)加載器都遵循通常的代理模式。
最好先了解Java的雙親委派機(jī)制再看這篇文章。整體架構(gòu)
Bootstrap | System | Common / Webapp1 Webapp2 ...類(lèi)加載器定義
Bootstrap 這個(gè)類(lèi)加載器包含Java虛擬機(jī)提供的基本運(yùn)行時(shí)類(lèi),以及來(lái)自System Extensions目錄
($JAVA_HOME/jre/lib/ext)中的JAR文件的所有類(lèi)。注意:有些JVM可能將其實(shí)現(xiàn)為多個(gè)類(lèi)加載器,比如HotSpot就分為啟動(dòng)類(lèi)加載器(Bootstrap ClassLoader)和擴(kuò)展類(lèi)加載器(Extension ClassLoader)。
System 這個(gè)類(lèi)加載器通常是通過(guò)CLASSPATH環(huán)境變量的內(nèi)容初始化的。 所有這些類(lèi)對(duì)于Tomcat和Web應(yīng)用程序都是可見(jiàn)的。但是,標(biāo)準(zhǔn)Tomcat啟動(dòng)腳本($CATALINA_HOME/bin/catalina.sh或%CATALINA_HOME%incatalina.bat)完全忽略了CLASSPATH環(huán)境變量本身的內(nèi)容,而是從以下存儲(chǔ)庫(kù)(repositories)構(gòu)建System類(lèi)加載器:
$CATALINA_HOME/bin/bootstrap.jar:包含用于初始化Tomcat服務(wù)器的main()`方法以及它所依賴的類(lèi)加載器實(shí)現(xiàn)類(lèi)。
$CATALINA_BASE/bin/tomcat-juli.jar或者$CATALINA_HOME/bin/tomcat-juli.jar:日志實(shí)現(xiàn)類(lèi)。其中包括稱為Tomcat JULI的java.util.loggingAPI的增強(qiáng)類(lèi)以及由Tomcat內(nèi)部使用的ApacheCommons Logging庫(kù)的軟件包重命名副本。
Common
這個(gè)類(lèi)加載器包含了對(duì)Tomcat內(nèi)部類(lèi)和所有Web應(yīng)用程序都可見(jiàn)的其他類(lèi)。通常,應(yīng)用程序類(lèi)別不應(yīng)放置在此處。這個(gè)類(lèi)加載器搜索的位置由$CATALINA_BASE/conf/catalina.properties中的common.loader屬性定義。默認(rèn)設(shè)置將按照它們列出的順序搜索以下位置:
$CATALINA_BASE/lib下沒(méi)打包的classes和資源文件
$CATALINA_BASE/lib下的jar
$CATALINA_HOME/lib下沒(méi)打包的classes和資源文件
$CATALINA_HOME/lib下的jar
WebappX 為每個(gè)部署在單個(gè)Tomcat實(shí)例中的Web應(yīng)用程序創(chuàng)建類(lèi)加載器。
Web應(yīng)用程序的/WEB-INF/classes目錄中的所有未打包的類(lèi)和資源,以及Web應(yīng)用程序的/WEB-INF/lib目錄下的JAR文件中的類(lèi)和資源都可以被此Web應(yīng)用程序訪問(wèn),但不能訪問(wèn)到其他的。
如上所述,Web應(yīng)用程序類(lèi)加載器與默認(rèn)的Java委托模型不同(即雙親委派)。當(dāng)處理從Web應(yīng)用程序的WebappX類(lèi)加載器加載類(lèi)的請(qǐng)求時(shí),該類(lèi)加載器將首先在本地存儲(chǔ)庫(kù)中查找,而不是在查找之前進(jìn)行委托。 但是有例外,作為JRE基類(lèi)的一部分的類(lèi)不能被覆蓋。例如J2SE 1.4+中的XML解析器組件,以及Java 8將會(huì)使用的類(lèi)。最后,包含Servlet API類(lèi)的任何JAR文件將被類(lèi)加載器顯式忽略 - 你的Web應(yīng)用程序中不應(yīng)該包含這些類(lèi)。 Tomcat中的所有其他類(lèi)加載器都遵循通常的代理模式。
因此,從Web應(yīng)用程序的角度來(lái)看,類(lèi)或資源加載按以下順序在以下存儲(chǔ)庫(kù)中查找:
Bootstrap classes of your JVM
web應(yīng)用的/WEB-INF/classes
web應(yīng)用的/WEB-INF/lib/*.jar
System class loader classes (如上所述)
Common class loader classes (如上所述)
如果Web應(yīng)用程序類(lèi)加載器配置為,那么順序?qū)⒆優(yōu)椋?/pre> Bootstrap classes of your JVM
System class loader classes (如上所述)
Common class loader classes (如上所述)
web應(yīng)用的/WEB-INF/classes
web應(yīng)用的/WEB-INF/lib/*.jar
資料
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/68659.html
摘要:清理上一次執(zhí)行創(chuàng)建的文件處理資源文件編譯代碼執(zhí)行單元測(cè)試文件創(chuàng)建拷貝到本地的倉(cāng)庫(kù)下面發(fā)布生成文檔將工程所有文檔生成網(wǎng)站,生成的網(wǎng)站界面默認(rèn)和的項(xiàng)目站點(diǎn)類(lèi)似,但是其文檔用格式寫(xiě)的,目前不支持,需要用其他插件配合才能支持。 前言 本文可以幫助你加深對(duì)Maven的整體認(rèn)識(shí),不是一篇基礎(chǔ)文章。如果你現(xiàn)在還沒(méi)有用 Maven 跑過(guò) HelloWorld,那么本文可能不適合你。 一、Maven簡(jiǎn)介...
摘要:經(jīng)典的基礎(chǔ)面試題集錦經(jīng)典的基礎(chǔ)面試題集錦,歡迎收藏和分享。類(lèi)變量或者說(shuō)靜態(tài)變量是通過(guò)這個(gè)關(guān)鍵字來(lái)聲明的。非靜態(tài)變量在每一個(gè)對(duì)象實(shí)例上都有單獨(dú)的一份值。對(duì)象允許程序和數(shù)據(jù)進(jìn)行封裝,以減少潛在的干涉。 經(jīng)典的Java基礎(chǔ)面試題集錦 經(jīng)典的Java基礎(chǔ)面試題集錦,歡迎收藏和分享。 問(wèn)題:如果main方法被聲明為private會(huì)怎樣? 答案:能正常編譯,但運(yùn)行的時(shí)候會(huì)提示main方法不是pub...
閱讀 1295·2023-04-26 00:47
閱讀 3625·2021-11-16 11:53
閱讀 859·2021-10-08 10:05
閱讀 2818·2021-09-22 15:19
閱讀 3035·2019-08-30 15:55
閱讀 2815·2019-08-29 16:55
閱讀 3011·2019-08-29 15:20
閱讀 1171·2019-08-23 16:13