Javascript WebSocket连接失败:WebSocket握手期间出错:意外响应代码:404
我检查了很多答案,但无法解决此问题。任何人都可以使用java websocket帮助我解决此问题 Java index.htmlJavascript WebSocket连接失败:WebSocket握手期间出错:意外响应代码:404,javascript,java,spring,spring-boot,java-websocket,Javascript,Java,Spring,Spring Boot,Java Websocket,我检查了很多答案,但无法解决此问题。任何人都可以使用java websocket帮助我解决此问题 Java index.html 聊天 连接 发送 使用maven和依赖项包括: com.google.code.gson 格森 2.8.0 javax.websocket javax.websocket-api 1.1 使用ApacheTomcat8.0和Java8.0。我已经浪费了差不多两天了。请任何人帮帮我。 提前感谢。我建议在您的问题中包含有关错误消息和堆栈跟踪的更多信息。如果您给我您
聊天
连接
发送
使用maven和依赖项包括:
com.google.code.gson
格森
2.8.0
javax.websocket
javax.websocket-api
1.1
使用ApacheTomcat8.0和Java8.0。我已经浪费了差不多两天了。请任何人帮帮我。
提前感谢。我建议在您的问题中包含有关错误消息和堆栈跟踪的更多信息。如果您给我您的邮件id,我可以分享我的演示项目。我可能无法单独为您提供答案。如果stacktrace中有敏感信息,请将其清空。但重要的是要知道错误是发生在Java还是JS中,以及相关文件中的哪一行。
@ServerEndpoint(value = "/chat/{username}", decoders = MessageDecoder.class, encoders =MessageEncoder.class)
public class ChatEndPoint {
private Session session;
private static final Set<ChatEndPoint> chatEndpoints = new CopyOnWriteArraySet<ChatEndPoint>();
private static HashMap<String, String> users = new HashMap<String, String>();
@OnOpen
public void onOpen(Session session, @PathParam("username") String username) throws IOException, EncodeException {
System.out.println("connected");
this.session = session;
chatEndpoints.add(this);
users.put(session.getId(), username);
Message message = new Message();
message.setFrom(username);
message.setContent("Connected!");
broadcast(message);
}
@OnMessage
public void onMessage(Session session, Message message) throws IOException, EncodeException {
message.setFrom(users.get(session.getId()));
broadcast(message);
}
@OnClose
public void onClose(Session session) throws IOException, EncodeException {
chatEndpoints.remove(this);
Message message = new Message();
message.setFrom(users.get(session.getId()));
message.setContent("Disconnected!");
broadcast(message);
}
@OnError
public void onError(Session session, Throwable throwable) {
// Do error handling here
System.out.println(session.getId());
}
private static void broadcast(Message message) throws IOException, EncodeException {
chatEndpoints.forEach(endpoint -> {
synchronized (endpoint) {
try {
endpoint.session.getBasicRemote()
.sendObject(message);
}
catch (IOException | EncodeException e) {
e.printStackTrace();
}
}
});
}
}
var ws;
function connect() {
var username = document.getElementById("username").value;
var host = document.location.host;
var pathname = document.location.pathname;
ws = new WebSocket("ws://"+host+"/chat/" + username);
ws.onmessage = function(event) {
var log = document.getElementById("log");
console.log(event.data);
var message = JSON.parse(event.data);
log.innerHTML += message.from + " : " + message.content + "\n";
};
}
function send() {
var content = document.getElementById("msg").value;
var json = JSON.stringify({
"content":content
});
ws.send(json);
}
<html>
<head>
<title>Chat</title>
</head>
<body>
<table>
<tr>
<td colspan="2">
<input type="text" id="username" placeholder="Username"/>
<button type="button" onclick="connect();" >Connect</button>
</td>
</tr>
<tr>
<td>
<textarea readonly="true" rows="10" cols="80" id="log"></textarea>
</td>
</tr>
<tr>
<td>
<input type="text" size="51" id="msg" placeholder="Message"/>
<button type="button" onclick="send();" >Send</button>
</td>
</tr>
</table>
</body>
<script src="js/websocket.js"></script>
</html>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>javax.websocket</groupId>
<artifactId>javax.websocket-api</artifactId>
<version>1.1</version>
</dependency>