[譯]Tomcat8類載入機制

來源:互聯網
上載者:User

標籤:style   blog   http   color   java   使用   io   strong   

原文直通車:Class Loader HOW-TO

 

目錄
  • 概述
  • 類載入器的定義
  • XML解析器和Java
  • 運行在security manager下
概述

  和其他伺服器程式類似,Tomcat也定義了一些類載入器(實現了java.lang.ClassLoader的類)用以實現讓Tomcat的容器的不同部分、運行

在tomcat容器裡的web應用都有各自不同的類和資源的載入路徑。該機制用以提供Servlet2.4規範的第9.4章和9.6章的所規定的功能。

  在Java環境下,類載入器被組織成了父-子樹狀的結構。一般情況下,讓一個類載入器要載入一個類或者資源的時候,該載入器首先詢問自己

的父載入其能否載入該類,依次詢問到樹根節點,只有當所有的父載入器都不能載入該類的時候,該載入器才會嘗試載入該類。但是web應用

的類載入機制跟傳統的java類載入機制有少許的不同,我們下面會進行介紹,但是總體的原則是一樣的。

  Tomcat在啟動的時候會建立一系列的類載入器,這些類載入器被組織成所示的父-子樹狀結構,父載入器,子類載入器在下:

      Bootstrap          |       System          |       Common       /       Webapp1   Webapp2 ...

  下面我們就討論上述每個類載入器的特質以及他們鎖載入的資源和類的載入路徑的位置。

類載入器的定義

  正如提到的那樣,Tomcat在初始化的時候就會建立如下類載入器:

  • Bootstrap類載入器 : 該類載入器會載入JVM提供的基本的java運行時所依賴的類,而且還會載入JAVA_HOME/jre/lib/ext目錄下的所有的類。
    注意:不同的JVM實現方式可能會有不同,比如有些JVM實現的時候會把Bootstrap類載入器實現的功能分成兩個類載入器來實現(一般把它們
    稱為bootstrap類載入器和Extenstion類載入器);或者有些JVM的實現中乾脆沒有定義bootstrap類載入器(內建實現)

 

  • System類載入器:一般情況下這個類載入器是從CLASSPATH環境變數來載入類和資源。該類載入器中所載入的類是可以被Tomcat的中的類或
    者web應用中的類使用。但是Tomcat的啟動指令碼(位於$CATALINA_HOME/bin/catalina.sh或者$CATALINA_HOME/bin/catalina.bat)完全
    忽視CLASSPATH環境變數所指定的類載入路徑。最終Tomcat會把該類載入器的的載入路徑設定為如下幾個
    1. $CATALINA_HOME/bin/bootstrap.jar --該jar檔案包含一個main()方法用以初始化Tomcat伺服器和Tomcat所用的類載入的實作類別
    2. $CATALINA_HOME/bin/tomcat-juli.jar或者$CATALINA_BASE/bin/tomcat-juli.jar--日誌實現包。這個jar包的主要作用是包含了增強
       的java.util.logging API的實現,也被稱為Tomcat Juli。還包括了一個被重新命名的Apache Commons Logging的依賴庫
       如果tomcat-juli.jar在$CATALINA_BASE/bin和$CATALINA_HOME/bin都出現的話優先使用$CATALINA_BASE/bin下所指定的。這個特性可
       一用來定製Tomcat執行個體的日誌特性
    3. $CATALINA_HOME/bin/commons-daemon.jar – 這個jar包裡面的class都是出自Apache Commons Daemon項目。這個jar包在catalina.bat
        或者catalina.sh指令碼中並沒有加到CLASSPATH中,但是這個jar包在bootstrap.jar的mainnifest檔案中有對他的引用。

 

  • Common類載入器:--該類載入器所載入的類對Tomcat的內部類和web應用的都是可見的
      一般情況下,web應用的class檔案最好不要放到這裡。該類載入的載入類的路徑是在$CATALINA_BASE/conf/catalina.properties檔案中的
    common.loader屬性所指定。不人為指定的話預設配置會搜尋如下路徑:
    1. $CATALINA_BASE/lib下的沒有打包的class或者resources檔案
    2. $CATALINA_BASE/lib下的jar檔案
    3. $CATALINA_HOME/lib下的所有打包的class或者resources檔案
    4. $CATALINA_HOME/lib下的jar檔案

    預設情況下,改載入路徑下有如下jar包

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.