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错误 - 东北小狐狸