【问题标题】:Tomcat restart throws error regarding the missing destroy() methodTomcat 重新启动引发有关缺少 destroy() 方法的错误
【发布时间】:2021-05-27 12:12:19
【问题描述】:

我的服务部署在 tomcat 上。最近我们将tomcat升级到了9.0.43。而当服务重启时(tomcat作为服务安装在windows上),会抛出如下错误:

SEVERE [Thread-19] org.apache.catalina.core.ApplicationFilterConfig.release Failed to destroy the filter named [Tomcat WebSocket (JSR356) Filter] of type [org.apache.tomcat.websocket.server.WsFilter]
    java.lang.AbstractMethodError: Receiver class org.apache.tomcat.websocket.server.WsFilter does not define or inherit an implementation of the resolved method abstract destroy()V of interface javax.servlet.Filter.
        at org.apache.catalina.core.ApplicationFilterConfig.release(ApplicationFilterConfig.java:301)

我调查并找到了根本原因。之前在WsFilter.class下的tomcat-websocket.jar中有一个destroy方法实现 lib\tomcat-websocket\org\apache\tomcat\websocket\server\WsFilter.class,现在不见了。

我现在应该如何进行?有什么想法吗?

【问题讨论】:

    标签: tomcat servlet-filters


    【解决方案1】:

    由于 Servlet 4.0 API,Filter 接口的 initclose 方法具有默认实现。检查您是否没有在您的应用程序中部署另一个(和更旧的)javax.servlet-api.jar

    【讨论】:

    • 非常感谢。让我检查一下我的项目并返回。
    • 我找不到任何东西。这些库仅包含 tomcat 9.0.41 库。
    • $CATALINA_BASE/lib/servlet-api.jar 中应该有一个javax.servlet.Filter,而每个应用程序的WEB-INF/lib 文件夹中不应包含任何包含该类的 JAR。
    • 我明白了。另一个文件夹中有一个 servlet api,但似乎正在被拾取。非常感谢您的回答。我将标记为答案。我将检查类路径问题。
    • 也许你有一个CATALINA_BASE/CATALINA_HOME 配置。查看 catalina.properties 以查看所有 Tomcat 类加载器的类路径。
    猜你喜欢
    • 2023-03-19
    • 1970-01-01
    • 2015-07-20
    • 2017-04-14
    • 1970-01-01
    • 2021-10-23
    • 2016-05-06
    • 1970-01-01
    • 2021-12-10
    相关资源
    最近更新 更多