WebSocket的简单实现&jsp
2020-01-08 16:06:11来源:博客园 阅读 ()
WebSocket的简单实现&jsp
创建一个web项目
导入依赖:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.chu</groupId> <artifactId>webSocket</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <dependencies> <!-- servlet-api--> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> </dependency> <!-- websocket-api--> <dependency> <groupId>javax.websocket</groupId> <artifactId>javax.websocket-api</artifactId> <version>1.1</version> <!-- 设置作用域 默认compile 编译 测试 运行 provided 编译 测试 runtime 测试 运行 test 测试--> <scope>provided</scope> </dependency> <!-- JSON转换--> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.7.4</version> </dependency> </dependencies> <!-- <build>--> <!-- <plugins>--> <!-- maven自带的tomcat插件 需要配置对应的命令 tomcat7:run--> <!-- <plugin>--> <!-- <groupId>org.apache.tomcat.maven</groupId>--> <!-- <artifactId>tomcat7-maven-plugin</artifactId>--> <!-- <version>2.2</version>--> <!-- <configuration>--> <!-- <port>80</port>--> <!-- <path>/</path>--> <!-- <uriEncoding>UTF-8</uriEncoding>--> <!-- </configuration>--> <!-- </plugin>--> <!-- </plugins>--> <!-- </build>--> </project>
controller层代码:
package com.chu.controller; import com.fasterxml.jackson.databind.ObjectMapper; import javax.websocket.*; import javax.websocket.server.PathParam; import javax.websocket.server.ServerEndpoint; import java.io.IOException; import java.util.HashMap; import java.util.Map; /* 小楚想要发送信息给小赵 这个信息会先存储在服务器 再由服务器发送给小赵 */ @ServerEndpoint("/chat/{name}") public class ChatSocket { //定义一个Map集合,用来存放登陆到服务器的客户名称和Session private static Map<String,Session> mapMessage = new HashMap<>(); //首先,方法名称可以自定义 // *形参---name---Session @OnOpen//会话开始 public void onOpen(@PathParam("name")String name, Session session){ System.out.println("onOpen....."+name); //key-----name value-----session mapMessage.put(name,session); } //客户机信息处理 * 形参---Session session ---String message @OnMessage public void onMessage(Session session,String message){ System.out.println("onMessage....."+message); //服务端给客户端发消息,走的不是HTTP 而是直接推送过去了 //获取JSON对象 ObjectMapper mapper = new ObjectMapper(); try { //获取JSON格式的信息 Map<String,String> map = mapper.readValue(message, Map.class); //获取需要发送的信息:content String content = map.get("content"); //获取接收信息者:小赵 String receive = map.get("receive"); //从事先定义好的Map中获取小赵的Session Session receiveSession = mapMessage.get(receive); //如果小赵的Session为null if(receiveSession==null){ //响应:对方不在线 session.getAsyncRemote().sendText("对方不在线"); }else{ //否则将接收到的信息发送给小赵 receiveSession.getAsyncRemote().sendText(content); } } catch (IOException e) { e.printStackTrace(); } } //会话结束 @OnClose public void onClose(Session session){ System.out.println("onClose....."+session); } //会话出现异常 @OnError public void onError(Session session,Throwable e){ try { e.printStackTrace(); session.close(); } catch (IOException ex) { ex.printStackTrace(); } } }
jsp代码:
1 <body> 2 <div align="center" style="padding-top: 50px"> 3 4 发送者<input id="sendOut"><br> 5 6 接收者<input id="receive"><br> 7 8 信息<input id="content"><br> 9 10 <input type="button" value="注册" onclick="reg()"> 11 12 <input type="button" value="提交" onclick="sendmsg()"><br> 13 14 <span id="list"></span> 15 16 <script type="text/javascript"> 17 var ws; 18 // 注册按钮 19 function reg() { 20 // 注册路径 加上自己的用户名 21 ws = new WebSocket("ws://localhost:8080/chat/"+document.getElementById("sendOut").value) 22 //接收服务器信息并显示 23 ws.onmessage = function (msg) { 24 //接收服务器信息 25 var message = msg.data 26 //获取展示信息的位置 27 var former = document.getElementById("list") 28 former.innerHTML=former.innerHTML+"...他说"+message 29 } 30 } 31 function sendmsg() { 32 // 获取接收者 33 var receive = document.getElementById("receive").value 34 //获取发送的内容 35 var content = document.getElementById("content").value 36 //以JSON的方式发送到服务器 37 ws.send('{"receive":"'+receive+'","content":"'+content+'"}') 38 //获取展示信息的位置 39 var former = document.getElementById("list") 40 former.innerHTML=former.innerHTML+"...你说"+content 41 } 42 </script> 43 </div> 44 </body>
原文链接:https://www.cnblogs.com/cje330039879/p/12169115.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:JAVA多线程的基础
- DES/3DES/AES 三种对称加密算法实现 2020-06-11
- Linux简单命令的学习 2020-06-10
- 因为命名被diss无数次。简单聊聊编程最头疼的事情之一:命名 2020-06-10
- SpringBoot + Vue + ElementUI 实现后台管理系统模板 -- 后 2020-06-10
- Spring Boot 实现定时任务的 4 种方式 2020-06-10
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash