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

Tomcat Embedded集成WebSocket遇404问题及注解类使用咨询

Tomcat Embedded 11集成WebSocket的404问题排查与注解式实现

404 Not Found问题排查与解决

出现404通常是WebSocket端点未正确注册或路径配置错误,按以下步骤排查:

  • 检查端点注解与路径匹配:确认@ServerEndpoint注解的路径为/ws,测试URL必须和该路径完全一致,注意开头的斜杠不能省略。
  • 手动注册WebSocket支持:Tomcat Embedded不会自动扫描注解式端点,必须在启动类中添加WebSocket容器初始化器并注册端点。
  • 核对API包与依赖版本:Tomcat 11使用Jakarta EE API(jakarta.websocket.*),不要使用旧的javax.websocket.*包,确保tomcat-embed-core和tomcat-embed-websocket版本统一为11.0.4。

注解式WebSocket完整示例

1. 注解式WebSocket端点类

import jakarta.websocket.OnClose;
import jakarta.websocket.OnMessage;
import jakarta.websocket.OnOpen;
import jakarta.websocket.Session;
import jakarta.websocket.server.ServerEndpoint;

@ServerEndpoint("/ws")
public class SampleWebSocket {

    @OnOpen
    public void onOpen(Session session) {
        System.out.println("客户端连接: " + session.getId());
    }

    @OnMessage
    public String onMessage(String message, Session session) {
        System.out.println("收到消息: " + message);
        return "收到你的消息: " + message;
    }

    @OnClose
    public void onClose(Session session) {
        System.out.println("客户端断开: " + session.getId());
    }
}

2. Tomcat Embedded启动类(正确配置WebSocket)

import org.apache.catalina.Context;
import org.apache.catalina.LifecycleException;
import org.apache.catalina.startup.Tomcat;
import org.apache.tomcat.websocket.server.WsSci;

import java.io.File;

public class MainClass {
    public static void main(String[] args) throws LifecycleException {
        Tomcat tomcat = new Tomcat();
        tomcat.setPort(8080);

        // 创建根上下文
        Context context = tomcat.addContext("", new File(".").getAbsolutePath());

        // 注册WebSocket容器初始化器,启用WebSocket支持
        context.addServletContainerInitializer(new WsSci(), null);

        // 注册WebSocket处理Servlet,映射所有路径
        Tomcat.addServlet(context, "wsServlet", new org.apache.tomcat.websocket.server.WsServlet());
        context.addServletMappingDecoded("/*", "wsServlet");

        tomcat.start();
        tomcat.getServer().await();
    }
}

额外注意事项

  • Maven依赖配置示例:
<dependencies>
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-core</artifactId>
        <version>11.0.4</version>
    </dependency>
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-websocket</artifactId>
        <version>11.0.4</version>
    </dependency>
</dependencies>
  • 测试时执行命令websocat ws://localhost:8080/ws,发送消息即可验证连接是否正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 02:23:11