首頁 > Java > java教程 > 主體

Tomcat中的幾種類別載入器介紹

零下一度
發布: 2017-07-24 09:26:51
原創
2500 人瀏覽過

         學習tomcat類別載入器,首先得先看下JVM提供了幾種類載入器,畢竟tomcat類載入器是依賴JVM類載入器的。

         JVM類載入器:引導類別載入器(bootstrapclassloader)、擴充類別載入器(extension classloader)、系統類別載入器(又稱為應用類別載入器,system classloader)。引導類別載入器是擴充類別載入器的父載入器,而擴充類別載入器又是系統類別載入器的父載入器。

(1) Bootstrap Classloader 是JVM 利用JNI的方式採用C語言實作的(即它並不是Java.lang.ClassLoader的子類別)。負責載入%JAVA_HOME%\lib下的類別庫或是由-Xbootclasspath選項或使用-D選項指定sun.boot.class.path系統屬性指定的類別。

(2) Extension ClassLoader 由sun.misc.Launcher$ExtClassLoader實現,負責載入%JAVA_HOME%\jre\lib\ext中的類別庫或是由系統變數java.ext.dirs指定的類別庫。

(3) System ClassLoader 由sum.misc.Launcher$AppClassLoader實現,負責載入java應用程式涉及到的類別。載入器可以透過ClassLoader.getSystemClassLoader()來取得


#tomcat啟動時,會建立幾個類別載入器:

# 1 Bootstrap 引導類別載入器 

載入JVM啟動所需的類,以及標準擴充類,位於jre/lib/ext下。

2 System 系統類別載入器 

載入tomcat啟動的類,例如bootstrap.jar,通常在catalina.bat或catalina.sh中指定。位於CATALINA_HOME/bin下。

3 Common 通用類別載入器 

載入tomcat使用以及應用通用的一些類,位於CATALINA_HOME/lib下,例如servlet-api.jar

4 webapp 應用程式類別載入器

每個應用程式在部署後,都會建立一個唯一的類別載入器。此類別載入器會載入位於 WEB-INF/lib下的jar檔案中的class 和 WEB-INF/classes下的class檔案

當應用程式需要到某個類別時,則會依照下面的順序進行類別載入

1 使用bootstrap引導類別載入

2 使用system系統類別載入器載入

3 使用應用程式類別載入器在WEB-INF/classes中載入

4 使用應用程式類別載入器在WEB-INF/lib中載入

5 使用common類別載入器在CATALINA_HOME/lib中載入

 還有一點要講下的是java檔案放在Eclipse中的src資料夾下會優先jar套件中的class:

這是因為Eclipse中的src資料夾中的檔案java以及webContent中的JSP都會在tomcat啟動時,被編譯成class檔案放在 WEB-INF/class 中。而Eclipse外部引用的jar包,則相當於放在 WEB-INF/lib 中。因此肯定是 java檔或JSP檔編譯出的class優先載入

另外還需要注意在 CATALINA_HOME/lib 以及 WEB-INF/lib 中放置了不同版本的jar包,此時就會導致某些情況下報載入不到類別的錯誤。

還有如果多個應用程式使用相同jar套件文件,當放置了多份,就可能導致 多個應用程式間 出現類別載入不到的錯誤。

以上是Tomcat中的幾種類別載入器介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板