2014-09-28 158 views
2

我正在嘗試按照this tutorial中給出的說明進行操作,並在Netbeans中創建示例應用程序。我已經達到了測試部分。當我在Chrome中運行應用程序,它說WebSocket握手期間出錯

WebSocket連接到 'WS://本地主機:8080/WhiteboardApp/whiteboardendpoint':WebSocket的握手過程中的錯誤 :失敗意外的響應代碼:404

的index.html

<!DOCTYPE html> 
<html> 
    <head> 
     <title>Start Page</title> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    </head> 
    <body> 
     <h1>Collaborative Whiteboard App</h1> 
     <div id="output"></div> 
     <script type="text/javascript" src="websocket.js"></script> 
    </body> 
</html> 

websocket.js

var wsUri = "ws://" + document.location.host + document.location.pathname + "whiteboardendpoint"; 
var websocket = new WebSocket(wsUri); 

websocket.onerror = function(evt) { onError(evt) }; 

function onError(evt) { 
    writeToScreen('<span style="color: red;">ERROR:</span> ' + evt.data); 
} 

// For testing purposes 
var output = document.getElementById("output"); 
websocket.onopen = function(evt) { onOpen(evt) }; 

function writeToScreen(message) { 
    output.innerHTML += message + "<br>"; 
} 

function onOpen(evt) { 
    writeToScreen("Connected to " + wsUri); 
} 
// End test functions 

MyWhiteboard.java

package org.myapps.whiteboardapp; 

import java.util.Collections; 
import java.util.HashSet; 
import java.util.Set; 
import javax.websocket.*; 
import javax.websocket.server.ServerEndpoint; 

@ServerEndpoint("/whiteboardendpoint ") 
public class MyWhiteboard { 
    private static Set<Session> peers = Collections.synchronizedSet(new HashSet<Session>()); 

    @OnMessage 
    public String onMessage(String message) { 
     return null; 
    } 

    @OnOpen 
    public void onOpen (Session peer) { 
     peers.add(peer); 
    } 

    @OnClose 
    public void onClose (Session peer) { 
     peers.remove(peer); 
    } 
} 

我在哪裏出了錯?我怎麼解決這個問題 ?

+0

我從教程中唯一的變化是,在創建項目時,我使用包作爲'org.myapps.whiteboardapp'而不是'org.sample.whiteboardapp'。但是,這不是問題的原因,我認爲 – 2014-09-28 14:23:09

+0

你設法解決這個問題? – Mj1992 2016-07-11 12:50:12

回答

0

您有一個無效的服務器註釋

修復此

@ServerEndpoint("/whiteboardendpoint ") 

@ServerEndpoint("/whiteboardendpoint") /* removed space */ 

你擁有了它當前定義的方式,你很可能只是改變你的JavaScript wsUri定義。 ..

var wsUri = "ws://" + document.location.host + document.location.pathname + 
      "whiteboardendpoint%20"; 
var websocket = new WebSocket(wsUri); 

並有它的工作。 (只是添加了一個URI編碼空間)

相關問題