org.apache.tomcat.websocket.server.WsSessionListener.sessionCreated报错解决记录

tomcat 9 中sessionCreated 这个方法存在的的接口源码如下

public interface HttpSessionListener extends EventListener {

    /**
     * Notification that a session was created.
     * The default implementation is a NO-OP.
     *
     * @param se
     *            the notification event
     */
    public default void sessionCreated(HttpSessionEvent se) {
    }

    /**
     * Notification that a session is about to be invalidated.
     * The default implementation is a NO-OP.
     *
     * @param se
     *            the notification event
     */
    public default void sessionDestroyed(HttpSessionEvent se) {
    }
}

可以看到是个默认方法 所以它的实现类也没有实现该方法 源码如下

public class WsSessionListener implements HttpSessionListener{

    private final WsServerContainer wsServerContainer;


    public WsSessionListener(WsServerContainer wsServerContainer) {
        this.wsServerContainer = wsServerContainer;
    }


    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        wsServerContainer.closeAuthenticatedSession(se.getSession().getId());
    }
}

问题的原因就在于我的代码中引用的包引入了另一个版本的接口 代码如下

public interface HttpSessionListener extends EventListener {
    void sessionCreated(HttpSessionEvent var1);

    void sessionDestroyed(HttpSessionEvent var1);
}

可以看到不是一个默认方法必须要求实现
再来看看报错的地方
在这里插入图片描述
可以看到运行时候因为存在两个api的冲突 所以会去找它的实现类 把它默认为是另一个版本的实现类然后因为并没有对该方法implement 所以进行了报错

解决办法 将引入这个api的包在dependency中exclude即可
网上有许多exclude的方法 但是由于大多是引入第三方的包造成的 所以需要找一下自己的情况是哪个包引入的才能解决问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: org.apache.tomcat.websocket.server.wsfilter.dofilter是Tomcat WebSocket服务器的过滤器,用于处理WebSocket请求。它可以拦截WebSocket请求并进行处理,以确保WebSocket连接的安全性和可靠性。 ### 回答2: Tomcat是一个广泛使用的Java Web服务器。它支持多种协议,WebSocket是其中之一。WebSocket提供了一个全双工通信协议,允许客户端和服务器之间实时通信。 org.apache.tomcat.websocket.server.wsfilter.dofilter是Tomcat WebSocket服务器端过滤器的一部分。它是过滤器链中的一个过滤器,用于分发传入的WebSocket连接并确保它们被正确处理。 当Tomcat WebSocket服务器端启用时,org.apache.tomcat.websocket.server.WsFilter将拦截所有传入的WebSocket连接,并将其传递给这个过滤器。在这个过滤器中,WebSocket连接将被处理和派发给正确的WebSocket终端点。 这个过滤器还执行一些其他功能,例如处理HTTP请求中的WebSocket升级头,并确保响应头正确设置。此外,它还为每个WebSocket连接创建一个独立的线程,并在服务器端处理WebSocket消息。 总之,org.apache.tomcat.websocket.server.wsfilter.dofilter是Tomcat WebSocket服务器端过滤器中的一个重要组件。它确保WebSocket连接能够有效地分发和处理,并保证实时通信得以顺利完成。 ### 回答3: org.apache.tomcat.websocket.server.wsfilter.dofilter是一个类,主要作用是过滤WebSocket请求。在使用WebSocket进行通信时,WebSocket服务器会以WebSocket协议来代替原本的HTTP协议进行通信。这时,需要对WebSocket请求进行统一的过滤和处理,以确保WebSocket协议的运行稳定,并且避免出现安全问题。 WebSocket服务器使用org.apache.tomcat.websocket.server.wsfilter.dofilter类进行过滤。该类实现了javax.servlet.Filter接口,用于对WebSocket的请求进行拦截和处理。过滤器可以对请求进行处理操作,例如创建WebSocket连接、释放WebSocket连接、管理WebSocket连接池、统计和记录WebSocket连接的状态等。 org.apache.tomcat.websocket.server.wsfilter.dofilter类主要包含以下方法: 1.dofilter:该方法是Filter接口的核心方法,用于拦截和处理过滤器中的请求,具体操作由实现该接口的子类完成。 2.init:该方法用于初始化过滤器,可以在该方法中对WebSocket连接进行配置、预处理和初始化等操作。 3.destory:该方法用于销毁过滤器,在应用结束时调用该方法,用于释放过滤器中的资源。 总之,org.apache.tomcat.websocket.server.wsfilter.dofilter类是WebSocket服务器中非常重要的一个类,它实现了javax.servlet.Filter接口,用于对WebSocket的请求进行拦截和处理。在WebSocket通信过程中,该类起到了重要的过滤和处理作用,可以有效地管理WebSocket连接,确保WebSocket通信的稳定和安全。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值