Java WebSocket握手期间出错:意外响应代码:404
我正在尝试一个简单的websocket应用程序,但它给出了一个错误Java WebSocket握手期间出错:意外响应代码:404,java,apache,websocket,Java,Apache,Websocket,我正在尝试一个简单的websocket应用程序,但它给出了一个错误 WebSocket connection to 'ws://localhost:8080/WebSocketPrj02/chatroomServerEndpoint' failed: Error during WebSocket handshake: Unexpected response code: 404 我发现有很多关于同一主题的讨论,但这对我没有帮助,这就是为什么我发布了一个新问题 我的档案是, ChatroomSe
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();
}
}
package com.za.tutorial.websocket;
导入java.io.IOException;
导入java.io.StringWriter;
导入java.util.Collections;
导入java.util.HashSet;
导入java.util.Iterator;
导入java.util.Set;
导入javax.json.json;
导入javax.json.JsonObject;
导入javax.json.JsonWriter;
导入javax.websocket.OnMessage;
导入javax.websocket.OnOpen;
导入javax.websocket.Session;
导入javax.websocket.server.ServerEndpoint;
@ServerEndpoint(“聊天室ServerEndpoint”)
公共类聊天室服务器端点{
static Set chatroomUsers=Collections.synchronizedSet(new HashSet());
@奥诺彭
public void handleOpen(会话用户会话){
添加(用户会话);
}
@OnMessage
public void handleMessage(字符串消息,会话userSession)引发IOException{
字符串用户名=(字符串)userSession.getUserProperties().get(“userNmae”);
如果(用户名==null){
userSession.getUserProperties().put(“用户名”,用户名);
userSession.getBasicRemote().sendText(buildJsonData(“系统”,“您以“+消息”的形式连接”);
}否则{
迭代器迭代器=聊天室用户。迭代器();
while(iterator.hasNext()){
iterator.next().getBasicRemote().sendText(buildJsonData(用户名,消息));
}
}
}
私有字符串buildJsonData(字符串用户名、字符串消息){
JsonObject JsonObject=Json.createObjectBuilder().add(“message”,userName+:“+message”).build();
StringWriter StringWriter=新StringWriter();
try(JsonWriter-JsonWriter=Json.createWriter(stringWriter)){
write(jsonObject);
}
返回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>
Websocket2
var websocket=newwebsocket(“ws://localhost:8080/WebSocketPrj02/chatroomServerEndpoint”)
websocket.onmessage=函数processMessage(消息){
var jsonData=JSON.parse(message.data);
if(jsonData.message!=null){
messagesTextArea.value+=jsonData.message+“\n”;
}
}
函数sendMessage(){
发送(messageText.value);
messageText.value=“”;
}
我正在使用Spring工具套件apache-tomcat-7.0.37。
我浏览了相关的堆栈溢出帖子中给出的所有建议,但仍然不起作用。
我知道这很简单,但还是会出错。我完全被困在这里了。能请任何人帮我吗???问题终于解决了。我刚刚从Eclipse切换到Netbeans,从Apache tomcat切换到Glassfish,现在对我来说工作正常。404表示“未找到”,这意味着我必须将WebSocketServlet映射到web.xml文件上。。。但我不确定它将如何与您的框架一起工作。。。顺便说一下,我假设您是在自己的主机上部署的,而不是在服务器上,对吗?我是在本地主机上运行它的