Tomcat 8 報錯:FAIL - Application at context path /xxxx could not be started
一、問題描述
在本地 Tomcat 部署項目后,在瀏覽器中打開項目報錯 The origin server did not find a current representation for the target resource or is not willing to disclose that one exists

造成這個錯誤的原因有很多,可能是路徑錯誤,也可能是項目編譯包錯誤,亦或是版本不兼容導致項目啟動失敗。嘗試訪問 http://localhost:8080/manager/html 進入 Tomcat 應用管理頁面手動啟動頁面后,報錯 FAIL - Application at context path /xxxx could not be started

二、原因分析
以上問題在重裝 Tomcat 9.0 版本后已經成功解決,但是出于好奇心,還是想探查一下造成報錯的原因。所以下面主要提供的是如何查找問題的詳細步驟。
1. 首先需要前往 Tomcat 目錄下的 logs 中查看最新的 catalina 日志

2. 在日志中查找到報錯的信息
報錯信息為 org.apache.catalina.core.StandardContext.startInternal One or more Filters failed to Start. 大約說是過濾器啟動失敗了。到此為止還是沒有看出具體是哪個地方出了錯,因此下一步需要獲取更詳細的報錯信息。

3. 在項目的 WEB-INF/classes 下創建文件 logging.properties

4. logging.properties 文件中添加如下代碼:
handlers = org.apache.juli.FileHandler, java.util.logging.ConsoleHandler
############################################################
# Handler specific properties.
# Describes specific configuration info for Handlers.
############################################################
org.apache.juli.FileHandler.level = FINE
org.apache.juli.FileHandler.directory = ${catalina.base}/logs
org.apache.juli.FileHandler.prefix = error-debug.
java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
5. 重新啟動 Tomcat 服務后就可以在窗口中查看報錯信息了

三、解決方法
報錯信息為Exception starting filter XSSFilter,錯誤類型 java.lang.AbstractMethodError。參考網上各位前輩的說法,并結合個人判斷,大致可以確定報錯原因是:Tomcat 8 使用的 Filter 沒有默認實現 init 與 destroy 方法,導致初始化 XSSFilter 失敗。
方法一:升級 Tomcat 版本到 9.x。原因是 9.x 的Tomcat 的共享庫 Filter 有默認實現 init 與 destroy 方法
方法二:修改項目代碼,為所有 Filter 都添加默認 init 與 destroy 方法
public class xxxxFilter implements Filter {
public void init(FilterConfig fConfig) throws ServletException {
}
public void destroy() {
}
}
參考文檔
[1] 關于部署項目到tomcat,報FAIL - Application at context path /JDYProject could not be started - CoderBruis
[2] 遇到“org.apache.catalina.core.StandardContext.startInternal One or more listeners failed to start.”怎么辦 - 正怒月神
[3] 記一次Tomcat服務部署,啟動過濾器異常,問題查找過程 - sliker
[4] 【問題解決】Tomcat啟動服務時提示Filter初始化或銷毀出現java.lang.AbstractMethodError錯誤 - 東北小狐貍


浙公網安備 33010602011771號