NutzCN Logo
问答 tomcat8 websocket 404问题
发布于 1621天前 作者 qq_2bf722cc 2021 次浏览 复制 上一个帖子 下一个帖子
标签:

tomcat 8.5,jdk1.7,用官网默认配置,404。请问下,这个问题?

报错信息:

WebSocket connection to 'ws://localhost:8080/view' failed: Error during WebSocket handshake: Unexpected response code: 404

代码:

@ServerEndpoint(value = "/view", configurator= NutWsConfigurator.class)
@IocBean
public class ViewSocket extends AbstractWsEndpoint {

    public static ConcurrentHashMap<String, ViewSocket> viewSocketMap = new ConcurrentHashMap<>(1000);

    @Inject
    Dao dao;

    @Override
    public void onOpen(Session session, EndpointConfig config) {
        super.onOpen(session, config);
        viewSocketMap.put(session.getId(), this);
    }

    @Override
    public void onClose(Session session, CloseReason closeReason) {
        super.onClose(session, closeReason);
        viewSocketMap.remove(session.getId());
    }

    @Override
    public void onError(Session session, Throwable throwable) {
        super.onError(session, throwable);
        viewSocketMap.remove(session.getId());
    }

    public WsHandler createHandler(Session session, EndpointConfig config) {
        ViewWsHandler handler = new ViewWsHandler(roomPrefix);
        handler.setRoomProvider(roomProvider);
        handler.setSession(session);
        return handler;
    }

2019-11-15 16:29:36,537 [INFO][org.nutz.ioc.loader.annotation.AnnotationIocLoader] - Found 244 classes in 1 base-packages!
这个里面,没有注入ViewSocket

11 回复

SetUp 执行 sc.addEndpoint(ViewSocket.class);
报错:
javax.websocket.DeploymentException: Multiple Endpoints may not be deployed to the same path [/view] : existing endpoint was [class com.xxx.websocket.ViewSocket] and new endpoint is [class com.xxx.websocket.ViewSocket]

不需要addEndpoint

AnnotationIocLoader是加载ioc 配置,不是注入

我把这个去掉了也不行,错误是一样的。
sc.addEndpoint(ViewSocket.class);我是用来确定ViewSocket类是被扫描到了

如何判断"不行"的? 有nginx?

还是404,没有nginx,之前是tomcat8.5、jdk1.8 一样的后台和前端代码就没问题

context path 是空? 部署在ROOT了? 不然还得加上context path呢

jdk7 有问题也很正常啦...

请问下。jdk、tomcat都一样,自己随便写的一个类(没有使用nutz文档上的方法)websocket都可以连接,在nutz 的 web系统里面就不行,报404。感觉请求被拦截了?
只引入了一个jar,javaee-api7.0(provided)
这个是我自己实现的后台代码:

@ServerEndpoint("/websocket")
public class ViewSocket {

    public static ConcurrentHashMap<String, ViewSocket> viewSocketMap = new ConcurrentHashMap<>(1000);

    /**
     * 连接建立成功调用的方法
     * @param session  可选的参数。session为与某个客户端的连接会话,需要通过它来给客户端发送数据
     */
    @OnOpen
    public void onOpen(Session session){
        viewSocketMap.put(session.getId(), this);
    }

    /**
     * 连接关闭调用的方法
     */
    @OnClose
    public void onClose(Session session){
        viewSocketMap.remove(session.getId());
    }

    /**
     * 收到客户端消息后调用的方法
     * @param message 客户端发送过来的消息
     * @param session 可选的参数
     */
    @OnMessage
    public void onMessage(String message, Session session) {
        System.out.println("来自客户端的消息:" + message);
    }

    /**
     * 发生错误时调用
     * @param session
     * @param error
     */
    @OnError
    public void onError(Session session, Throwable error){
        System.out.println("发生错误");
        error.printStackTrace();
    }

web.xml里面的version属性太低

谢谢,大佬指点。可以了,tomcat8启动可以,tomcat7试了好多次都不行。

添加回复
请先登陆
回到顶部