2017-06-28 3 views
0

私はJavaのWebソケットと簡単なチャットをしていますが、これはうまくいかず、理由を理解できません。シンプルな書き込みログTomcatでWebソケットアプリケーションを起動するには?

Serverクラス:

@ApplicationScoped 
@ServerEndpoint(value = "/index")// May be this mapping but it's don't work. 
public class ChatServer { 
    private static final Logger LOGGER = 
      Logger.getLogger(ChatServer.class.getName()); 

    @OnOpen 
    public void onOpen(Session session) { 
     LOGGER.log(Level.INFO, "New connection with client: {0}", 
       session.getId()); 
    } 

    @OnMessage 
    public String onMessage(String message, Session session) { 
     LOGGER.log(Level.INFO, "New message from Client [{0}]: {1}", 
       new Object[] {session.getId(), message}); 
     return "Server received [" + message + "]"; 
    } 

    @OnClose 
    public void onClose(Session session) { 
     LOGGER.log(Level.INFO, "Close connection for client: {0}", 
       session.getId()); 
    } 

    @OnError 
    public void onError(Throwable exception, Session session) { 
     LOGGER.log(Level.INFO, "Error for client: {0}", session.getId()); 
    } 
} 

は、私は単純なクライアントがあります。

<html> 
<head> 
    <title>JEE7 WebSocket Example</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<script> 
     var chatClient = new WebSocket("ws://localhost:8080/index"); 

     chatClient.onmessage = function(evt) { 
      var p = document.createElement("p"); 
      p.setAttribute("class", "server"); 
      p.innerHTML = "Server: " + evt.data; 
      var container = document.getElementById("container"); 
      container.appendChild(p); 
     }; 
     function send() { 
      var input = document.getElementById("message"); 
      var p = document.createElement("p"); 
      p.setAttribute("class", "client"); 
      p.innerHTML = "Me: " + input.value; 
      var container = document.getElementById("container"); 
      container.appendChild(p); 
      chatClient.send(input.value); 
      input.value = ""; 
     } 
    </script> 
</head> 
<body> 
<h1>JEE7 WebSocket Example</h1> 
<div id="container"> 

</div> 
<input type="text" id="message" name="message" /> 
<button type="button" id="send" onclick="send()">Send</button> 
</body> 
</html> 

をしかし、私はTomcatを起動したとき、私は、コード404を持っています。私は私のプロジェクトで何かの部分(クラスまたはいくつかの設定ファイル)の十分ではないと思う。

これは私のプロジェクトの構造である: enter image description here

使ったことがないように、すべてのクラスChatServerマーク。私はこれが正常ではないと思う。私のプロジェクトでは何が欠けていますか?この問題を解決するのに役立ちます。ありがとうございました。

答えて

1

あなたはwebsocketでappnameについて言及していませんでした。

            //here 
var chatClient = new WebSocket("ws://localhost:8080/appname/index"); 

私は、これはあなたがappnameのために意味あなたのタイプミスミス

+0

あると思いますか?これは、tomcatの名前です。実行/デバッグの設定、またはMavenプロジェクトのモジュール名などですか? – Pavel

+1

平均プロジェクト名、あなたは単にページ名を挙げていましたが、localhost:8080には多くのプロジェクトがあり、インデックスページを含むプロジェクトを定義しています。 –

+0

私はこのモジュール名のために/ web-base /を追加しましたが、jsコンソールにエラーが発生しました:chat.html:27 'ws:// localhost:8080/web-base/index'へのWebSocket接続に失敗しました:Error WebSocketハンドシェイク中:予期しない応答コード:404 – Pavel

関連する問題