Я пытаюсь простое приложение WebSocket, но его дает ошибку,Ошибка при WebSocket рукопожатия: Неожиданный код ответа: 404
WebSocket connection to 'ws://localhost:8080/WebSocketPrj02/chatroomServerEndpoint' failed: Error during WebSocket handshake: Unexpected response code: 404
я нашел много дискуссий по той же теме, но это не помогло мне, почему Я отправляю новый вопрос.
Мои файлы, ChatroomServerEndpoint.java
package com.za.tutorial.websocket;
import java.io.IOException;
import java.io.StringWriter;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import javax.json.Json;
import javax.json.JsonObject;
import javax.json.JsonWriter;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
@ServerEndpoint("chatroomServerEndpoint")
public class ChatroomServerEndpoint {
static Set<Session> chatroomUsers = Collections.synchronizedSet(new HashSet<Session>());
@OnOpen
public void handleOpen(Session userSession){
chatroomUsers.add(userSession);
}
@OnMessage
public void handleMessage(String message, Session userSession) throws IOException{
String userName = (String) userSession.getUserProperties().get("userNmae");
if(userName == null){
userSession.getUserProperties().put("userName", userName);
userSession.getBasicRemote().sendText(buildJsonData("System"," you are connected as "+message));
} else {
Iterator<Session> iterator = chatroomUsers.iterator();
while(iterator.hasNext()){
iterator.next().getBasicRemote().sendText(buildJsonData(userName, message));
}
}
}
private String buildJsonData(String userName, String message) {
JsonObject jsonObject = Json.createObjectBuilder().add("message", userName+": "+message).build();
StringWriter stringWriter = new StringWriter();
try(JsonWriter jsonWriter = Json.createWriter(stringWriter)){
jsonWriter.write(jsonObject);
}
return stringWriter.toString();
}
}
default.html
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Websocket2</title>
<script type="text/javascript">
var websocket = new WebSocket("ws://localhost:8080/WebSocketPrj02/chatroomServerEndpoint")
websocket.onmessage = function processMessage(message) {
var jsonData = JSON.parse(message.data);
if(jsonData.message != null){
messagesTextArea.value += jsonData.message +"\n";
}
}
function sendMessage() {
websocket.send(messageText.value);
messageText.value = "";
}
</script>
</head>
<body>
<textarea id="messagesTextArea" readonly="readonly" rows="10" cols="45"></textarea><br>
<input type = "text" id="messageText" size="50">
<input type="button" value="send" onclick="sendMessage();">
</body>
</html>
Я использую Spring Tool костюм, апач-TOMCAT-7.0.37. Я прошел через все предложения, указанные в соответствующем столбце переполнения, но все же его не работает. Я знаю его очень простой, но все же дающий ошибку. Я полностью застрял здесь. Может ли кто-нибудь помочь мне за это?
404 означает «Не найдено», что подсказывает мне, что мне пришлось сопоставить WebSocketServlet в файле web.xml ... Но я не уверен, как это будет работать с вашей инфраструктурой ... Кстати, я Предполагая, что вы развертываете свой собственный хост, а не на сервере, верно? – Martin
Я запускаю его на localhost – Sai