2017-07-15 82 views
0

我正在開發一個登錄表單,但我得到了這個卡塔琳娜生命週期異常。卡塔利娜生命週期異常

這是我web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> 
    <display-name>LoginWithSpringMVC</display-name> 
    <servlet> 
     <servlet-name>spring</servlet-name>  
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>dispatcher</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 
    <session-config> 
     <session-timeout> 
      30 
     </session-timeout> 
    </session-config> 
    <welcome-file-list> 
     <welcome-file>index.jsp</welcome-file> 
    </welcome-file-list> 
</web-app> 
+0

嘗試1)停止服務器2)清理Tomcat的工作目錄 – sForSujit

+0

是的,我試了很多時間仍然是相同的問題@sForSujit – Yuvanath

+0

java.util.concurrent.ExecutionException:org.apache.catalina.LifecycleException:無法啓動組件[ StandardEngine [卡塔利娜] .StandardHost [本地主機] .StandardContext [/ HomeBankingSystem]] \t在java.util.concurrent.FutureTask.report(未知來源) \t在java.util.concurrent.FutureTask.get(未知來源) \t在org.apache.catalina.core.ContainerBase。startInternal(ContainerBase.java:1119) \t at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:8 – Yuvanath

回答

1

至於日誌,你經常會得到「日誌/ catalina.yyyy毫米dd.log」的信息最多,但有時當一個應用程序失敗開始你也會在「logs/localhost.yyyy-mm-dd.log」中獲得信息。除此之外,你可能有應用程序特定的日誌,你可以檢查,或者如果應用程序正在寫入STDOUT/STDERR,你可以檢查「logs/catalina.out」來獲取它們。

1

並可能檢查JVM類加載器問題。如果在同一個目錄中有多個JAR文件,並且它們具有相同的類(也許版本A和庫B的版本B),則沒有定義的JAR文件搜索順序。在某些平臺上,A可能首先被搜索,其他B可能首先被搜索。通常它對於一個平臺是一致的,但它在技術上可以從運行到運行改變。對此的簡單回答是不要將舊的WAR文件保留在「lib」目錄中(或類路徑中的任何其他位置)。在發生此問題時排除故障的一種方法是使用JVM選項「-verbose」運行tc服務器。這將打印JVM加載類文件的位置。然後,您可以使用它來查找有問題的庫。

遵循郵票:

驗證的第一件事是,這個類存在並在類路徑上。這是這個錯誤最明顯的原因。檢查WAR文件中捆綁的JAR文件,並確認它存在那裏。

我會做的第二件事是添加我上面提到的「-verbose」選項。這將幫助你確定哪些類正在加載以及從哪裏加載。執行此操作後,請檢查是否還有更多舊的JAR文件正在使用,如果已刪除它們。之後,在錯誤生成之前查看正在加載的類。這些可能會觸發JVM加載這個類。看看這些類正在加載的JAR文件,並確保它是正確的版本。當使用兩個不同版本的JAR文件時,通常會發生NoClassDefFoundError。

您應該做的第三件事是看看詳細輸出並查找從您的tc服務器實例的頂級「lib」目錄中的JAR文件加載的類文件。雖然這在技術上是可行的,但它幾乎總是會導致很難診斷類裝載器問題,這可能發生在這裏。也就是說,建議將99%的JAR文件放在WAR文件的「WEB-INF/lib」目錄中。只有你想放在頂層「lib」目錄中的是Tomcat需要的JDBC和資源驅動程序(即,因爲你已經在配置中配置了一個標籤)。

最後,它看起來像是由servlet 3.0註釋處理觸發的。換句話說,Tomcat正在掃描您的應用程序中的servlet 3.0註釋。在這個過程中,它會觸發錯誤。如果你沒有使用servlet 3.0的功能,你可以禁用它。有關這方面的更多信息,請參閱Tomcat docs,它同樣適用於tc Server。