java - WebSocket握手时出错: Unexpected response code: 404

标签 java apache websocket

我尝试了一个简单的 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();
    }
}

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 Suit,apache-tomcat-7.0.37。 我浏览了相关堆栈溢出帖子中给出的所有建议,但仍然不起作用。 我知道它很简单但仍然给出错误。我完全被困在这里了。请任何人帮我解决这个问题吗?

最佳答案

问题终于解决了。我刚刚从 Eclipse 切换到 Netbeans,从 Apache tomcat 切换到 Glassfish,现在它对我来说工作得很好。

关于java - WebSocket握手时出错: Unexpected response code: 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26339242/

相关文章:

java - Junit 和 spring websockets - 每次测试后我都会得到一个奇怪的异常

javascript - Socket IO 1.2 查询参数

java - JAXB - 如果为 false,则抑制 boolean 属性

java - 由于java中的某些条件,如何调用函数来延迟执行?

Java java.util.logging 记录器与 HSQLDB 结合的奇怪行为

apache - Liferay 的 SOLR 插件有什么用?

php - 如何使用 php 中的 pid 终止 linux 进程?

php - 寻找用于 windows 的 SMTP 服务器

spring - 通过 HTTPS 使用 Spring Boot 1.0.0.RC5 和 tomcat 8.0.3 的 Websocket

java - Spring MVC、Spring Security、数据库控制的页面访问