You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tomcat10部署WebSocket Server Endpoints连接失败无法正常工作

问题原因

Tomcat 10及以上版本已经将所有Java EE规范的包名从javax.*迁移为jakarta.*,你当前引入的javax.websocket-api依赖完全不匹配Tomcat 10的类加载规则,@ServerEndpoint注解不会被容器扫描识别,WebSocket端点根本没有完成注册,前端自然连接失败。
另外你写的@OnMessage修饰的方法签名不符合规范,空参数的消息接收方法会直接导致端点初始化失败。

修复步骤
  • 替换pom.xml中的WebSocket依赖,删除原有javax版本的依赖,添加Tomcat 10兼容的Jakarta版本依赖:
<dependency>
  <groupId>jakarta.websocket</groupId>
  <artifactId>jakarta.websocket-api</artifactId>
  <version>2.0.0</version>
  <scope>provided</scope>
</dependency>
  • 修改WebSocket服务端类的导入包,将所有javax.websocket开头的导入替换为jakarta.websocket开头的对应类,同时修正onMessage方法的签名,保证方法至少有一个参数用于接收消息内容,修正后的代码参考:
import jakarta.websocket.OnClose;
import jakarta.websocket.OnMessage;
import jakarta.websocket.OnOpen;
import jakarta.websocket.server.ServerEndpoint;

@ServerEndpoint("/chat")
public class WebsocketServer{
    
    @OnOpen
    public void onOpen(){}
    
    @OnMessage
    public void onMessage(String message){
        // 此处写消息处理逻辑
    }
    
    @OnClose
    public void onClose(){}
}
  • 清理项目中所有残留的javax.*开头的Java EE相关依赖(比如javax.servlet-api),统一替换为对应Jakarta版本,避免类冲突。
  • 执行Maven clean后重新构建项目,重启Tomcat完成部署再测试连接即可。
排查提示

重启部署时注意查看Tomcat的启动日志,如果日志中出现WebsocketServer相关的类加载、端点注册错误,根据报错提示调整即可;如果端点注册成功仍连接失败,先访问http://localhost:8080/demo_war_exploded/确认项目上下文路径配置正确,不要写错WebSocket连接地址。

内容的提问来源于stack exchange,提问作者Raymond Hou

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 02:51:26