posts - 68, comments - 19, trackbacks - 0, articles - 1

          多版本tomcat共存問題

          Posted on 2011-02-24 00:09 viery 閱讀(1330) 評論(0)  編輯  收藏
          • 問題描述:
          啟動Tomcat 6.0.x時, 報如下錯誤:
          java.lang.NoSuchMethodError: javax.servlet.ServletContext.getContextPath()Ljava/lang/String;

          網上google了一下,發現出這類問題的人很多.而且基本上都是原來裝了Tomcat 5.5, 現在新下載了Tomcat 6.0,裝上卻出現這個錯誤.

          • 分析原因:
          1. javax.servlet.ServletContext為servlet-api.jar內的類,通過反編譯,發現Tomcat 6.0以前的版本的servlet-api.jar內的ServletContext類沒有getContextPath()方法,而新的Tomcat 6.0及以后版本有這個方法,而且server 啟動時需要調用這個方法
          Tomcat 6.0 before
          public interface ServletContext
          {
              public abstract ServletContext getContext(String s);
          Tomcat 6.0 later
          public interface ServletContext
          {

              public abstract ServletContext getContext(String s);

              public abstract String getContextPath();

          2. 顯然,Tomcat 6.0啟動的時候錯調用了別的版本的servlet-api.jar
          為什么出現這種情況呢?
          我分析情況大概如此:
          肯定很多人硬盤上還有老版本的Tomcat , 按說多個版本的Tomcat是能在一個環境里共存的.
          但很多人出于一些特殊原因(比如命令行javac下測試application級別的servlet),曾把以前版本的Tomcat的servlet-api.jar文件拷貝入%JRE%\lib\ext下 (JDK 引入第三方JAR文件都放在此目錄下)
          而Tomcat 啟動是需要從%JAVA_HOME%和%JRE_HOME%讀jar文件,而且從優先順序下,JRE庫是先于Tomcat自己的lib目錄的


          最終解決辦法:
          刪除掉%JRE%\lib\ext下的servlet-api.jar文件,或者用Tomcat 6.0自己的servlet-api.jar覆蓋
          再重啟Tomcat 6.0, 正常啟動問題消失.

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 盐源县| 垦利县| 禹城市| 朝阳区| 积石山| 南和县| 噶尔县| 闵行区| 康定县| 吴堡县| 灵寿县| 翼城县| 黔南| 泽州县| 镇沅| 博湖县| 聂拉木县| 高陵县| 绥宁县| 龙岩市| 乌海市| 乌兰县| 边坝县| 太仓市| 河西区| 潮安县| 溧水县| 广南县| 密云县| 咸阳市| 砀山县| 澄江县| 泽州县| 依兰县| 开阳县| 蒲江县| 洛扎县| 汶川县| 靖西县| 澄迈县| 连平县|