![](/img/trans.png)
[英]failed: Error during WebSocket handshake: Unexpected response code: 404
[英]java-server websocket failed: Error during WebSocket handshake: Unexpected response code: 404
我正在學習使用tomcat在Java中創建Web套接字服務器,
但是當我使用示例代碼運行tomcat9.0時,
我總是在chrome開發人員工具響應中收到以下錯誤。
**web socket failed: Error during WebSocket handshake: Unexpected response code: 404**
我查詢了很多參考資料,但仍然無法解決問題,
我使用的是tomcat9.0&jre 1.8.0,請參閱Blog 。
我創建服務器代碼(項目->新-> Servlet文件)是
package idv.yu;
import java.io.IOException;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
@ServerEndpoint(value = "/endpoint")
public class MyWebsocket {
@OnOpen
public void onOpen(Session session) {
System.out.println("onOpen::" + session.getId());
}
@OnClose
public void onClose(Session session) {
System.out.println("onClose::" + session.getId());
}
@OnMessage
public void onMessage(String message, Session session) {
System.out.println("onMessage::From=" + session.getId() + " Message=" + message);
try {
session.getBasicRemote().sendText("Hello Client " + session.getId() + "!");
} catch (IOException e) {
e.printStackTrace();
}
}
@OnError
public void onError(Throwable t) {
System.out.println("onError::" + t.getMessage());
}
}
我的項目樹結構如下:
在我的Chrome開發人員工具中,我設置了代碼
class WebSocketClient {
constructor(protocol, hostname, port, endpoint) {
this.webSocket = null;
this.protocol = protocol;
this.hostname = hostname;
this.port = port;
this.endpoint = endpoint;
}
getServerUrl() {
return this.protocol + "://" + this.hostname + ":" + this.port + this.endpoint;
}
connect() {
try {
this.webSocket = new WebSocket(this.getServerUrl());
//
// Implement WebSocket event handlers!
//
this.webSocket.onopen = function(event) {
console.log('onopen::' + JSON.stringify(event, null, 4));
}
this.webSocket.onmessage = function(event) {
var msg = event.data;
console.log('onmessage::' + JSON.stringify(msg, null, 4));
}
this.webSocket.onclose = function(event) {
console.log('onclose::' + JSON.stringify(event, null, 4));
}
this.webSocket.onerror = function(event) {
console.log('onerror::' + JSON.stringify(event, null, 4));
}
} catch (exception) {
console.error(exception);
}
}
getStatus() {
return this.webSocket.readyState;
}
send(message) {
if (this.webSocket.readyState == WebSocket.OPEN) {
this.webSocket.send(message);
} else {
console.error('webSocket is not open. readyState=' + this.webSocket.readyState);
}
}
disconnect() {
if (this.webSocket.readyState == WebSocket.OPEN) {
this.webSocket.close();
} else {
console.error('webSocket is not open. readyState=' + this.webSocket.readyState);
}
}
}
最后我在下面設置命令:
var client = new WebSocketClient('ws', '127.0.0.1', 8080, '/WebsocketDemo/endpoint');
client.connect();
但是我得到了錯誤:
有誰知道如何解決這個問題?
“ web.xml”是否必須設置任何內容?
我的web.xml是默認值,並且我檢查了項目在庫中有websocket-api.jar文件。
非常感謝你。
-編輯-
我的WebContent / Web-INF / web.xml內容如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>WebsocketDemo</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
404
中的WebSocket是不是從任何不同404
在HTTP,這意味着你要訪問的地址不能在服務器上找到。 在您的情況下,我認為它是關於/WebsocketDemo
部分。 /endpoint
在端點配置中可用,但缺少/WebsocketDemo
。 也許您應該將WAR部署在webapps的/WebsocketDemo
下,或刪除地址的這一部分。
我解決了這個問題,
進入月食→項目→構建自動檢查項目,
我的項目始終運行正確。
使用websocket並不是要放置其他jar文件,tomcat8,9在lib文件夾中有websocket jar。
謝謝@sepehr GH,@ Al1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.