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

image0-1

造成这个错误的原因有很多,可能是路径错误,也可能是项目编译包错误,亦或是版本不兼容导致项目启动失败。尝试访问 http://localhost:8080/manager/html 进入 Tomcat 应用管理页面手动启动页面后,报错 FAIL - Application at context path /xxxx could not be started

image0-2

二、原因分析

以上问题在重装 Tomcat 9.0 版本后已经成功解决,但是出于好奇心,还是想探查一下造成报错的原因。所以下面主要提供的是如何查找问题的详细步骤。

1. 首先需要前往 Tomcat 目录下的 logs 中查看最新的 catalina 日志

image1-1

2. 在日志中查找到报错的信息

报错信息为 org.apache.catalina.core.StandardContext.startInternal One or more Filters failed to Start. 大约说是过滤器启动失败了。到此为止还是没有看出具体是哪个地方出了错,因此下一步需要获取更详细的报错信息。

image1-2

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

image1-3

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 服务后就可以在窗口中查看报错信息了

image1-4

三、解决方法

报错信息为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错误 - 东北小狐狸

posted @ 2024-10-31 11:47  意气风发胡小图  阅读(39)  评论(0编辑  收藏  举报