Я пытаюсь написать свой первое клиент-серверное приложение, используя 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>
Решение было найдено. Проблема заключалась в том, что контекст, при загрузке через 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");
Виртуальный выделенный сервер (VDS) становится отличным выбором
Делал проставление печати в pdf-файле и столкнулся с проблемой, что если добавить в ячейку текст, который явно не помещается в своей строке,...
На данный вопрос уже ответили:
Почему-то MealRepository repository подчёркнут красным жалуется на то что нет имплементации, а если её добавить то нечего не меняется