摘要:所有這些類對于和應用程序都是可見的。或者日志實現類。其中包括稱為的的增強類以及由內部使用的庫的軟件包重命名副本。這個類加載器搜索的位置由中的屬性定義。中的所有其他類加載器都遵循通常的代理模式。
最好先了解Java的雙親委派機制再看這篇文章。整體架構
Bootstrap | System | Common / Webapp1 Webapp2 ...類加載器定義
Bootstrap 這個類加載器包含Java虛擬機提供的基本運行時類,以及來自System Extensions目錄
($JAVA_HOME/jre/lib/ext)中的JAR文件的所有類。注意:有些JVM可能將其實現為多個類加載器,比如HotSpot就分為啟動類加載器(Bootstrap ClassLoader)和擴展類加載器(Extension ClassLoader)。
System 這個類加載器通常是通過CLASSPATH環境變量的內容初始化的。 所有這些類對于Tomcat和Web應用程序都是可見的。但是,標準Tomcat啟動腳本($CATALINA_HOME/bin/catalina.sh或%CATALINA_HOME%incatalina.bat)完全忽略了CLASSPATH環境變量本身的內容,而是從以下存儲庫(repositories)構建System類加載器:
$CATALINA_HOME/bin/bootstrap.jar:包含用于初始化Tomcat服務器的main()`方法以及它所依賴的類加載器實現類。
$CATALINA_BASE/bin/tomcat-juli.jar或者$CATALINA_HOME/bin/tomcat-juli.jar:日志實現類。其中包括稱為Tomcat JULI的java.util.loggingAPI的增強類以及由Tomcat內部使用的ApacheCommons Logging庫的軟件包重命名副本。
Common
這個類加載器包含了對Tomcat內部類和所有Web應用程序都可見的其他類。通常,應用程序類別不應放置在此處。這個類加載器搜索的位置由$CATALINA_BASE/conf/catalina.properties中的common.loader屬性定義。默認設置將按照它們列出的順序搜索以下位置:
$CATALINA_BASE/lib下沒打包的classes和資源文件
$CATALINA_BASE/lib下的jar
$CATALINA_HOME/lib下沒打包的classes和資源文件
$CATALINA_HOME/lib下的jar
WebappX 為每個部署在單個Tomcat實例中的Web應用程序創建類加載器。
Web應用程序的/WEB-INF/classes目錄中的所有未打包的類和資源,以及Web應用程序的/WEB-INF/lib目錄下的JAR文件中的類和資源都可以被此Web應用程序訪問,但不能訪問到其他的。
如上所述,Web應用程序類加載器與默認的Java委托模型不同(即雙親委派)。當處理從Web應用程序的WebappX類加載器加載類的請求時,該類加載器將首先在本地存儲庫中查找,而不是在查找之前進行委托。 但是有例外,作為JRE基類的一部分的類不能被覆蓋。例如J2SE 1.4+中的XML解析器組件,以及Java 8將會使用的類。最后,包含Servlet API類的任何JAR文件將被類加載器顯式忽略 - 你的Web應用程序中不應該包含這些類。 Tomcat中的所有其他類加載器都遵循通常的代理模式。
因此,從Web應用程序的角度來看,類或資源加載按以下順序在以下存儲庫中查找:
Bootstrap classes of your JVM
web應用的/WEB-INF/classes
web應用的/WEB-INF/lib/*.jar
System class loader classes (如上所述)
Common class loader classes (如上所述)
如果Web應用程序類加載器配置為,那么順序將變為:
Bootstrap classes of your JVM
System class loader classes (如上所述)
Common class loader classes (如上所述)
web應用的/WEB-INF/classes
web應用的/WEB-INF/lib/*.jar
資料
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/68659.html
摘要:經典的基礎面試題集錦經典的基礎面試題集錦,歡迎收藏和分享。類變量或者說靜態變量是通過這個關鍵字來聲明的。非靜態變量在每一個對象實例上都有單獨的一份值。對象允許程序和數據進行封裝,以減少潛在的干涉。 經典的Java基礎面試題集錦 經典的Java基礎面試題集錦,歡迎收藏和分享。 問題:如果main方法被聲明為private會怎樣? 答案:能正常編譯,但運行的時候會提示main方法不是pub...
閱讀 1216·2023-04-26 00:47
閱讀 3569·2021-11-16 11:53
閱讀 796·2021-10-08 10:05
閱讀 2740·2021-09-22 15:19
閱讀 2982·2019-08-30 15:55
閱讀 2756·2019-08-29 16:55
閱讀 2922·2019-08-29 15:20
閱讀 1112·2019-08-23 16:13