Servlet容器的類加載器加載順序

在運行時,Servlet容器的類加載器先加載classes目錄下的類,再加載lib目錄下的JAR文件中的類。因此,如果兩個目錄下存在同名的類,classes目錄下的類具有優先權。

我們注意到Tomcat的安裝目錄下也有一個lib目錄,這個與Web應用中的lib目錄的區別在於:
Tomcat的lib子目錄:存放的JAR文件不僅能被Tomcat訪問,還能被所有在Tomcat中發佈的JavaWeb應用訪問。
JavaWeb應用的lib子目錄:存放的JAR文件只能被當前JavaWeb應用訪問。
假如Tomcat類加載器要加載一個MyClass的類,它會按照以下先後順序到各個目錄中去查找MyClass的class文件,直到找到爲止,如果所有目錄中都不存在MyClass.class的文件,則會拋出異常:
1、在JavaWeb應用的WEB-INF/classes中查找MyClass.class文件。
2、在JavaWeb應用的 WEB-INF/lib目錄下的JAR文件中查找MyClass.class文件。
3、在Tomcat的lib子目錄下直接查找MyClass.class文件。

4、在Tomcat的lib子目錄下JAR的文件中查找MyClass.class文件。


Note:
Tomcat6.x與Tomcat5.x的目錄結構有所區別。在Tomcat5.x版本中,Tomcat允許在server/lib目錄、common/lib和shared/lib目錄下存放JAR文件,這3個目錄的區別在於:
在server/lib目錄下的JAR文件只可被Tomcat訪問。
在shared/lib目錄下的JAR文件可以被所有的JavaWeb應用訪問,但不能被Tomcat訪問。
在common/lib目錄下的JAR文件可以被Tomcat和所有JavaWeb應用訪問。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章