1. 程式人生 > >【Tomcat】Tomcat的類加載機制

【Tomcat】Tomcat的類加載機制

圖片 -a content 部署 編譯 img webapp tro clas

在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文件中的classWEB-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】Tomcat的類加載機制