Spring自从4.0开始提供了对websocket的支持,配合sockjs,可以部分兼容到IE6,websocket终于可以大行其道了。
实际使用中遇到不少问题,逐步列举出来,避免以后忘掉。
- 由于浏览器设置了http代理,结果创建websocket时失败,提示:Error in connection establishment: net::ERR_TUNNEL_CONNECTION_FAILED。取消浏览器代理后恢复正常。
- 在web.xml中,DispatcherServlet和spring-mvc需要用到的全部filter,都需要加上<async-supported>true</async-supported>,以便在sockjs兼容不支持websocket的浏览器时使用。
- 工程使用spring-mvc传统的方式配置,即使用ContextLoaderListener来加载root的Spring-contextConfigLocation(除Controller外的其他Component),使用DispatcherServlet来加载Controller。而处理websocket的业务逻辑写在Controller中,加上了@MessageMapping的注解,结果请求根本到不了Controller里面去。后来发现AbstractMethodMessageHandler负责扫描@MessageMapping,但是在该类的子类实例化时,把Spring的Root Context扔进去了,这里面是没有Controller的类的,所以后面websocket的请求就到不了Controller。将websocket的相关配置文件放到DispatcherServlet里去加载,于是问题解决。
相关配置示例:
web.xml:
<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:/applicationContext*.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <servlet> <servlet-name>SpringMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value> classpath*:/spring-*.xml </param-value> </init-param> <load-on-startup>1</load-on-startup> <async-supported>true</async-supported> </servlet>
applicationContext.xml:
<context:component-scan base-package="xxx.xxx"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan>
spring-mvc.xml:
<context:component-scan base-package="x.x.x" use-default-filters="false"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan>
spring-websocket.xml:
<websocket:message-broker application-destination-prefix="/app"> <websocket:stomp-endpoint path="/chat"> <websocket:sockjs/> </websocket:stomp-endpoint> <websocket:simple-broker prefix="/public,/private"/> </websocket:message-broker>
相关推荐
完整的springMVC+Spring webSocket示例
spring websocket 测试项目,项目中遇到的一些坑已经试验过了
实现以下功能: 1、各个客户端之间的消息互发; 2、客户端向后台发送消息; 3、后台向客户端发送消息
SpringWebSocket.jar
spring_websocket在线聊天demo,可以一对一,也可广播群发。
一个简单的websocket例子,适合新手参考,使用spring框架的websocket。很简单的例子
Java实现的websocket服务器和客户端,这是一个demo包含服务器和客户端
spring+websocket+netty合作的demo,方便初学者快速入门学习
用myEclipse 导入成功后直接可以使用 jar包 也在rar中
博客中,Spring WebSocket例子代码
基于spring websocket实现广播及点对点推送功能Demo。 开发环境:IntelliJ IDEA 2016.3.4 运行环境:jre1.8.0_131 服务器:Tomcat 8.5 测试步骤: 1.配置好环境,主要是maven和tomcat; 2.编译并运行,使用不同的...
Spring WebSocket通信应用实例demo、双向通信、WebSocket、心跳监测
spring websocket在springboot中使用,超详细的使用方法,有实例代码
websocket+spring 前端+后端代码, 所需jar包 实测tomcat7 tomcat8都可以正常运行
Spring+Netty+WebSocket实例,通用性还行,比较贴近生产,注释什么写的比较全
Spring websocket完整例子,入门例子code
一个大佬在github上写的例子。遗憾的是没有保存连接,只给下下来测试了。 springboot的基础上,采用stomp进行前后端进行通讯的小例子。
spring4+ websocket获取httpsession