在Tomcat中主要有以下幾種類載入器:(圖片來自網路) tomcat啟動時,會創建幾種類載入器: 1 Bootstrap 引導類載入器 載入JVM啟動所需的類,以及標準擴展類,位於jre/lib/ext下。 2 System 系統類載入器 載入tomcat啟動的類,比如bootstrap.jar, ...
在Tomcat中主要有以下幾種類載入器:(圖片來自網路)
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包文件,當放置了多份,就可能導致 多個應用間 出現類載入不到的錯誤。