WebSocket-java实现

摘要:
%@pagelanguage=“java”import=“java.util.*”pageEncoding=“ISO-8859-1”%>%3Stringpath=request.getContextPath();window.Webocket){return;40}else{41alert(“TheSocketsnoopen.”);formonsubmit=“returnfalse;

一、所需jar

WebSocket-java实现第1张

二、创建websocket.jsp(注意此页面链接,需要链接到自己的服务)

WebSocket-java实现第2张WebSocket-java实现第3张
 1 <%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
 2 <%
 3 String path = request.getContextPath();
 4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
 5 %>
 6 
 7 <html><head><title>Web Socket Client</title></head>
 8 <body>
 9 <script type="text/javascript">
10 var socket;
11 if (!window.WebSocket) {
12     window.WebSocket = window.MozWebSocket;
13 }
14 // Javascript Websocket Client
15 if (window.WebSocket) {
16     socket = new WebSocket("ws://192.168.1.168:8080/websocketDemo/ws?123123");
17     socket.onmessage = function(event) {
18         var ta = document.getElementById('responseText');
19         ta.value = ta.value + '
' + event.data
20     };
21     socket.onopen = function(event) {
22         var ta = document.getElementById('responseText');
23         ta.value = "Web Socket opened!";
24     };
25     socket.onclose = function(event) {
26         var ta = document.getElementById('responseText');
27         ta.value = ta.value + "Web Socket closed";
28     };
29     socket.onerror = function(event) {
30       onError(event);
31     };
32 } else {
33     alert("Your browser does not support Web Socket.");
34 }
35 // Send Websocket data
36 function send(message) {
37     if (!window.WebSocket) { return; }
38     if (socket.readyState == WebSocket.OPEN) {
39         socket.send(message);
40     } else {
41         alert("The socket is not open.");
42     }
43 }
44 </script>
45 <h3>Send :</h3>
46 <form onsubmit="return false;">
47 <input type="text" name="message" value="Hello World!"/><input type="button" value="Send Web Socket Data" onclick="send(this.form.message.value)" />
48 <h3>Receive :</h3>
49 <textarea id="responseText" style="500px;height:300px;"></textarea>
50 </form>
51 </body>
52 </html>
View Code

三、创建服务类WebSocketServer.java

WebSocket-java实现第4张WebSocket-java实现第5张
 1 package com.sh.test;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 
 6 import javax.servlet.jsp.tagext.TryCatchFinally;
 7 import javax.websocket.OnClose;
 8 import javax.websocket.OnError;
 9 import javax.websocket.OnMessage;
10 import javax.websocket.OnOpen;
11 import javax.websocket.Session;
12 import javax.websocket.server.ServerEndpoint;
13 
14 import org.springframework.asm.commons.TryCatchBlockSorter;
15 
16 /**
17  * WebSocket服务
18  *
19  */
20 @ServerEndpoint("/ws")
21 public class WebSocketServer{
22 
23     private static List<WebSocketServer> wslist = new ArrayList<WebSocketServer>();
24     
25     private Session session;
26     
27     public WebSocketServer() {
28     }
29     /**
30      * 连接后执行
31      * @param session
32      */
33     @OnOpen
34     public void onOpen(Session session) {
35         System.out.println("连接开启");
36         String str = session.getQueryString();//获取开启后的参数 链接?后面的字符串
37         wslist.add(this);
38         
39         this.session = session;
40     }
41     
42     /**
43      * 接到消息执行
44      * @param session
45      * @param msg
46      */
47     @OnMessage
48     public void message(Session session, String msg) {
49         for(WebSocketServer wss : this.wslist) {//可循环对所有人广播,也可单独对一人广播
50             if(wss.session != null && wss.session.isOpen()) {
51                 wss.session.getAsyncRemote().sendText(wss.session.getId()+" send msg "+msg);
52             }
53         }
54     }
55 
56     
57 
58     /**
59      * 关闭后执行执行
60      * @param session
61      */
62     @OnClose
63     public void onClose(Session session) {
64         System.out.println("连接关闭");
65         if(wslist.contains(this)) {
66             wslist.remove(this);
67         }
68     }
69     /**
70      * 关闭浏览器后执行
71      * @param t
72      */
73     @OnError
74     public void onError(Throwable t) {
75         if(wslist.contains(this)) {
76             wslist.remove(this);
77         }
78     }
79     
80     
81 }
View Code

四、创建测试方法TestController.java

WebSocket-java实现第6张WebSocket-java实现第7张
 1 package com.sh.test;
 2 
 3 import javax.servlet.http.HttpServletRequest;
 4 import javax.servlet.http.HttpServletResponse;
 5 
 6 import org.springframework.stereotype.Controller;
 7 import org.springframework.web.bind.annotation.RequestMapping;
 8 import org.springframework.web.bind.annotation.RequestMethod;
 9 
10 @Controller
11 public class TestController {
12     private void TestController() {}
13     @RequestMapping(value = "/ws", method = RequestMethod.GET)  
14        public String ws(HttpServletRequest request, HttpServletResponse response) {  
15               return "/websocket";  
16        }  
17 
18 }
View Code

五、使用TomCat7运行项目,即可通讯

http://192.168.1.168:8080/wstest/ws

免责声明:文章转载自《WebSocket-java实现》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇BlueTooth作为center使用总结Git查看、删除、重命名远程分支和tag(转)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

linux系统tomcat部署SpringBoot+vue前后端分离项目正式部署

如果还没有安装jdk、mysql、tomcat可以先参考我的另一篇博客,linux系统tomcat部署SpringBoot+vue前后端分离项目准备工作 如果准备工作已经做完了,那么就开始正式部署吧。 上一篇仅仅安装成功了,既没有创建数据库,也没有导入数据,也没有将前后台文件放上来,接下来就一一进行操作。 上传数据库的sql文件,上传方式在上一篇博客中有详...

WebSocket 详解教程

目录   概述  WebSocket 客户端  WebSocket 服务端  WebSocket 代理  FAQ  完整示例  资料 概述 WebSocket 是什么? WebSocket 是一种网络通信协议。RFC6455 定义了它的通信标准。 WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。 为什么...

cookie插件——cookie

使用cookie插件后,可以很方便地通过cookie对象保存、读取、删除用户的信息,还能通过cookie插件保存用户的浏览记录,它的调用格式为: 保存:$.cookie(key,value);读取:$.cookie(key),删除:$.cookie(key,null) 其中参数key为保存cookie对象的名称,value为名称对应的cookie值。 例如...

弄懂Favicon

当Alec Rust问及HTML5 Boilerplate项目是否可以提供切换成高DPI的favicon的时候,我才意识到我对网站图标(favorite icon),触摸图标(touch icons),和磁贴图标(tile icons)知之甚少。当我决定稍稍深究一下的时候却发现一些有趣的事情。 自从IE在1999年首次引入favicon以来,之后它就没再发...

Asp.NET导出Excel文件乱码解决若干方法 (转)

  Asp.NET导出Excel文件乱码解决若干方法 在Asp.NET开发过程中经常会将一些列表项目导出为Excel方便用户查看和保存,但是也经常遇到文件名乱码、文件内容乱码等问题。最近我也接到了这样的Bug,现总结了若干个解决办法,供遇到问题的朋友们参考一下。希望以下的某些方法可以解决您的问题。   程序逻辑及问题  前端点击导出Excel之后,从后台...

公用技术——数据格式——JSON——Jackson类库——序列化——属性,键映射关系

  通常情况下,对象的属性与JSON键的关系是一对一,键的顺序是根据属性的顺序,键的名称是与属性的名称保持一致的。 Jackson有很多注解可以修改以上三种关系。首先从属性名称与键名称开始。 1、名称 1.1     @JsonProperty 在属性上添加@JsonProperty注解,给value赋值可以修改对应的键名称,例如User对象存在name属...