Java WebSocket握手期间出错:意外响应代码:404

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应用程序,但它给出了一个错误

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文件上。。。但我不确定它将如何与您的框架一起工作。。。顺便说一下,我假设您是在自己的主机上部署的,而不是在服务器上,对吗?我是在本地主机上运行它的