【Tomcat】Tomcat的類加載機制
在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包文件,當放置了多份,就可能導致 多個應用間 出現類加載不到的錯誤。
【Tomcat】Tomcat的類加載機制