1. 程式人生 > >tomcat類加載機制

tomcat類加載機制

eba 模型 load 常見 classpath 環境 sse 不同 system

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應用程序目錄中的所有解壓縮的類和資源,以及Web應用程序/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類加載機制