java使用webscoket小李子
2015-08-03 17:11
375 查看
准备工具:
tomcat7+
jdk7+ (webscoket是javaee7的新特性,所以必须版本是7及以上.)
创建一个名为webscoket的工程.
java文件如下:
创建一个注解为:@ServerEndpoint的webscoket的服务端.供前台访问.因为想实现点其它功能.所以在广播给所有人这个方法里边加上了type以备区分
注解说明图:
接下来是jsp页面.直接上代码..
基本上就可以简单的实现了多人聊天功能了.或者集体换背景图片功能.
自己感兴趣的可以根据实际业务需求做一定的扩展.
等工作空下来会做进一步的进阶.再发文章出来.
tomcat7+
jdk7+ (webscoket是javaee7的新特性,所以必须版本是7及以上.)
创建工程:
创建一个名为webscoket的工程.java文件如下:
01 | package org.temp; |
02 |
03 | import java.io.IOException; |
04 | import java.util.Hashtable; |
05 | import java.util.Map; |
06 | import java.util.Set; |
07 | import java.util.logging.Logger; |
08 |
09 | import javax.websocket.CloseReason; |
10 | import javax.websocket.CloseReason.CloseCodes; |
11 | import javax.websocket.OnClose; |
12 | import javax.websocket.OnError; |
13 | import javax.websocket.OnMessage; |
14 | import javax.websocket.OnOpen; |
15 | import javax.websocket.RemoteEndpoint; |
16 | import javax.websocket.Session; |
17 | import javax.websocket.server.PathParam; |
18 | import javax.websocket.server.ServerEndpoint; |
19 | //注意此访问地址格式如:"ws://"+ window.location.host+"/${pageContext.request.contextPath}/game"是ws开头的,而不是以http:开头的. |
20 | @ServerEndpoint (value = "/game" ) |
21 | public class Scoket { |
22 |
23 | private Logger logger = Logger.getLogger( this .getClass().getName()); |
24 |
25 | static Map<String,Session> sessionMap = new Hashtable<String,Session>(); |
26 |
27 | @OnOpen |
28 | public void onOpen(Session session) { |
29 | sessionMap.put(session.getId(), session); |
30 | } |
31 |
32 | @OnMessage |
33 | public void onMessage(String unscrambledWord, Session session) { |
34 | broadcastAll( "message" ,unscrambledWord); |
35 | } |
36 | /** |
37 | * 广播给所有人 |
38 | * @param message |
39 | */ |
40 | public static void broadcastAll(String type,String message){ |
41 | Set<Map.Entry<String,Session>> set = sessionMap.entrySet(); |
42 | for (Map.Entry<String,Session> i: set){ |
43 | try { |
44 | i.getValue().getBasicRemote().sendText( "{type:'" +type+ "',text:'" +message+ "'}" ); |
45 | } catch (Exception e) { |
46 | e.printStackTrace(); |
47 | } |
48 | } |
49 | } |
50 |
51 | @OnClose |
52 | public void onClose(Session session, CloseReason closeReason) { |
53 | sessionMap.remove(session.getId()); |
54 | logger.info(String.format( "Session %s closed because of %s" , session.getId(), closeReason)); |
55 | } |
56 |
57 | @OnError |
58 | public void error(Session session, java.lang.Throwable throwable){ |
59 | sessionMap.remove(session.getId()); |
60 | System.err.println( "session " +session.getId()+ " error:" +throwable); |
61 | } |
62 | } |
注解说明图:
接下来是jsp页面.直接上代码..
01 | <%@ page language="java" contentType="text/html; charset=UTF-8" |
02 | pageEncoding="UTF-8"%> |
03 | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> |
04 | < html > |
05 | < head > |
06 | < meta http-equiv = "Content-Type" content = "text/html; charset=UTF-8" > |
07 | < title >Insert title here</ title > |
08 | < script src = "http://lib.sinaapp.com/js/jquery/1.7.2/jquery.min.js" type = "text/javascript" ></ script > |
09 | < script type = "text/javascript" > |
10 | var socket =null; |
11 | $(function(){ |
12 | function parseObj(strData){//转换对象 |
13 | return (new Function( "return " + strData ))(); |
14 | }; |
15 | //创建socket对象 |
16 | socket = new WebSocket("ws://"+ window.location.host+"/${pageContext.request.contextPath}/game"); |
17 | //连接创建后调用 |
18 | socket.onopen = function() { |
19 | $("#showMsg").append("连接成功...< br />"); |
20 | }; |
21 | //接收到服务器消息后调用 |
22 | socket.onmessage = function(message) { |
23 | var data=parseObj(message.data); |
24 | if(data.type=="message"){ |
25 | $("#showMsg").append("< span style = 'display:block' >"+data.text+"</ span >"); |
26 | }else if(data.type=="background"){ |
27 | $("#showMsg").append("< span style = 'display:block' >系统改变背景地址,背景地址是:"+data.text+"</ span >"); |
28 | $("body").css("background","url("+data.text+")"); |
29 | } |
30 | }; |
31 | //关闭连接的时候调用 |
32 | socket.onclose = function(){ |
33 | alert("close"); |
34 | }; |
35 | //出错时调用 |
36 | socket.onerror = function() { |
37 | alert("error"); |
38 | }; |
39 | $("#sendButton").click(function() { |
40 | socket.send($("#msg").val()); |
41 | }); |
42 | $("#abcde").click(function(){ |
43 | $.post("${pageContext.request.contextPath}/backgroundimg"); |
44 | }); |
45 | }); |
46 | </ script > |
47 | </ head > |
48 | < body > |
49 | < div id = "showMsg" style = "border: 1px solid; width: 500px; height: 400px; overflow: auto;" ></ div > |
50 | < div > |
51 | < input type = "text" id = "msg" /> |
52 | < input type = "button" id = "sendButton" value = "发送" /> |
53 | < input type = "button" value = "改变背景" id = "abcde" /> |
54 | </ div > |
55 | </ body > |
56 | </ html > |
自己感兴趣的可以根据实际业务需求做一定的扩展.
等工作空下来会做进一步的进阶.再发文章出来.
相关文章推荐
- Spring 使用注解方式进行事务管理
- 使用Myeclipse进行简单webservice开发的示例
- 个人的spring配置的简单记录
- 常见逻辑问题java代码实现
- Java学习笔记------如何为文本输入框设置下凹效果?
- SpringMVC学习笔记
- spring mvc 环境搭建
- Mac安装JDK
- java多线程(二) 多线程的同步
- 读Spring的源代码七:spring.handlers的加载过程
- 内存溢出--java.lang.OutOfMemoryError: PermGen space
- 重学java23种设计模式(10)外观模式
- java poi导出execl类
- 学习笔记——Java核心技术之接口、继承与多态练习题
- java this & super
- JavaBean
- java ee 网页中图表的显示
- Java多线程
- maven入门笔记
- java容器练习题集合