javax.websocket 使用指南
除了https://blog.csdn.net/u011556070/article/details/105844786 的建立ws server方法之外这里再收录记载一种JSR356的方法javax.websocket
需要注意在这种方法中使用spring的bean会需要额外的工作
@Configuration
public class WebConfig {@Beanpublic ServerEndpointExporter serverEndpointExporter() {return new ServerEndpointExporter();}@Beanpublic WebSocketEndPoint webSocketEndPoint() {return new WebSocketEndPoint();}
}
@Slf4j
@ServerEndpoint(value = "/task/block/{taskId}")
public class WebSocketEndPoint {@OnOpenpublic void onOpen(@PathParam("taskId") String taskId, Session session) {log.info("taskId={} 链接websocket", taskId);}@OnClosepublic void onClose(Session session) {log.info("sessionId={} 关闭websocket", session.getId());}@OnMessagepublic void onMessage(Session session, String message) {log.info("接受信息:" + message);}@OnErrorpublic void onError(Session session, Throwable error) {log.error("客户端错误:" + error.getMessage(), error);}
}
上述这种方法的优势会比spring websocket使用起来略微简单一点,但是无法在endpoint中直接用@Autowired注入bean, 原因是@ServerEndpoint的JSR356和spring的注入顺序的关系
如果想在endpoint中使用spring的DI需要自己写一个SpringContextUtil
@Component
public class SpringContextUtil implements ApplicationContextAware {private static ApplicationContext applicationContext;//通过名字获取上下文中的beanpublic static Object getBean(String name) {return applicationContext.getBean(name);}//通过名字获取上下文中的beanpublic static <T> T getBean(String name, Class<T> tClass) {return applicationContext.getBean(name, tClass);}//通过类型获取上下文中的beanpublic static <T> T getBean(Class<T> requiredType) {return applicationContext.getBean(requiredType);}@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {this.applicationContext=applicationContext;}public static ApplicationContext getApplicationContext() {return applicationContext;}
}
然后即可在使用如下方式注入所需要的bean, 例如
private SomeHandler someHandler = SpringContextUtil.getBean(SomeHandler.class);
javax.websocket 使用指南相关推荐
- javax.websocket.DeploymentException: The path [webScoketServiceBaidu/{appID}] is not valid.
错误提示: javax.servlet.ServletException: javax.websocket.DeploymentException: The path [webScoketServic ...
- Spring Boot加入websocket后,单元测试报错(javax.websocket.server.ServerContainer not available)
错误提示: Caused by: java.lang.IllegalStateException: javax.websocket.server.ServerContainer not availab ...
- WebSocket使用javax.websocket.RemoteEndpoint.Basic.sendObject(Object arg0)向页面方法发送对象
WebSocket接口中有一个直接发送对象给页面的方法: voidjavax.websocket.RemoteEndpoint.Basic.sendObject(Object arg0) throws ...
- JAVA音频研究2:音频输入流(javax.sound学习指南,javax.sound学习实战)
本代码将调用javax.sound库,讲解音频输入流的使用 得到音频输入流可无阻塞地读取(或跳过)的最大字节数.音频输入流里声音的音频数据格式.音频输入流的帧长度 本文可作为javax.sound学习 ...
- JAVA音频研究1:解析音频文件格式(javax.sound学习指南,javax.sound学习实战)
本代码将调用javax.sound库,解析音频文件的格式 得到例如音频时长.文件类型帧长.编码类型等信息 本文可作为javax.sound学习指南,javax.sound学习实战等进行参考 相关内容请 ...
- Caused by: java.lang.IllegalStateException: javax.websocket.server.ServerContainer not available
websocket导致spring boot 项目单元测试启动失败的问题解决 在单元测试时,项目启动报错 Caused by: java.lang.IllegalStateException: jav ...
- JAVA音频研究5:音频播放器(javax.sound学习指南,javax.sound学习实战)
本代码将调用javax.sound库,讲解如何播放音频 得到能够使用的简易音频的播放器 本文可作为javax.sound学习指南,javax.sound学习实战等进行参考 相关内容请看下方代码与注释 ...
- JAVA音频研究4:获取系统中安装的混音器(javax.sound学习指南,javax.sound学习实战)
本代码将调用javax.sound库,讲解如何使用库 得到系统中已经安装的各种混音器 本文可作为javax.sound学习指南,javax.sound学习实战等进行参考 相关内容请看下方代码与注释 i ...
- Caused by: javax.websocket.DeploymentException: Cannot deploy POJO class
追踪一下源码 这是调用的第一个的注册enpoint的一个方法 错误是从serverContatiner.addEndpoint这个地方出来的,我们进去的话会发现 这里获取注解时候出现为null,所以我 ...
最新文章
- C语言关键字、标识符和注释
- 分类器是如何做检测的?(2)——【续】检测中的LBP和HAAR特征计算过程
- 汉字编码表(五笔编码表)
- netbeans插件_如何编写NetBeans插件
- 条形图坐标轴_解密咨询报告中常见的双层条形图的制作方法
- 微信 语音转文字 java,在微信——怎么将语音转化为文字,你需要学习了
- Python 基础 函数
- idea package自动生成_IDEA -- 自动创建POJO
- java扫描所有用户信息_监听器实现案例----自定义session扫描器和统计在线用户人数及用户信息...
- 【codevs1245】最小的N个和
- 【机器学习】隐马尔可夫模型及其三个基本问题(四)状态序列预测算法及python实现
- python中plot不能显示标签_解决python中使用plot画图,图不显示的问题
- Centos7.x 安装Kubernetes(K8s) 1.16.2 kubeadm kubelet kubectl 单机版 2019-10-20更新
- 写给小白看的马尔科夫链(Markov Chain)最佳入门教程
- 录音怎么转换成mp3格式?
- 2017年2月28日-----------乱码新手自学.net 之特性与验证
- 医院PACS系统源码
- 火狐浏览器截图整个网页截图 截取整个网页
- 裸金属服务器(Bare Metal Server,BMS)
- kafka对单分区重设偏移量
热门文章
- 15年计算机专业专升本,2015年江苏专转本各院校各专业分数线
- 冷门APP,值得收藏使用
- 使用ipset来批量控制iptables
- go linux 开发工具,使用Go 语言开发必备的5大开源工具
- linux——signal信号 SIGHUP、SIGINT
- CSP-J 2019 入门组/普及组
- HTML元素的显示和隐藏
- Win7 工作站和主域信任关系失败
- 【网络】叶脊(Spine-Leaf)网络拓扑下全三层网络设计与实践(一) - 叶脊网络架构简介
- 正确理解以下名词及其含义1源程序,目标程序,可执行程序2程序编辑,程序编译,程序连接3程序,程序模块,程序文件4函数,主函数,被调用函数,库函数5程序调试,程序测试