webSocket Demo

求一个webSocket Demo
如题,要求能运行就行,不报错。小弟在此先行谢过了webSocket Demo
邮箱:418791536@qq.com
各位大神,来吧,轰炸吧webSocket Demo
------解决思路----------------------
package com.mainaer.web;

import java.io.IOException;
import java.util.Hashtable;
import java.util.Map;
import java.util.Set;
import java.util.logging.Logger;

import javax.websocket.CloseReason;
import javax.websocket.CloseReason.CloseCodes;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.RemoteEndpoint;
import javax.websocket.Session;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
//注意此访问地址格式如:"ws://"+ window.location.host+"/${pageContext.request.contextPath}/game"是ws开头的,而不是以http:开头的.
@ServerEndpoint(value = "/game")
public class Scoket {

    private Logger logger = Logger.getLogger(this.getClass().getName());

    static Map<String,Session> sessionMap = new Hashtable<String,Session>();
    
    @OnOpen
    public void onOpen(Session session) {
     sessionMap.put(session.getId(), session);
     broadcastAll("message","gfsdfsdfdsgf");
    }

    @OnMessage
    public void onMessage(String unscrambledWord, Session session) {
     broadcastAll("message",unscrambledWord);
    }
    /**
     * 广播给所有人
     * @param message
     */
    public static void broadcastAll(String type,String message){
        Set<Map.Entry<String,Session>> set = sessionMap.entrySet();
        for(Map.Entry<String,Session> i: set){
            try {
             i.getValue().getBasicRemote().sendText("{type:'"+type+"',text:'"+message+"'}");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    @OnClose
    public void onClose(Session session, CloseReason closeReason) {
     sessionMap.remove(session.getId());
        logger.info(String.format("Session %s closed because of %s", session.getId(), closeReason));
    }
    
    @OnError
    public void error(Session session, java.lang.Throwable throwable){
     sessionMap.remove(session.getId());
        System.err.println("session "+session.getId()+" error:"+throwable);
    }
}



jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script src="http://lib.sinaapp.com/js/jquery/1.7.2/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
var socket =null;
$(function(){
function parseObj(strData){//转换对象
    return (new Function( "return " + strData ))();
};
//创建socket对象
socket = new WebSocket("ws://"+ window.location.host+"/${pageContext.request.contextPath}/game");
//连接创建后调用
socket.onopen = function() {
$("#showMsg").append("连接成功...<br/>");
};
//接收到服务器消息后调用
socket.onmessage = function(message) {
var data=parseObj(message.data);
if(data.type=="message"){
$("#showMsg").append("<span style='display:block'>"+data.text+"</span>");
}else if(data.type=="background"){
$("#showMsg").append("<span style='display:block'>系统改变背景地址,背景地址是:"+data.text+"</span>");
$("body").css("background","url("+data.text+")");
}
};
//关闭连接的时候调用
socket.onclose = function(){
alert("close");
};
//出错时调用
socket.onerror = function() {
alert("error");
};
$("#sendButton").click(function() {
socket.send($("#msg").val());
});
$("#abcde").click(function(){
$.post("${pageContext.request.contextPath}/backgroundimg");
});
});
</script>
</head>
<body>
<div id="showMsg" style="border: 1px solid; width: 500px; height: 400px; overflow: auto;"></div>
<div>
<input type="text" id="msg" /> 
<input type="button" id="sendButton" value="发送" />
<input type="button" value="改变背景" id="abcde" />
</div>
<script type="text/javascript"></script>
</body>
</html>



直接new一个工程  就可以用