1. 程式人生 > >tomcat常見錯誤及解決方案

tomcat常見錯誤及解決方案

 我們習慣的web容器都是tomcat,但是tomcat的核心很豐富,如果我們要完全理解他,需要很長的時間和有較多的程式設計經驗。

      不管是初學者還是有經驗的web程式設計師,使用Tomcat容器的時候會發生包括404,執行啟動錯誤,以及亂碼等等的問題,現在我將開發過程中遇到的常見錯誤和簡單解決方法貼出來供大家看看,裡面有部分是同事總結,我們共同完成的這篇文章。。。

一,tomcat啟動時錯誤

1:The JAVA_HOME environment variable is not defined This environment variable is needed to run this program

Re:沒有在在tomcat的配置檔案.bash_profile中設定環境變數JAVA_HOME,具體設定方法為:加入如下幾行:

   JAVA_HOME=/home/tomcat/j2sdk1.4.2_08(具體值要以實際的jdk安裝路徑為準)

   export JAVA_HOMECLASSPATH=/home/tomcat/j2sdk1.4.2_08/lib/tools.jar:/home/tomcat/j2sdk1.4.2_08/lib/dt.jar

   export CLASSPATH

2 Error occurred during initialization of VM Could not reserve enough space for object heap

Re:在tomcat的bin目錄下,catalina.sh檔案的tomcat記憶體引數配置過大,超過機器可用記憶體總數造成,修改到適當的值即可,修改的引數為:JAVA_OPTS="-Xms50m -Xmx60m"

3  tomcat啟動時報某個目錄沒有許可權,啟動失敗,或者不能執行某些jsp頁

Re:tomcat需要tomcat使用者具有一些目錄和檔案的相應許可權, 所有目錄應該具有讀寫執行(瀏覽)的許可權,jsp,class檔案應該最少具有讀許可權, 一些檔案需要寫許可權,下面是已知的需要讀寫許可權檔案的列表:

       $CATALINA_HOME/logs下所有檔案

       $CATALINA_HOME/work下所有檔案

       $CATALINA_HOME/publish/main/count.txt檔案

       $CATALINA_HOME/publish/chatroom/resource下的所有.xml檔案

       所有上傳圖片目錄都需要寫許可權。

       改變檔案目錄許可權的方法:執行下面命令,設定所有的tomcat安裝下的檔案和目錄,可以保證執行,但是不是很安全。

1. 設定tomcat上級目錄/opt所有使用者都有讀寫執行許可權:

chmod 777 [tomcat的上級目錄]

2. 設定tomcat5.0.28目錄下的所有檔案的屬主為tomcat:

      chown -R tomcat [tomcat安裝目錄]

3. 設定所有tomcat5.0.28下的所有檔案和目錄的屬主(tomcat)具有讀寫執行許可權

chmod 700 -R /opt/tomcat5.0.28

4  執行startup.sh檔案後告訴地址已經使用,導致tomcat不能啟動

Re:可能是前一次執行./shutdown.sh檔案關閉tomcat時沒有停止已經啟動的java程序,而這個程序仍然在監聽tomcat所使用的埠,或者有另外一個tomcat正在執行,server.xml檔案中的監聽埠和當前tomcat衝突。

   使用下面命令檢視當前系統是否有正在監聽的埠(8080--webcache, 90--www或http).

1. 列出所有系統正在監聽的埠和繫結的地址netstat -l

2. 找出當前系統中的所有程序,管道符號過濾輸出顯示包含java字串的行

     ps -A |grep java       

       tty   time        proc

     1021     ?      java   

3. 結束一個指定的程序:

     kill   [程序號]

4. 強制殺死一個程序:

      kill -9 [程序號]

     如果確定不是別的tomcat執行導致的衝突或者沒有java程序執行可以再次執行startup.sh檔案啟動tomcat

二  Tomcat 執行時錯誤及解決

1. org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Network error IOException: Connection refused: connect)
2. Caused by: java.sql.SQLException: Network error IOException: Connection refused: connect
3. Caused by: java.net.ConnectException: Connection refused: connect

Re:資料庫未開情況下執行tomcat出現的問題,把資料庫開啟就行了

4.java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V
at net.sf.cglib.core.ClassEmitter.begin_class(ClassEmitter.java:77) 這個問題是最最常見的,第一次整合ssh的時候會發現這個問題,有時候刪除掉相關的包還是會衝突。所以解決辦法我一般是:

Re:把MyEclipse中的Hibernate中的有關ASM的包全部刪除,將spring中asm包拷貝進去重啟就Ok了,有時候需要刪除其他檔案,到網上找找吧;

還有個解決辦法:Spring 和 Hibernate 共用的一些 jar 檔案發生了版本衝突, 刪除 WEB-INF/lib/asm-2.2.3.jar 然後重啟 Tomcat.

5 .javax.servlet.jsp.JspException: Invalid argument looking up property usersVO.account of bean loginForm

Re,一般提示這種錯誤表示VO中的form沒有例項化,在reset方法中new一下就Ok了。養成良好的編碼習慣可以避免這種簡單錯誤。

6.嚴重: Exception loading sessions from persistent storage

Re:tomcat安裝目錄\work\Catalina\localhost\{webAppName}\SESSIONS.ser,刪除此檔案

三 出現404錯誤是因為你所請求的頁面不可用!這是response物件的http響應中的狀態行404表示當前請求的頁面不可用!200表示測試通過。500表示伺服器內部發生錯誤等!