日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Tomcat服务器启动错误之Offending class: javax/servlet/Servlet.class

發(fā)布時(shí)間:2023/12/9 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Tomcat服务器启动错误之Offending class: javax/servlet/Servlet.class 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

??引子???

????最近在基于Wex5項(xiàng)目開發(fā)中,遇到使用過程中與Tomcat功能有關(guān)的錯(cuò)誤提示, 如題所示。最終的解決方法就是刪除掉項(xiàng)目上與tomcat沖突的jar包。

org.apache.catalina.loader.WebappClassLoader validateJarFile


??:?validateJarFile(/Users/zxzpc/Downloads/X5/WeX5_V3.4mac/apache-tomcat/webapps/../../runtime/BaasServer/WEB-INF/lib/servlet-api.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class



???? ?順便查找了一些資料,整理如下:

? ? ? Tomcat 啟動(dòng)后先將tomcat/common/lib目錄下的jar包全部讀入內(nèi)存,如果webapps目錄里的應(yīng)用程序中WEB-INF/lib目錄下有相同的包,將無法加載,估計(jì)不同版本的包之間也會(huì)造成類似問題。因此建議盡量不要把jar包放入tomcat/common/lib目錄下,應(yīng)該放入WEB- INF/lib目錄下。


????Tomcat類加載順序小結(jié)

????Tomcat下的文件目錄?

  • /bin:存放啟動(dòng)和關(guān)閉tomcat的腳本文件;

  • ?/conf:存放tomcat的各種配置文件,比如:server.xml?

  • /server/lib:存放tomcat服務(wù)器所需要的各種jar文件(jar文件只可被tomcat 服務(wù)器訪問)?

  • /server/webapps:存放tomcat自帶的兩個(gè)web應(yīng)用:admin應(yīng)用和manager應(yīng)用。?

  • /common/lib:存放tomcat服務(wù)器以及所有web應(yīng)用都可以訪問的jar文件夾(web和tomcat服務(wù)器都可訪問此jar)

  • /shared/lib:存放web都可訪問的jar文件。(可以被所有的web訪問,但不能被tomcat訪問)

  • ?/logs:存放tomcat的日志文件?

  • /webapps:當(dāng)發(fā)布web應(yīng)用時(shí),默認(rèn)情況下把web應(yīng)用文件放于此目錄下?

  • /work:tomcat把由jsp生成的Servlet放于此目錄?

    另:在web應(yīng)用中,WEB-Inf目錄下,也可以建立lib子目錄,在此子目錄下可以存放各種jar文件,這些jar文件只能被當(dāng)前web應(yīng)用訪問。其中,在web-inf目錄下的lib與classes目錄,Tomcat類裝載器先裝載classes目錄下的類,再裝載lib目錄下的類。因?yàn)轭愅麜r(shí),classes優(yōu)先。?

    其中jsp運(yùn)行時(shí),查找class的順序?yàn)?#xff1a;項(xiàng)目文件夾(WEB-INF\lib)—>容器文件夾(tomcat\common\lib)—>jdk文件夾(jdk\jre\lib\ext)?

  • ????默認(rèn)情況下,Tomcat是一種向上尋找的層次結(jié)構(gòu),也有向下的,或者是可配置的。?

    ????Tomcat的class加載優(yōu)先級(jí)?

    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驅(qū)動(dòng)之類的jar文件可以放在這里,避免配置好數(shù)據(jù)源卻找不到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的搜尋順序

    /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文件,會(huì)被classloader加載成不同的實(shí)例。?在不同的webapp加載相同類名的類互不影響。?

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

    值得注意的是:在各個(gè)jar中的\META-INF\MAINFEST.MF文件里Class-Path鍵值對(duì),也會(huì)提供jar的加載優(yōu)先順序。?
    例如某jar的MAINFEST.MF內(nèi)容如下:?
    Manifest-Version: 1.0?
    Created-By: Zianed?
    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: Test?

    那么在加載這個(gè)jar的時(shí)候,會(huì)先在此jar所在目錄下依次先加載commons-beanutils.jar,commons-collections.jar等jar文件。?

    在不同的地方放置jar和class可能會(huì)產(chǎn)生意想不到的后果,尤其是不同版本的jar文件,因此在實(shí)際應(yīng)用部署web應(yīng)用時(shí)候要特別留心.?
    例如 使用javamail常見的一個(gè)出錯(cuò)信息:?javax.mail.NoSuchProviderException: No provider for smtp?

    其真實(shí)原因就很可能如下:?
    在不同的加載jar的目錄下放置了不同版本的mail.jar,比如一個(gè)是javamail1.3.1的mail.jar?
    在D:\jakarta-tomcat-5.5.8\common\lib下,而另外一個(gè)是javamail1.3.2的mail.jar在?
    D:\jakarta-tomcat-5.5.8\webapps\mialtest\WEB-INF/lib下,?那么mialtest中使用到j(luò)avamail進(jìn)行郵件發(fā)送的時(shí)候,便會(huì)出現(xiàn)No provider for smtp的錯(cuò)誤。















    本文轉(zhuǎn)自朱先忠老師51CTO博客,原文鏈接:http://blog.51cto.com/zhuxianzhong/1769307?,如需轉(zhuǎn)載請(qǐng)自行聯(lián)系原作者




    創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

    總結(jié)

    以上是生活随笔為你收集整理的Tomcat服务器启动错误之Offending class: javax/servlet/Servlet.class的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。