One or more Filters failed to start. Exception starting filter [AppContextFilter]

当将项目从Eclipse部署为WAR到Tomcat时,遇到'One or more Filters failed to start. Exception starting filter [AppContextFilter]'的错误。通过检查Tomcat日志发现是由于Filter的init()和destroy()方法使用了JDK1.8的default关键字,而Tomcat9不支持。解决方案是确保在Filter中显式Override这两个方法,然后重新部署,问题得到解决。

错误:One or more Filters failed to start. Exception starting filter [AppContextFilter]

使用eclipse写项目的时候,项目能正常运行。然后打war包放到另一个tomcat上,启动tomcat项目启动失败,错误信息如下:

07-Feb-2020 12:25:30.726 严重 [localhost-startStop-1] org.apache.catalina.core.StandardContext.startInternal One or more Filters failed to start. Full details will be found in the appropriate container log file
07-Feb-2020 12:25:30.727 严重 [localhost-startStop-1] org.apache.catalina.core.StandardContext.startInternal Context [/ninesquarediary] startup failed due to previous errors

主要这一句:One or more Filters failed to start. Full details will be found in the appropriate container log file.

于是到tomcat下的logs里面查看localhost的日志:

07-Feb-2020 12:25:30.726 严重 [localhost-startStop-1] org.apache.catalina.core.StandardContext.filterStart Exception starting filter [AppContextFilter]
 java.lang.AbstractMethodError
	at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:285)
	at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:266)
	at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:108)
	at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4637)
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5282)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:754)
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:730)
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734)
	at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:985)
	at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1857)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)

rg.apache.catalina.core.StandardContext.filterStart Exception starting filter [AppContextFilter]
java.lang.AbstractMethodError

简单说就是Filter问题。
那么就奇怪了,我eclipse上运行的好的很啊。

百度了半天才找到一个可能的情况,试了下还真是。

解决方式

错误原因是因为 filter 的相关方法错误,经排查发现我使用的Filter是4.0.1版本的,其中 init() 和 destroy() 方法使用了default关键字,该关键字为JDK1.8的新特性,意思是子类不必一定实现该方法。

我是用的是tomcat9.0,eclipse上的filter的确没有 Override init() 和 destory() 方法。但是在eclipse上运行没问题…

所以确保 Override init() 和 destory() 方法 后,再部署运行就好了。

原文:原文链接

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值