JSR356标准Java WebSocket

使用Tomcat 启动war包时报Not running on Jetty, JSR-356 support unavailable 错误 + vue项目发布在tomcat 打成WAR包在TOMCAT启动,报上述错 将JETTY相关依赖注释掉 <!-- <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jetty</artifactId> <scope>${jetty.scope}.. 阅读详情

http://redstarofsleep.iteye.com/blog/1974620

之前几次写WebSocket的例子都是基于某个特定的容器(Tomcat,Jetty),而现在,Oracle发布了JSR356规范,WebSocket的Java API得到了统一,所以只要Web容器支持JSR356,那么我们写WebSocket时,代码都是一样的了.Tomcat从7.0.47开始支持JSR356.另外有一点要说明的是JDK的要求是7及以上

 

JSR356实现WebSocket有两种方式,一种是使用注解的,另一种是继承javax.websocket.Endpoint类,推荐方式是使用注解,我这里也就写的注解的例子:

 

Java代码   收藏代码
  1. @ServerEndpoint(value = "/websocket/{user}")  
  2. public class MyServerEndpoint {  
  3.       
  4.     private Session session;  
  5.     private static final Logger sysLogger = Logger.getLogger("sysLog");  
  6.       
  7.     @OnOpen  
  8.     public void open(Session session,  @PathParam(value = "user")String user) {  
  9.         this.session = session;  
  10.           
  11.         sysLogger.info("*** WebSocket opened from sessionId " + session.getId());  
  12.     }  
  13.       
  14.     @OnMessage  
  15.     public void inMessage(String message) {  
  16.         sysLogger.info("*** WebSocket Received from sessionId " + this.session.getId() + ": " + message);  
  17.     }  
  18.       
  19.     @OnClose  
  20.     public void end() {  
  21.         sysLogger.info("*** WebSocket closed from sessionId " + this.session.getId());  
  22.     }  
  23.       
  24.   
  25. }  

 

  服务端的代码呢就这么多,没有其它的代码了.

  首先给类加上@ServerEndpoint注解,标示出这是一个WebSocket的Server端,这个注解的一个属性value="xxx"是访问这个websocket的url,这个url还可以带参数,用过Spring3MVC的应该很熟悉,我现在的这个例子客户端访问这个websocket的url就是: ws://localhost:8080/webserver/websocket/user1,user1是参数,在下面的方法open,close等都可以直接访问这个参数.

 

  然后是open方法上的注解onOpen,这个当一个客户端连上来时触发,每个客户端会被分配一个session,这个session可不是httpsession.open方法里有个参数user被加上了注解@PathParam(value = "user")String user,这个就是从url中获取user的方式.

 

  另外两个onClose和onMessage也不用多解释了,一个是客户端断开时触发,一个是收到客户端发送的消息时触发.

 

  最后要发送消息给客户端得调用session.getBasicRemote().sendText("msg").

 

  恩,就这么多了.

  这样一个最基本的WebSocket服务端就完成了.客户端的话原来的HTML5的可以直接连,这里也贴一下吧:

Html代码   收藏代码
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"    
  2.     pageEncoding="UTF-8"%>    
  3. <!DOCTYPE html>    
  4. <html>    
  5. <head>    
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">    
  7. <title>Index</title>    
  8. <script type="text/javascript">    
  9. var ws = null;    
  10. function startWebSocket() {    
  11.     if ('WebSocket' in window)    
  12.         ws = new WebSocket("ws://localhost:8080/wsoc/mywebsocket.do");    
  13.     else if ('MozWebSocket' in window)    
  14.         ws = new MozWebSocket("ws://localhost:8080/wsoc/mywebsocket.do");    
  15.     else    
  16.         alert("not support");    
  17.         
  18.         
  19.     ws.onmessage = function(evt) {    
  20.         alert(evt.data);    
  21.     };    
  22.         
  23.     ws.onclose = function(evt) {    
  24.         alert("close");    
  25.     };    
  26.         
  27.     ws.onopen = function(evt) {    
  28.         alert("open");    
  29.     };    
  30. }    
  31.     
  32. function sendMsg() {    
  33.     ws.send(document.getElementById('writeMsg').value);    
  34. }    
  35. </script>    
  36. </head>    
  37. <body onload="startWebSocket();">    
  38. <input type="text" id="writeMsg"></input>    
  39. <input type="button" value="send" onclick="sendMsg()"></input>    
  40. </body>    
  41. </html>    

 

另外JSR356也有客户端,也就是说,也可以用Java代码来写一个WebSocket客户端,具体的下回研究了再写吧..

 

转载请注明出处

6 

使用JSR356在Java中构建WebSocket应用 使用JSR356在Java中构建WebSocket应用,详细介绍,包括1.服务器推送给客户端和2.客户端发送给服务器 立即下载

相关推荐

别再只盯着GPS了!手把手教你用Python仿真UWB定位,30厘米精度是怎么算出来的?

本文详细解析了UWB(超宽带)室内定位技术的原理与实现,通过Python代码演示如何从三边测量法到实现30厘米精度的定位。文章涵盖了UWB的核心数学模型、Python仿真环境搭建、误差分析及优化策略,为开发者提供了实用的技术指南和应用场景。

weixin_26873711的博客 253

Failed to destroy the filter named [Tomcat WebSocket (JSR356) Filter] of type [org.apache.tomcat.web

SpringBoot启动时报错Failed to destroy the filter named [Tomcat WebSocket (JSR356) Filter] of type [org.apache.tomcat.websocket.server.WsFilter] 2020-02-02 15:51:59.600 ERROR 5752 — [ main] o.a.c....

qq_44753286的博客 2万+

用AI生成React/Vue页面?实测Locofy等5款工具,教你选最适合的

本文深度评测了2024年五大AI生成前端页面工具,包括Locofy、Builder.io等,从代码质量、可视化编辑器成本到企业级落地方案进行全面分析。通过实测数据和实战案例,揭示如何利用AI生成技术高效创建React/Vue页面,提升开发效率并优化性能。

m5n6o7的博客 608

jeecg Failed to destroy the filter named [Tomcat WebSocket (JSR356) Filter]

jeecgboot在启动时报 [Tomcat WebSocket (JSR356) Filter],主要是因为端口8080被占用了,才会导致启动失败,所以会经常出现,开发环境启动没有问题但是部署的时候启动有问题的现象。 2021-09-30 13:23:54.427 [main] INFO org.apache.coyote.http11.Http11NioProtocol:173 - Pausing ProtocolHandler ["http-nio-8080"] 2021-09-30 13:23:5

前行的博客 9899

(MATLAB)一维信号峰值检测findpeaks

一维信号波峰波谷检测,峰值、峰宽、到达时间计算。MATLAB自带的findpeaks函数能完成这一任务,在这里分享其基本用法与特殊用法。

HPC_ZY 2万+

歪枣网股票数据下载接口汇总一

歪枣网上下载接口动态信息如下: 接口名称:A股列表,接口描述:沪深京A股基本信息,接口地址:/doc/getStockHSABaseInfo?code=all&fields=code,name,stype,hsgt,bk,roe,zgb,ltgb&export=0&token= 请求参数描述: 参数名:code,参数描述:股票代码,支持批量查询,用逗号分隔,每次最多30个;若为all,则表示全部,即可获取任意一天内的所有数据。 请求参数描述: 参数名:fields,参数描述:数据字段

waizaowang的博客 2731

Not running on Jetty, JSR-356 support unavailable分析与解决

Not running on Jetty, JSR-356 support unavailable分析与解决

简单就是美! 3104

AI 生成 CAN 通信测试用例实战

本文分享了AI辅助汽车电子测试用例编写的实战经验。通过某车企CAN网络测试项目案例,对比传统方式(需27天)与AI辅助方式(仅5天)的效率差异,展示81%的效率提升。文章详细介绍了从DBC文件提取信号信息的方法,包括DBC文件结构解析、信号定义说明,并提供了完整的Python解析脚本代码,可将信号信息导出为JSON或Excel格式,为后续AI批量生成测试用例奠定基础。

小明的博客 695

JSR356标准Java WebSocket的使用示例(Tomcat9.0.6)

本篇记录说明 JSR356标准Java WebSocket的使用示例(Tomcat9.0.6) 一、前言 传统的HTTP协议是无状态的,每次请求(request)都要由客户端(如 浏览器)主动发起,服务端进行处理后返回response结果,而服务端很难主动向客户端发送数据;这种客户端是主动方,服务端是被动方的传统Web模式 对于信息变化不频繁的Web应用来说造成的麻烦较小,而对于涉及实时信息的...

qq_39686941的博客 771

Mac用户解决WPS中的俄语显示红线问题(WPS添加外语拼写检查)

我所使用的WPS版本:AppleStore 下载的 MacOs版 3.3.0 首先,对于 在访达-应用程序中,找到WPS,右键-点击“显示包内容” 然后按照下图的索引目录(Contents\Resource\office6\dicts\spellcheck),最后进入一个叫“spellcheck”的文件夹 最后将下载好的字典包(例如上图中的 en_US就代表美式英语;ru_RU就代表俄语) 关于字典包资源下载,我在网上找到一个Google云盘,里面包含了法语,德语,西语,意大利语,葡萄牙.

qq_48159150的博客 7900

安装openclaw时出现node.exe : npm error code EIDLETIMEOUT的解决方案

本文主要介绍了安装openclaw时出现node.exe : npm error code EIDLETIMEOUT的解决方案,希望能对学习使用openclaw的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 11万+

websocket java api_基于Java API for WebSocket (JSR-356)的标准websocket客户端

importxxx.service.CacheService;importlombok.extern.slf4j.Slf4j;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.beans.factory.annotation.Value;importorg.springfra...

weixin_30945845的博客 142

UniRx之基本语法格式

想要更好的去学习UniRx,我们最好是先理解UniRx 的语法格式。就像我们去学习英语或者汉语一样,理解了基本的语法规则后,再学其他的就信手拈来了。

TxNet 925

java mysql websocket_基于Java API for WebSocket (JSR-356)的标准websocket客户端

importxxx.service.CacheService;importlombok.extern.slf4j.Slf4j;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.beans.factory.annotation.Value;importorg.springfra...

weixin_39983384的博客 177

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

JSR356标准Java WebSocket实例,包含JAVA客户端与浏览器js客户端

Java Websocket实例 博客分类:  java websocket javawebsockethtml5  记录下自己在用的websocket   介绍 现很多网站为了实现即时通讯,所用的技术都是轮询(polling)。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP request,然后由服务器返回最新的数据给客服端的浏

evilcry2012的专栏 1079

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

WebSocket实战之五JSR356

前几篇WebSocket例子服务端我是用NodeJS实现,这一篇我们用Java来搭建一个WebSocket服务端,从2011年WebSocket协议RFC6455发布后,大多数浏览器都实现了WebSocket协议客户端的API,而对于服务端Java也定义了一个规范JSR356,即Java API for WebSocket规范,很多Web容器如Tomcat、Jetty等新版本都支持该规范。对方端点发送消息过来,调用该注解的方法。对方端点关闭连接时会调用该注解的方法。代码 ,然后就可以向相互发送消息了。

程序员青菜学厨记 1805

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Java WebSocket API:JSR-356详解

项目内容JSR 编号356规范名称所属平台核心价值提供标准、可移植的 WebSocket 编程接口关键能力实时双向通信、低延迟、全双工、跨平台典型应用聊天室、实时仪表盘、在线游戏、协作编辑🌐有了 JSR-356,Java 开发者终于可以用统一的方式构建现代实时 Web 应用,告别 vendor lock-in。

m0_37607945的博客 905

JSR 356, Java API for WebSocket

学习如何整合WebSocket到你的应用中。 对于许多基于Web的客户服务端应用,以前的HTTP请求-响应模型有它的限制。信息必须要在响应时被从服务端传送到客户端,不仅仅是请求。 过去有许多技巧可以用于解决这个问题,如长连接和Comet。然而,需要一个标准的,双向的,全双工的在客户和服务器之间的通道的需求在持续增长。 2011年,IETF将WebSocket协议标准化为RFC64

跳舞的驴子 1895

JSR356标准Java WebSocket实现多人 or 单人聊天室demo

哇,好长时间没有写博客了,最近公司在改善前端技术然我们学什么react+antd+dva这种东西看的我头昏脑涨,还没几天就让我做技术调研弄弄websocket实现点对点聊天,于是乎就开始茫茫的百度生涯。 正片:首先感谢redstarofsleep这位老哥和他的博客给我的启发他的博客地址http://redstarofsleep.iteye.com/blog/1974620 别的不说了直接上代...

weixin_30907523的博客 188

【亲测免费】 探秘Tyrus:Eclipse基金会麾下的WebSocket明星项目

探秘Tyrus:Eclipse基金会麾下的WebSocket明星项目 项目介绍 在这个实时通讯日益重要的时代,WebSocket技术如同网络应用中的一股清流,提供了一种全双工的通信方式,极大地简化了服务器与客户端之间的交互。Tyrus,作为曾经独立发展,现今归于Eclipse基金会麾下的重量级WebSocket库,以其强大而灵活的功能,正悄然成为开发者构建高效实时应用程序的得力助手。尽管这个Gi...

gitblog_00013的博客 599

Spring Boot 整合 WebSocket 之 注解驱动

JSR 356, Java API for WebSocket(本篇文章记录注解实现websocket) websocket支持两种不同的编程方式: 1.基于注解驱动,使用带注释的POJO,可以与WebSocket生命周期事件进行交互 2.基于接口驱动,可以实现Endpoint与生命周期事件交互的接口和方法 官网参考资料: ORACLE JAVA:https://www.oracle....

一生一世一双人的博客 925

java 调用websocket

Java 调用 WebSocket 需要使用 Java API for WebSockets (JSR 356),这是一个标准的 Java API,用于在 Java 应用程序中实现 WebSocket 功能。 通常,要在 Java 应用程序中实现 WebSocket 功能,你需要执行以下步骤: 建立 WebSocket 连接:使用 Java API for WebSockets 中的 javax...

weixin_42576467的博客 985
上一篇: 通过Spring 4在Java中使用websocket
下一篇: java servelet
lcathm
博客等级 码龄18年 37粉丝 44原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值