posts - 119, comments - 62, trackbacks - 0, articles - 0

          這次項目開發,運行環境的tomcat版本從5.5.12升級到了6.0.18,發現以前的項目不能跑了,訪問一個很簡單的jsp也會報錯,說無法編譯,報的錯誤就是:Only a type can be imported. com.xxx.xxx.XXX resolves to a package,意思就是說你jsp頁面上引用的那個類不存在,可是在老版本明明跑的好好的,而且另一個現象就是項目根目錄下的jsp訪問沒有問題,子目錄下就報錯,google了一下,發現這是新版本tomcat的一個變化,就是如果不指定context的話,每一個子文件夾都會被tomcat當作一個獨立的虛擬應用的,所以每個子文件夾下的jsp頁面訪問的時候,都會在它的同一層找WEB-INF里面的class,這樣當然找不到了,只有剛巧放在根目錄下的jsp文件能訪問。

          解決辦法:其實這也是自己以前寫tomcat的配置文件時候,寫法不規范造成的,以前的server.xml里面host信息代碼如下:

          <Host name="www.local.com" appBase="D://projects//myWebSite//WebContent" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
              <Alias>192.168.1.43</Alias> 
              <Context path="" docBase="" reloadable="true">
               <Logger className="org.apache.catalina.logger.FileLogger" directory="logs" prefix="www.local.com_log." suffix=".txt" timestamp="true"/>
              </Context></Host>

          這其中Context里面的docBase為空,文件路徑就靠Host里的appBase去指定,這樣tomcat認為你這個站點下沒有應用,會自動把每個文件夾當作一個虛擬應用處理。修改后的代碼片段如下:

          <Host name="www.local.com" appBase="" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
              <Alias>192.168.1.43</Alias> 
              <Context path="" docBase="D://projects//myWebSite//WebContent" reloadable="true">
               <Logger className="org.apache.catalina.logger.FileLogger" directory="logs" prefix="www.local.com_log." suffix=".txt" timestamp="true"/>
              </Context></Host>

          可以看到Host里面不再指定appBase了,而是在主機下建立一個應用,應用的文件路徑通過docBase來指定,這樣就不會再產生找不到class的問題了。

          ps:tomcat的這個問題好像是從5.5.28就開始了,記得以前也曾經嘗試過升級tomcat,就發生了類似的問題,但是當時沒充裕時間去解決,就一直把問題遺留到現在。


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


          網站導航:
           
          主站蜘蛛池模板: 上蔡县| 元朗区| 大悟县| 平凉市| 项城市| 军事| 竹溪县| 任丘市| 淮安市| 黄石市| 加查县| 哈巴河县| 赫章县| 元江| 汤原县| 宝清县| 肇源县| 宝应县| 涞水县| 富蕴县| 瓮安县| 平舆县| 井冈山市| 阆中市| 桐庐县| 伽师县| 汝阳县| 新田县| 秦皇岛市| 同江市| 从江县| 清徐县| 清新县| 墨江| 濮阳市| 三亚市| 景洪市| 汾阳市| 轮台县| 呼和浩特市| 石泉县|