2014-09-28 210 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编码空间)

相关问题