Tomcat6 類(lèi)裝載器的實(shí)現(xiàn)都是通過(guò)繼承于JDK中的 java.lang.ClassLoader類(lèi)。
包括Bootstrap,System,Common和Webapp這四種類(lèi)加載器來(lái)實(shí)現(xiàn)不同目錄的類(lèi)文件裝載。 示例結(jié)構(gòu)如下: Bootstrap | System | Common / \ Webapp1 Webapp2 ... Bootstrap 類(lèi)裝載器: 它用于加載最基本的JVM運(yùn)行環(huán)境類(lèi),裝載JDK目錄下類(lèi)文件($JAVA_HOME/jre/lib/ext) 使用它的目的是以防一些JVM提供商實(shí)現(xiàn)時(shí),可能考慮某些原因會(huì)把部分的類(lèi)文件通過(guò)不同的多個(gè)類(lèi)加載加器加載,同時(shí)會(huì) 屏蔽一些類(lèi)加載讓?xiě)?yīng)用層的類(lèi)加載器訪問(wèn)到。 System 類(lèi)裝載器: 該類(lèi)裝載器根據(jù)JVM的CLASSPATH參數(shù)設(shè)置裝載類(lèi)文件,該類(lèi)裝載器對(duì)于Tomcat內(nèi)部的程序和應(yīng)用層的程序都是可見(jiàn)的。 注:目前tomcat5的啟動(dòng)腳本($CATALINA_HOME/bin/catalina.sh 或 %CATALINA_HOME%\bin\catalina.bat),會(huì)把全局環(huán)境變量CLASSPATH忽略。 而且通過(guò)下面的兩個(gè)類(lèi)庫(kù)來(lái)實(shí)現(xiàn)裝載設(shè)置: * $CATALINA_HOME/bin/bootstrap.jar 包含一個(gè)main()方法來(lái)初始化tomcat6服務(wù),并實(shí)例類(lèi)裝器所依賴(lài)的類(lèi)文件。 * $CATALINA_HOME/bin/tomcat-juli.jar 初始Jakarta commons logging API和 java.util.logging LogManager. Common 類(lèi)裝載器: 該類(lèi)裝載器對(duì)于Tomcat內(nèi)部的程序和應(yīng)用層的程序都是可見(jiàn)的. 當(dāng)然不太建議把應(yīng)用層的類(lèi)庫(kù)放到這里來(lái)加載。 所有$CATALINA_HOME/lib目錄下未壓縮的類(lèi)文件,資源和壓縮后Jar/zip文件都會(huì)補(bǔ)該類(lèi)裝載器加載。 Tomcat6默認(rèn)該目錄的類(lèi)文件有: * annotations-api.jar - JEE annotations classes. * catalina.jar - Implementation of the Catalina servlet container portion of Tomcat6. * catalina-ant.jar - Tomcat Catalina Ant tasks. * catalina-ha.jar - High availability package. * catalina-tribes.jar - Group communication package. * el-api.jar - EL 2.1 API. * jasper.jar - Jasper 2 Compiler and Runtime. * jasper-el.jar - Jasper 2 EL implementation. * jasper-jdt.jar - Eclipse JDT 3.2 Java compiler. * jsp-api.jar - JSP 2.1 API. * servlet-api.jar - Servlet 2.5 API. * tomcat-coyote.jar - Tomcat connectors and utility classes. * tomcat-dbcp.jar - package renamed database connection pool based on Commons DBCP. * tomcat-i18n-**.jar - Optional JARs containing resource bundles for other languages. As default bundles are also included in each individual JAR, they can be safely removed if no internationalization of messages is needed. Webapp 類(lèi)裝載器: 應(yīng)用層的類(lèi)裝載器,每個(gè)應(yīng)用程序都會(huì)創(chuàng)建一個(gè)單獨(dú)的類(lèi)裝載器。該類(lèi)裝載器只能本應(yīng)用程序中可見(jiàn)。 所有/WEB-INF/classes目錄下未壓縮的類(lèi)文件,資源文件都會(huì)補(bǔ)該類(lèi)裝載器加載。 所有/WEB-INF/lib目錄下壓縮后Jar/zip文件都會(huì)補(bǔ)該類(lèi)裝載器加載。 把各個(gè)類(lèi)裝載器的定義整理出來(lái)后,Tomcat6服務(wù)器類(lèi)裝載器執(zhí)行的順序如下: * Bootstrap classes of your JVM * System class loader classses (described above) * /WEB-INF/classes of your web application * /WEB-INF/lib/*.jar of your web application * $CATALINA_HOME/lib * $CATALINA_HOME/lib/*.jar |
|