【问题标题】:pass data between browser and java SE project using websocket使用 websocket 在浏览器和 java SE 项目之间传递数据
【发布时间】:2026-02-18 14:20:03
【问题描述】:

我使用 Java 和 JavaScript 创建了一个示例项目。 Java 用于创建服务器部分,JavaScript 用于创建客户端部分。我使用jetty 9.0.5 版开发javaSE 项目。 这是我的服务器部分:

package com.websocet;

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.websocket.server.WebSocketHandler;
import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory;


public class WebSocketTest {
    public static void main(String[] args) throws Exception {
        try{
        Server server = new Server(8080);
        WebSocketHandler wsHandler = new WebSocketHandler() {
            @Override
            public void configure(WebSocketServletFactory factory) {
                factory.register(MyWebSocketHandler.class);
            }
        };
        server.setHandler(wsHandler);
        server.start();        
        server.join();
        }catch(Exception e){
            System.out.println("Error "+ e);
        }
    }
}

这是我的 MyWebSocketHandler 类

package com.websocet;

import java.io.IOException;
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.OnWebSocketError;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketMessage;
import org.eclipse.jetty.websocket.api.annotations.WebSocket;

public class MyWebSocketHandler {

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

    @OnWebSocketError
    public void onError(Throwable t) {
        System.out.println("Error: " + t.getMessage());
    }

    @OnWebSocketConnect
    public void onConnect(Session session) {
        
        System.out.println("Connect: " + session.getRemoteAddress().getAddress());
        try {
            session.getRemote().sendString("Hello Webbrowser");
        } catch (IOException e) {
            System.out.println("Error -----" + e);
            e.printStackTrace();
        }
    }

    @OnWebSocketMessage
    public void onMessage(String message) {
        System.out.println("Message: " + message);
    }
}

这是我的客户部分:

console.log("start index.js");

var ws = new WebSocket("ws://localhost:8080/");

ws.onopen = function() {
    console.log("Opened!");
    ws.send("Hello Server");
};

ws.onmessage = function (evt) {
    console.log("Message: " + evt.data);
};

ws.onclose = function() {
    console.log("connection Closed...");
};

ws.onerror = function(err) {
    console.log("Error"+ err);
};

当我运行服务器部分时,它运行良好。

2015-12-11 12:02:31.081:INFO:oejs.Server:main: jetty-9.0.5.v20130815
2015-12-11 12:02:31.141:INFO:oejs.ServerConnector:main: Started ServerConnector@470e2030{HTTP/1.1}{0.0.0.0:8080}

但是在我运行客户端部分后,服务器抛出异常。

2015-12-11 12:02:42.055:WARN:oejs.HttpChannel:qtp769287236-18: /
org.eclipse.jetty.websocket.api.InvalidWebSocketException: com.websocet.MyWebSocketHandler does not implement org.eclipse.jetty.websocket.api.WebSocketListener or declare @WebSocket
    at org.eclipse.jetty.websocket.common.events.EventDriverFactory.wrap(EventDriverFactory.java:385)
    at org.eclipse.jetty.websocket.server.WebSocketServerFactory.acceptWebSocket(WebSocketServerFactory.java:177)
    at org.eclipse.jetty.websocket.server.WebSocketHandler.handle(WebSocketHandler.java:90)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
    at org.eclipse.jetty.server.Server.handle(Server.java:445)
    at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:268)
    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:229)
    at org.eclipse.jetty.io.AbstractConnection$ReadCallback.run(AbstractConnection.java:358)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:601)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:532)
    at java.lang.Thread.run(Thread.java:745)

我下载了 jetty-distribution-9.0.5.v20130815 并将其添加到 eclipse IDE。 我是网络套接字的新手。所以请帮我解决这个问题。我的目标是从我的 Web 浏览器中获取数据并将其传递到我的 JavaSE 项目中。如果有人知道这样做,请告诉我。

【问题讨论】:

  • 我猜你需要学会阅读输出:com.websocet.MyWebSocketHandler does not implement org.eclipse.jetty.websocket.api.WebSocketListener or declare @WebSocket

标签: javascript java eclipse websocket jetty-9


【解决方案1】:

我找到了我的问题的答案。我错过了一个注释。必须更正为 @WebSocket

@WebSocket
public class MyWebSocketHandler {

  ......

}

【讨论】: