除了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 使用指南相关推荐

  1. javax.websocket.DeploymentException: The path [webScoketServiceBaidu/{appID}] is not valid.

    错误提示: javax.servlet.ServletException: javax.websocket.DeploymentException: The path [webScoketServic ...

  2. Spring Boot加入websocket后,单元测试报错(javax.websocket.server.ServerContainer not available)

    错误提示: Caused by: java.lang.IllegalStateException: javax.websocket.server.ServerContainer not availab ...

  3. WebSocket使用javax.websocket.RemoteEndpoint.Basic.sendObject(Object arg0)向页面方法发送对象

    WebSocket接口中有一个直接发送对象给页面的方法: voidjavax.websocket.RemoteEndpoint.Basic.sendObject(Object arg0) throws ...

  4. JAVA音频研究2:音频输入流(javax.sound学习指南,javax.sound学习实战)

    本代码将调用javax.sound库,讲解音频输入流的使用 得到音频输入流可无阻塞地读取(或跳过)的最大字节数.音频输入流里声音的音频数据格式.音频输入流的帧长度 本文可作为javax.sound学习 ...

  5. JAVA音频研究1:解析音频文件格式(javax.sound学习指南,javax.sound学习实战)

    本代码将调用javax.sound库,解析音频文件的格式 得到例如音频时长.文件类型帧长.编码类型等信息 本文可作为javax.sound学习指南,javax.sound学习实战等进行参考 相关内容请 ...

  6. Caused by: java.lang.IllegalStateException: javax.websocket.server.ServerContainer not available

    websocket导致spring boot 项目单元测试启动失败的问题解决 在单元测试时,项目启动报错 Caused by: java.lang.IllegalStateException: jav ...

  7. JAVA音频研究5:音频播放器(javax.sound学习指南,javax.sound学习实战)

    本代码将调用javax.sound库,讲解如何播放音频 得到能够使用的简易音频的播放器 本文可作为javax.sound学习指南,javax.sound学习实战等进行参考 相关内容请看下方代码与注释 ...

  8. JAVA音频研究4:获取系统中安装的混音器(javax.sound学习指南,javax.sound学习实战)

    本代码将调用javax.sound库,讲解如何使用库 得到系统中已经安装的各种混音器 本文可作为javax.sound学习指南,javax.sound学习实战等进行参考 相关内容请看下方代码与注释 i ...

  9. Caused by: javax.websocket.DeploymentException: Cannot deploy POJO class

    追踪一下源码 这是调用的第一个的注册enpoint的一个方法 错误是从serverContatiner.addEndpoint这个地方出来的,我们进去的话会发现 这里获取注解时候出现为null,所以我 ...

最新文章

  1. C语言关键字、标识符和注释
  2. 分类器是如何做检测的?(2)——【续】检测中的LBP和HAAR特征计算过程
  3. 汉字编码表(五笔编码表)
  4. netbeans插件_如何编写NetBeans插件
  5. 条形图坐标轴_解密咨询报告中常见的双层条形图的制作方法
  6. 微信 语音转文字 java,在微信——怎么将语音转化为文字,你需要学习了
  7. Python 基础 函数
  8. idea package自动生成_IDEA -- 自动创建POJO
  9. java扫描所有用户信息_监听器实现案例----自定义session扫描器和统计在线用户人数及用户信息...
  10. 【codevs1245】最小的N个和
  11. 【机器学习】隐马尔可夫模型及其三个基本问题(四)状态序列预测算法及python实现
  12. python中plot不能显示标签_解决python中使用plot画图,图不显示的问题
  13. Centos7.x 安装Kubernetes(K8s) 1.16.2 kubeadm kubelet kubectl 单机版 2019-10-20更新
  14. 写给小白看的马尔科夫链(Markov Chain)最佳入门教程
  15. 录音怎么转换成mp3格式?
  16. 2017年2月28日-----------乱码新手自学.net 之特性与验证
  17. 医院PACS系统源码
  18. 火狐浏览器截图整个网页截图 截取整个网页
  19. 裸金属服务器(Bare Metal Server,BMS)
  20. kafka对单分区重设偏移量

热门文章

  1. 15年计算机专业专升本,2015年江苏专转本各院校各专业分数线
  2. 冷门APP,值得收藏使用
  3. 使用ipset来批量控制iptables
  4. go linux 开发工具,使用Go 语言开发必备的5大开源工具
  5. linux——signal信号 SIGHUP、SIGINT
  6. CSP-J 2019 入门组/普及组
  7. HTML元素的显示和隐藏
  8. Win7 工作站和主域信任关系失败
  9. 【网络】叶脊(Spine-Leaf)网络拓扑下全三层网络设计与实践(一) - 叶脊网络架构简介
  10. 正确理解以下名词及其含义1源程序,目标程序,可执行程序2程序编辑,程序编译,程序连接3程序,程序模块,程序文件4函数,主函数,被调用函数,库函数5程序调试,程序测试