<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    原文:http://www.donews.net/lizongbo/archive/2005/03.aspx

    Tomcat的class加載的優(yōu)先順序一覽

    1.最先是$JAVA_HOME/jre/lib/ext/下的jar文件。

    2.環(huán)境變量CLASSPATH中的jar和class文件。

    3.$CATALINA_HOME/common/classes下的class文件。

    4.$CATALINA_HOME/commons/endorsed下的jar文件。

    5.$CATALINA_HOME/commons/i18n下的jar文件。

    6.$CATALINA_HOME/common/lib?下的jar文件。
    (JDBC驅動之類的jar文件可以放在這里,這樣就可以避免在server.xml配置好數(shù)據(jù)源卻出現(xiàn)找不到JDBC?Driver的情況。)
    7.$CATALINA_HOME/server/classes下的class文件。

    8.$CATALINA_HOME/server/lib/下的jar文件。

    9.$CATALINA_BASE/shared/classes?下的class文件。

    10.$CATALINA_BASE/shared/lib下的jar文件。

    11.各自具體的webapp?/WEB-INF/classes下的class文件。

    12.各自具體的webapp?/WEB-INF/lib下的jar文件。

    class的搜尋順序如下:
    -------------
    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/common/classes?
    $CATALINA_HOME/common/endorsed/*.jar?
    $CATALINA_HOME/common/i18n/*.jar?
    $CATALINA_HOME/common/lib/*.jar?
    $CATALINA_BASE/shared/classes?
    $CATALINA_BASE/shared/lib/*.jar?
    --------------


    因此放在不同webapp里的class文件,會被classloader加載成不同的實例。
    例如假設下面兩個不同內容的class。分別放在不同的webapp的class目錄下。

    package?com.lizongbo;
    public?class?TestClass?{
    ??private?String?NAME="lizongbo";
    }

    package?com.lizongbo;
    public?class?TestClass?{
    ??private?String?NAME="li_zongbo";
    }

    在不同的webapp得到的com.lizongbo.NAME結果是不同的,且互不影響。

    但是注意,以下包名開頭的class例外:
    javax.*?
    org.xml.sax.*?
    org.w3c.dom.*?
    org.apache.xerces.*?
    org.apache.xalan.*?

    ps,注意.在各個jar中的\META-INF\MAINFEST.MF文件里Class-Path鍵值對,也會提供jar的加載優(yōu)先順序。
    例如某jar的MAINFEST.MF內容如下:
    Manifest-Version:?1.0
    Created-By:?lizongbo
    Class-Path:?commons-beanutils.jar
    Class-Path:?commons-collections.jar
    Class-Path:?commons-dbcp.jar
    Class-Path:?commons-digester.jar
    Class-Path:?commons-logging.jar
    Class-Path:?commons-pool.jar
    Class-Path:?commons-services.jar
    Class-Path:?commons-validator.jar
    Class-Path:?jakarta-oro.jar
    Main-Class:?com.lizongbo.MyTestClass


    那么在加載這個jar的時候,會先在此jar所在目錄下依次先加載commons-beanutils.jar,commons-collections.jar。。。等jar文件。

    在不同的地方放置jar和class可能會產生意想不到的后果,,尤其是不同版本的jar文件,因此在實際應用部署web應用時候要特別留心.


    例如?使用javamail常見的一個出錯信息:
    javax.mail.NoSuchProviderException:?No?provider?for?smtp
    其真實原因就很可能如下:
    在不同的加載jar的目錄下放置了不同版本的mail.jar,比如一個是javamail1.3.1的mail.jar
    在D:\jakarta-tomcat-5.5.8\common\lib下,而另外一個是javamail1.3.2的mail.jar在
    D:\jakarta-tomcat-5.5.8\webapps\lizongbo\WEB-INF/lib下,
    那么lizongbo這個webapp中使用到javamail進行郵件發(fā)送的時候,便會出現(xiàn)No?provider?for?smtp的錯誤。

    詳情見google:http://www.google.com/search?hl=zh-CN&inlang=zh-CN&newwindow=1&q=javax.mail.NoSuchProviderException%3A+smtp&btnG=%E6%90%9C%E7%B4%A2&lr=lang_zh-CN

    ?

    其它詳情可參考:
    http://java.sun.com/j2se/1.4.2/docs/guide/jar/jar.html#JAR%20Manifest

    http://jakarta.apache.org/tomcat/tomcat-5.5-doc/class-loader-howto.html

    posts - 4, comments - 5, trackbacks - 0, articles - 60

    Copyright © ikingqu

    主站蜘蛛池模板: 久久丫精品国产亚洲av| 亚洲一区二区女搞男| 亚洲精品免费在线| 东方aⅴ免费观看久久av | 亚洲综合精品网站| 免费精品国产自产拍在线观看| 在线日韩av永久免费观看| 亚洲人成电影网站免费| 国产在线观看免费不卡 | 免费人成网站永久| 亚洲乱亚洲乱少妇无码| 国产精品小视频免费无限app| 中文字幕亚洲一区| 日韩免费视频一区二区| 亚洲精品资源在线| 免费在线看v网址| 亚洲精品乱码久久久久久蜜桃图片| 影音先锋在线免费观看| 亚洲av综合日韩| 亚洲日韩国产精品乱| 国产午夜无码精品免费看| 亚洲精品美女在线观看| 国产福利在线免费| 国产精品亚洲专区在线播放| 亚洲乱码国产一区网址| 99久久国产免费中文无字幕| 亚洲精品中文字幕麻豆 | 免费在线黄色网址| 国产精品无码永久免费888| 久久亚洲精品中文字幕无码| 0588影视手机免费看片| 亚洲av无码专区在线电影天堂| 免费在线观看a级毛片| 性色午夜视频免费男人的天堂 | 久久精品7亚洲午夜a| 无码国产精品一区二区免费式影视 | 国语成本人片免费av无码 | 99re6在线视频精品免费| 亚洲人成依人成综合网| 在线观看人成视频免费| 久久久久久久久久免免费精品|