tomcat類加載機制
阿新 • • 發佈:2018-12-24
eba 模型 load 常見 classpath 環境 sse 不同 system
Web應用程序目錄中的所有解壓縮的類和資源,以及Web應用程序
1.1 tomcat類加載機制
1.1.1 概覽
Bootstrap
|
System
|
Common
/ \
Webapp1 Webapp2 ...
備註:這裏的加載模型和jvm的三層classloader有區別。總體思想類似。
1.1.2 各層加載器
1.1.2.1 Bootstrap
此類加載器包含Java虛擬機提供的基本運行時類。
加載java/jre/lib 和 java/jre/lib/ext. 相當於jvm的bootstrap和extensions class loader。
1.1.2.2 System
此類加載器通常從CLASSPATH
環境變量的內容初始化。Tomcat內部類和Web應用程序都可以看到所有這些類。
加載下面路徑的jar包
- $CATALINA_BASE/bin
- $CATALINA_HOME/bin
1.1.2.3 Common
此類加載器包含對Tomcat內部類和所有Web應用程序都可見的其他類。
加載下面路徑的jar包
- $CATALINA_BASE/lib
- $CATALINA_HOME/lib
1.1.2.4 WebAppX
為部署在單個Tomcat實例中的每個Web應用程序創建一個類加載器。/WEB-INF/classes
/WEB-INF/lib
目錄下的JAR文件中的類和資源,都對此Web應用程序可見,但對其他應用程序不可見。
Web應用程序類加載器與默認Java委托模型不同。當從web應用的(webappX類加載器)加載class的請求被處理時,這個類加載器會首先嘗試從本地資源自己加載這個類,而不是先委托給父類加載器。
因此,從Web應用程序的角度來看,類或資源加載按以下順序查找以下存儲庫:
- JVM的Bootstrap類
- 您的Web應用程序的 / WEB-INF /classes
- 您的Web應用程序的 /WEB-INF/lib/*.jar
- 系統類加載器類(如上所述 System)
- 常見的類加載器類(如上所述,Common)
tomcat類加載機制