Я учусь создавать сервер веб-сокетов в Java с tomcat,
но когда я запускаю tomcat9.0 с примером кода,
Я всегда получаю сообщение об ошибке ниже в ответе инструмента разработчика Chrome.
**web socket failed: Error during WebSocket handshake: Unexpected response code: 404**
Я запрашиваю большую ссылку, я все еще не решаю проблему,
Я использую tomcat9.0 & jre 1.8.0, и я ссылаюсь на блог .
Я создаю код сервера (проект -> новый -> файл сервлета)
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>