tomcat context.xml文件配置作用

原文地址:http://segmentfault.com/q/1010000000155690


        簡而言之,JVM的classloader加載繼承關係分爲BootstarpClassLoader --> ExtClassLoader --> 

SystemClassLoader,應用的WebAppClassLoader繼承自SystemClassLoader,在加載具體某個類

時,一般會先委託給父類ClassLoader,當父類ClassLoader無法加載成功時,纔會再由子類ClassLoader

嘗試加載,這就是所謂的delegate機制。

        其次,Tomcat在jvm的ClassLoader機制上增加了幾個繼承層次。

SystemClassLoader --> CommonClassLoader -->(ServerClassLoader | SharedClassLoader --> 

WebAppClassLoader)。CommonClassLoader用來加載${CATALINA_HOME}/conf/catalina.properties中

common.loader配置目錄下的類文件,一般是用來加載${CATALINA_HOME}/lib下的文件。該loader加載

的類爲tomcat服務器和tomcat

        下面的所有webApp所共享。

        ServerClassLoader用來加載${CATALINA_HOME}/conf/catalina.properties中server.loader配置目錄

的類文件,一般是用來加載${CATALINA_HOME}/server下的文件。該loader加載的類爲tomcat服務器所獨

有核心類,tomcat下面的WebApp無法訪問。

        SharedClassLoader用來加載${CATALINA_HOME}/conf/catalina.properties中shared.loader配置目

錄下的類文件,一般是用來加載${CATALINA_HOME}/shared下的文件。該loader加載的類爲tomcat下

面的所有webApp所共享。WebAppClassLoader用來加載${CATALINA_HOME}/webapps/目錄下每個

WebApp應用的/WEB-INF/class,/WEB-INF/lib的類文件,每個WebApp對應一個WebAppClassLoader,

用來加載其所需要的類文件。

        最後,說一下delegate配置的意義。

        True,表示tomcat將遵循JVM的delegate機制,即一個WebAppClassLoader在加載類文件時,會

先遞交給SharedClassLoader加載,SharedClassLoader無法加載成功,會繼續向自己的父類委託,一

直到BootstarpClassLoader,如果都沒有加載成功,則最後由WebAppClassLoader自己進行加載。

        False,默認爲false表示將不遵循這個delegate機制,即WebAppClassLoader在加載類文件時,會優先自己嘗

試加載,如果加載失敗,纔會沿着繼承鏈,依次委託父類加載。

        在此說一下配置爲False需要注意的問題:一旦配置爲False,如果你在WebApp中自己定義了一個

Java.lang.String,則這個String類會有可能覆蓋掉jdk中的String類,這也許不是你想要的結果。另外對於

多個WebApp公用jar包,你可能會放到${CATALINA_HOME}/shared目錄中共享,但是一不小心在應用

的/WEB-INF/lib中也包含了一個同名的但版本不一致的jar的話,這就有可能會導致很多奇怪的問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章