看完了Java類裝載器,我們再來看看應(yīng)用服務(wù)器(Tomcat)對類加載器的使用,每個應(yīng)用服務(wù)器都有一套自己的類加載器體系,從而與Java的類加載器區(qū)別開以達(dá)到自己與應(yīng)用程序隔離的目的. Tomcat的類加載器體系為:Bootstrap--->System--->Common---->Catalina,Shared Shared------>Webapp1,Webapp2 ..... 下面是對每個類加載器的定義: 1.Bootstrap加載器在這里是Java里的Bootstrap和ExtClassLoader的總稱,負(fù)責(zé)加載Java核心包的類,和<Java_Home>/jre/lib/ext目錄下的類.通常我們開發(fā)人員并不關(guān)心.我想只要是java程序這些肯定是必要的 2.System就是系統(tǒng)加載器,一般是AppClassLoader,負(fù)責(zé)加載ClassPath環(huán)境變量設(shè)置目錄下的值,這個我們開發(fā)人員會非常關(guān)注,但是在Tomcat里面,雖然用AppClassLoader類加載器,但我們設(shè)置的ClassPath對它沒有影響(如果有影響,那就麻煩了,將會導(dǎo)致Tomcat運行不穩(wěn)定),為什么呢,因為tomcat每次啟動的時候都會在命令行窗口中都會重新設(shè)置Classpath值為:<catalina_Home>/bin/bootstrap.jar和<java_Home>/lib/tools.jar,所以這里面的類一般對應(yīng)用程序不可見的.除非你設(shè)置了 3.Common類加載器負(fù)責(zé)加載TomcatHOME/common/class下的.Class文件和common/lib中的jar包,這些類可以被Tomcat內(nèi)核和每個Web應(yīng)用程序都可以看見,一般放公用的一些重要的類,如servlet.jar等 4.Catalina類加載器從server/classes和server/lib下加載類,Catalina加載的類只對Tomcat服務(wù)器內(nèi)核可見,對Web應(yīng)用程序不可見,對于運行Tomcat內(nèi)核的線程,它的上下文類加載器就是Catalina類加載器 5.Shared類加載器負(fù)責(zé)從share/classes和share/lib中加載類,它加載的類只對所有Web應(yīng)用程序有效,對Tomcat不可見. 6.WebappX類加載器負(fù)責(zé)加載Web應(yīng)用程序的/web-INF/classes和lib目錄下的類,只對當(dāng)前Web應(yīng)用程序有效,對其他Web應(yīng)用程序無效,對于運行每個Web應(yīng)用程序的線程,他們的上下文類加載器就是它們各自的WebappX類加載器 總結(jié):從以上6點可以看出Tomcat提供了完整的類加載器體系,并且分工非常的明確,因而非常訪問我們進(jìn)行Web應(yīng)用程序的設(shè)置和部署. |
|