2014-10-13 2 views
1

Я пытаюсь простое приложение 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. Я прошел через все предложения, указанные в соответствующем столбце переполнения, но все же его не работает. Я знаю его очень простой, но все же дающий ошибку. Я полностью застрял здесь. Может ли кто-нибудь помочь мне за это?

+0

404 означает «Не найдено», что подсказывает мне, что мне пришлось сопоставить WebSocketServlet в файле web.xml ... Но я не уверен, как это будет работать с вашей инфраструктурой ... Кстати, я Предполагая, что вы развертываете свой собственный хост, а не на сервере, верно? – Martin

+0

Я запускаю его на localhost – Sai

ответ

0

И наконец проблема решена. Я просто переключился с Eclipse на Netbeans и с Apache tomcat на Glassfish, теперь это работает отлично для меня.

Смежные вопросы