分享好友 最新动态首页 最新动态分类 切换频道
SSM框架+WebSocket实现网页聊天(Spring+SpringMVC+MyBatis+WebSocket)
2024-12-26 11:54

建站不止于增删改查,还有很多很有魅力的地方。对于通信聊天这块已经青睐好久了,前段时间在做的j2ee项目运用到Spring+SpringMVC+MyBatis的框架集合,是关于一个社交平台的网站,类似于facebook,twitter,微博等。在做完基本的CURD(例如评论模块)后,开始研究网站通信并应用于项目中。



提到通信,大家都知道Socket。确实,运用Socket能在服务器与客户端之间建立一个数据交换的通道。之前用java SE写过的Socket通信 —模拟用户登录简单地实现了服务器与客户端传送消息。但是再细想一下,如果要在项目中实现网页聊天功能,把Socket用到j2ee项目中,或许就没那么简单了。这时转向baidu与google寻找答案,原来,有WebSocket这套协议,关于WebSocket,来自IBM这两篇文章已经介绍地很详细了:WebSocket 实战,使用 HTML5 WebSocket 构建实时 Web 应用。


Spring Framework 4 includes a new spring-websocket module with comprehensive WebSocket support. It is compatible with the Java WebSocket API standard (JSR-356) and also provides additional value-add as explained in the rest of the introduction.来自Spring官方文档:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/websocket.html

非常庆幸的是,在Spring 4.0以上开始支持WebSocket了,并给出一套API供开发者使用。

下面就开始讲解WebSocket如何应用于SSM框架,说明其中的工作原理,并在最后给出网页聊天效果图。


一.客户端(js)新建WebSocket对象,指定要进行握手连接的服务器地址

讲解

在新建WebSocket对象时,给出的参数字符串中ws表明协议使用的是WebSocket协议,socketPath就是要连接的服务器地址,在下文会进一步说明。
如果成功连接,就会执行onopen;如果连接失败,就会执行onerror;如果连接断开,就会执行onclose,如果服务器有消息发送过来,就会执行onmessage。


二.服务端导入Spring WebSocket相关jar依赖

讲解

关于SpringMVC,Mybatis的jar包依赖就不列出来了。本文重点为如何在SSM框架上应用WebSocket。


三.服务器添加WebSocket服务

讲解

1.首先说说上文提到的客户端指定握手连接的服务器地址:在jsp中定义socketPath为 String socketPath = request.getServerName()+”:”+request.getServerPort()+path+”/”;其中path的定义为 String path = request.getContextPath();相信做SSM项目的你们都很清楚了。getServerName()先得到服务器机的ip地址;getServerPort()得到相应的端口号;getContextPath()得到的是上下文路径,其实就是发布了的项目文件夹的文件名,我发布了的项目文件夹名为web,在这个文件夹下有META-INF,WEB-INF和一个默认的index.jsp,WEB-INF内的页面是不允许外界访问的,所以当我们要访问里面的jsp页面时唯一的方法就是通过springMVC的映射,不是吗?最后我把项目发布到远程服务器上并通过外网进行测试连接到的路径为: “ws://139.129.47.176:8089/web//ws”
2.我在139.129.47.176:8089/web/后面加上一些事先规定好的映射匹配字符就能访问页面。因此我总结的就是:139.129.47.176:8089/web/就能得到我Tomcat容器下的SpringIOC容器,里面都是我写好的controller,service接口对象。
3.注意到上面代码中有@Component注解,已经给出注释了,就是相当于告诉SpringMVC这是SpringIOC容器下管理的类,和@Controller注解其实是一样的,通过139.129.47.176:8089/web/能访问到Controller并做映射,通过139.129.47.176:8089/web/同样可以访问MyWebSocketConfig这个类在SpringIOC下的对象,从而服务端进行WebSocket服务。
4.写到这里,相信熟悉SSM运行流程的你们都应该懂WebSocket的路径了。
5.在上面的代码中出现到MyWebSocketHandler handler;与new MyHandShakeInterceptor()。其中handler规定了服务端WebSocket的处理。而MyHandShakeInterceptor是客户端与服务端握手连接前后拦截器。


四.握手拦截器MyHandShakeInterceptor

讲解

1.拦截的概念就是在一个操作前,与在这个操作后的两个时间切面将要进行的动作。

2.客户端与服务端握手连接前将键名”uid“,值为用户id的这个键值对加入到指定参数map中。为服务器建立与相应客户端连接的WebSocketSession打下基础。


五.MyWebSocketHandler,WebSocket处理器

讲解

1.这个处理器的@Component注解就是告诉Spring将这个类的对象注入到IOC容器中,这样在MyWebSocketConfig中才可以通过@Autowired将其自动装载,进而使用。
2.简单地说说这个处理器,握手实现连接后会执行afterConnectionEstablished()方法,这个方法就是将握手连接后为与客户端实现通信而建立的WebSocketSession加入到静态变量userSocketSessionMap中。
3.当客户端断开连接后会执行afterConnectionClosed(),这时需要将与客户端对应的WebSocketSession从userSocketSessionMap中移除,原因已在注释中给出,简直血的教训,调试了好久才发现….
4.客户端一有消息发送至服务器就会自动执行handleMessage()方法,其中Message msg=new Gson().fromJson(webSocketMessage.getPayload().toString(),Message.class);将JSON形式的数据解析成Message对象,Message的定义稍后给出。
5.服务器发送信息至客户端只需要一句话,就是通过在服务器中WebSocketSession的sendMessage()方法,详情都在代码中。


六.客户端发送信息与接受信息

发送

接收

讲解

  1. 发送信息时需要将对象转换为JSON形式的数据,因为服务器本来就是将JSON数据转换成对象的。
  2. 客户端接收信息时将数据解析成JSON形式后就能在js中获取相应的数据。

 七.Message类

最新文章
科大新闻 | 智能时代新文科本科教学论坛成功举办
12月8日,由中国科学技术大学人文与社会科学学院主办的智能时代新文科本科教学论坛在东校区人文楼顺利举行。专家学者共同探讨本科教学中的创新应用、课程设计优化、人才培养模式变革等核心议题,助力智能时代新文科本科教学的高质量发展。
移动硬盘删除的文件夹怎么恢复?这几招,真应该提早知道的
移动硬盘删除的文件夹怎么恢复?移动硬盘作为便携式存储设备,广泛应用于我们的工作、学习和生活中。但是,在使用过程中,不小心删除了重要文件夹的情况也时有发生。为了找回丢失误删的文件夹,接下来,我们会为你介绍一些实用的恢复方法,
盖世小鸡GameHub:手机变身PC游戏神器!
在数字娱乐飞速发展的今天,游戏行业逐渐突破了传统的设备限制,玩家的选择也愈加多样化。最近,国内知名模拟器品牌盖世小鸡宣布推出一款名为GameHub的PC模拟器应用,标志着手机游戏体验的一个重大突破。据悉,该应用预计将在2024年春节前
网络推广的方法有哪些?这几个方法效果好!
网络推广的方法有哪些?这几个方法效果好!网络推广的方法有哪些?这几个方法效果好!网络推广是当今企业竞争中的重要手段之一,它能帮助企业快速扩大知名度,提升品牌影响力。本文将介绍几种常见的网络推广方法,并分析这几个方法的效果。
微信小程序用户破9亿,月活超8亿领域曝光!
微信小程序用户规模持续扩大,活跃度显著提升。最新统计数据显示,直至今年十月,微信小程序的累计用户数已突破9.49亿大关。这一数字不仅彰显了微信小程序在用户群体中的广泛影响力,也反映出其日益增长的受欢迎程度。在用户行为方面,微信
绝了,2024 最新百度网盘/阿里云盘/夸克网盘/迅雷云盘网盘资源搜索神器,全网资源任你搜...
今天分享几个2024最新阿里云盘/百度网盘/夸克网盘/迅雷云盘资源搜索神器网站和app,全网资源任你搜,无需注册使用,关键还免费,网站和app地址在公众号后台对话框回复 网盘第1个混合盘,一个搜索网站规则引
正在阅读:翻新机旧芯换新壳 360优化大师一键验真翻新机旧芯换新壳 360优化大师一键验真
  随着双十一电商热潮的临近,各大电商渠道、3C卖场均掀起了一番智能机购机潮,面对此般热潮,一些占据价格优势的水货及翻新机产品也就此浑水摸鱼,对于一些不懂行的消费者而言,就很容易陷入商家的陷阱之中。  往往购机后被曝出各种质
高测股份
高测股份(688556)业绩预告公告日期2024-02-27报告期2023-12-31类型预增业绩预告摘要预计2023年1-12月归属于上市公司股东的净利润为:1461450211.57元,与上年同期相比变动幅度:85.32%。业绩预告内容预计2023年1-12月归属于上市公司股东的
word一键生成ppt 分页_如何将word快速生成PPT
许多人的制作方法或许都是这样的: 第一步:新建一个空白的PPT文件 第二步:把word文档中的内容一点一点的复制在PPT文件中 第三步:对PPT文件排版如果是你,你也会是这样操作的吗? 实际上,完
谷歌搜索引擎优化(SEO)入门指南
随着互联网的快速发展,搜索引擎优化(SEO)已成为众多企业和个人网站不可或缺的一部分。SEO能够帮助您的网站在搜索引擎结果页(SERP)中获得更高的排名,从而增加曝光率和流量,提高销售和品牌知名度。在本文中,我们将向您介绍SEO的基本
相关文章
推荐文章
发表评论
0评