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

Jetty WebSocket v11 连接失败问题求助

Jetty WebSocket v11 连接失败问题求助

大家好,我正在尝试实现一个纯Java的WebSocket服务器,希望客户端能通过地址 ws://localhost:4550/api/myWebSocket 连接,并且能触发MyWebSocketHandler里的日志输出,但目前连接似乎有问题,完全看不到Handler里的任何反馈。

下面是我的所有代码和依赖配置,麻烦各位帮忙排查下哪里出了问题🙏:

App 主启动类

package com.main;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;

public class App {
  public static void main(String[] args) {
    Server server = new Server(4550);
    ServletContextHandler context = new 
    ServletContextHandler(ServletContextHandler.SESSIONS);
    context.setContextPath("/api");
    server.setHandler(context);
    
    ServletHolder wsHolder = new ServletHolder(MyWebSocketServlet.class);
    context.addServlet(wsHolder, "/");
    
    try {
        server.start(); 
        server.join();
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        server.destroy();
    }
  }
}

MyWebSocketServlet 类

package com.main;

import org.eclipse.jetty.websocket.server.JettyWebSocketServlet;
import org.eclipse.jetty.websocket.server.JettyWebSocketServletFactory;

import jakarta.servlet.annotation.WebServlet;

@WebServlet(urlPatterns = "/myWebSocket")
public class MyWebSocketServlet extends JettyWebSocketServlet {
    @Override
    protected void configure(JettyWebSocketServletFactory factory) {
        factory.register(MyWebSocketHandler.class);
    }
}

MyWebSocketHandler 类

package com.main;

import org.eclipse.jetty.websocket.api.Session;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketClose;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketConnect;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketMessage;
import org.eclipse.jetty.websocket.api.annotations.WebSocket;

@WebSocket
public class MyWebSocketHandler {
    @OnWebSocketConnect
    public void onConnect(Session session) {
        System.out.println("Connected: " + session.getRemoteAddress());
    }

    @OnWebSocketMessage
    public void onMessage(Session session, String message) {
        System.out.println("Message received: " + message);
        try {
            session.getRemote().sendString("Echo: " + message);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @OnWebSocketClose
    public void onClose(Session session, int statusCode, String reason) {
        System.out.println("Closed: " + reason);
    }
}

Gradle 依赖配置

implementation 'org.eclipse.jetty:jetty-server:11.0.7'
implementation 'org.eclipse.jetty:jetty-servlet:11.0.7'
implementation 'org.eclipse.jetty.websocket:websocket-jetty-server:11.0.7'

我的核心要求是:必须用纯Java应用实现(不能用Spring Boot或其他框架),并且优先使用Jetty库来构建WebSocket服务。麻烦帮忙看看哪里配置出错了,导致客户端无法正常连接?

备注:内容来源于stack exchange,提问作者Biggy Poopa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 11:34:31