Ошибка веб-сокета Java-сервера: Ошибка во время рукопожатия WebSocket: Неожиданный код ответа: 404 - PullRequest
0 голосов
/ 24 июня 2018

Я учусь создавать сервер веб-сокетов в 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());
    }
 }

Моя древовидная структура проекта:

enter image description here

В моем инструменте разработчика 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();

Но я получаю ошибку:

enter image description here

Кто-нибудь знал, как решить проблему?

должен ли "web.xml" что-то устанавливать?

мой web.xml является значением по умолчанию, и я должен был проверить, есть ли в проекте файл websocket-api.jar. enter image description here

Большое спасибо.

- редактировать -

содержимое моего 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>

Ответы [ 2 ]

0 голосов
/ 30 июня 2018

Я решил проблему,

Переход к затмению → Проект → сборка автоматически проверил элемент,

Мой проект работает правильно всегда.

Использование веб-сокета не позволяет помещать другой файл JAR, tomcat8,9 имеет JAR-файл Websocket в папке lib.

спасибо @sepehr GH, @ Al1

0 голосов
/ 25 июня 2018

404 в websocket ничем не отличается от 404 в HTTP, это означает, что адрес, который вы пытаетесь достичь, не найден на сервере.В вашем случае я думаю, что это примерно /WebsocketDemo часть./endpoint доступен в вашей конфигурации конечной точки, но отсутствует /WebsocketDemo.Возможно, вам следует развернуть вашу WAR под /WebsocketDemo в веб-приложениях или удалить эту часть адреса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...