一尘不染

WebSocket 404错误

tomcat

我正在尝试在我的网站上实现WebSocket。在基础教程之后,我添加了此类:

@ServerEndpoint(value="/websocketendpoint")
public class WebSocket {
    private static Set<Session> peers = Collections.synchronizedSet(new HashSet<Session>());

    @OnMessage
    public String onMessage(String message){ return null; }

    @OnOpen
    public void onOpen(Session peer){ peers.add(peer); }

    @OnClose
    public void onClose(Session peer){ peers.remove(peer); }
}

而这个JS:

var wsUri = "ws://" + document.location.host + document.location.pathname + "websocketendpoint";
var ws = new WebSocket(wsUri);
ws.onopen = function(){
    ws.send("Message to send");
    alert("Message is sent...");
};
ws.onmessage = function (evt){   
    var received_msg = evt.data;
    alert("Message is received...");
};
ws.onclose = function(){ 
    alert("Connection is closed...");
};

我将js添加到我的页面之一中,并且仅ws.onclose被调用,在控制台中出现以下错误:

Firefox:Firefox无法在ws:// localhost:8080 / Mysite /
websocketendpoint建立与服务器的连接

Chrome:WebSocket握手期间出错:意外的响应代码:404

我尝试使用“ ws://echo.websocket.org”作为wsUri它,并且可以正常工作,所以我想问题出在服务器端。

我正在使用以下库: javaee-api-7.0,javax.websocket-api-1.0 我的浏览器与websocket兼容(已检查)

类似的主题对我没有帮助,所以我要求您提出有关如何解决问题的建议


阅读 198

收藏
2020-06-16

共1个答案

一尘不染

您可能要检查这是否是错误的根源:tomcat 7.0.50 java
webscoket实现产生404错误

从7.0.47版本开始,Tomcat具有JSR-356(即websocket API)实现。它还提供了javax.websocket- api-1.0.jar库,因此您的应用程序不需要此库。您可能在编译时需要它,但是服务器会在运行时提供它(provided如果您不熟悉该工具,那么这在Maven中就意味着范围)

确保javax.websocket- api-1.0.jar未在WAR中部署,在Eclipse服务器视图中右键单击,Clean...然后单击Clean Tomcat work directory...a Publish,然后重试。

2020-06-16