Проблема с websocket Tomcat 9. Требуется помощь

155
09 апреля 2019, 20:20

Я пытаюсь написать свой первое клиент-серверное приложение, используя websocket и Tomcat 9 сервер. Этот пример я нашел в интернете. Tomcat отдает jsp файл, всё прогружается, но конкретно в 17 строчке,

var webSocket = new WebSocket("ws://localhost:8080/[nameOfTheClassWithWebSocket]/ws");

где инициализируется websocket - происходит ошибка:

"(index):17 WebSocket connection to 'ws://localhost:8080/JavaWebSocket/ws' failed: Error during WebSocket handshake: Unexpected response code: 404"

Пытался много туториалов чекать, по-итогу - пришел сюда с вопросом. Java код и jsp код представлены ниже.

Java код:

package socket;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.server.ServerEndpoint;
@ServerEndpoint("/ws")
public class WebSocketServerExample {
    @OnOpen
    public void onOpen(){
        System.out.println("Open Connection ...");
    }
    @OnClose
    public void onClose(){
        System.out.println("Close Connection ...");
    }
    @OnMessage
    public String onMessage(String message){
        System.out.println("Message from the client: " + message);
        String echoMsg = "Echo from the server : " + message;
        return echoMsg;
    }
    @OnError
    public void onError(Throwable e){
        e.printStackTrace();
    }
}

jsp файл:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
  <meta charset="UTF-8">
  <title>Tomcat WebSocket</title>
</head>
<body>
<form>
  <input id="message" type="text">
  <input onclick="wsSendMessage();" value="Echo" type="button">
  <input onclick="wsCloseConnection();" value="Disconnect" type="button">
</form>
<br>
<textarea id="echoText" rows="5" cols="30"></textarea>
<script type="text/javascript">
    var webSocket = new WebSocket("ws://localhost:8080/JavaWebSocket/ws");
    var echoText = document.getElementById("echoText");
    echoText.value = "";
    var message = document.getElementById("message");
    webSocket.onopen = function(message){ wsOpen(message);};
    webSocket.onmessage = function(message){ wsGetMessage(message);};
    webSocket.onclose = function(message){ console.log(message);};
    webSocket.onerror = function(message){ console.log(message);};
    function wsOpen(message){
        echoText.value += "Connected ... \n";
    }
    function wsSendMessage(){
        webSocket.send(message.value);
        echoText.value += "Message sended to the server : " + message.value + "\n";
        message.value = "";
    }
    function wsCloseConnection(){
        webSocket.close();
    }
    function wsGetMessage(message){
        echoText.value += "Message received from to the server : " + message.data + "\n";
    }
    function wsClose(message){
        echoText.value += "Disconnect ... \n";
    }
    function wserror(message){
        echoText.value += "Error ... \n";
    }
</script>
</body>
</html>

Answer 1

Решение было найдено. Проблема заключалась в том, что контекст, при загрузке через Intellij Idea сервера Tomcat, был localhost:8080, а в примере, в той самой злополучной строчке:

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

где JavaWebSocket - имя проекта, контекст был - localhost:8080/JavaWebSocket.

Если бы я запускал через Tomcat, предварительно, переместив все файлы на сервер, то, да, пример бы отработал корректно, но т..к я запускал его через Idea, то контекст был некорректным и, соответственно, была ошибка. т.е. все, что требовалось - это изменить проблемную строчку на

var webSocket = new WebSocket("ws://localhost:8080/ws");
READ ALSO
Обрезать не помещающийся текст в &ldquo;com.lowagie.text.pdf.PdfPCell&rdquo;

Обрезать не помещающийся текст в “com.lowagie.text.pdf.PdfPCell”

Делал проставление печати в pdf-файле и столкнулся с проблемой, что если добавить в ячейку текст, который явно не помещается в своей строке,...

191
Картинки из галереи в GridView Android Studio

Картинки из галереи в GridView Android Studio

Есть такая вот штука

170
Почему подсвечивает красным?

Почему подсвечивает красным?

Почему-то MealRepository repository подчёркнут красным жалуется на то что нет имплементации, а если её добавить то нечего не меняется

181