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>
相关推荐
Spring框架提供了对WebSocket的支持,使得在Java后端开发中集成WebSocket变得简单。在这个名为"spring websocket"的项目中,我们将会实现三个主要功能:客户端之间的消息传递、客户端向服务器发送消息以及服务器向...
在Spring框架中,Spring WebSocket提供了一套完整的解决方案来支持WebSocket的开发。这个"spring websocket 测试项目"是为了帮助开发者理解和实践如何在实际应用中集成和使用WebSocket。 首先,我们要了解Spring ...
**Spring WebSocket 完整Demo详解** WebSocket是一种在客户端与服务器之间建立长连接的协议,它提供了双向通信的能力,使得服务器可以主动向客户端推送数据。在Web应用中,Spring框架提供了对WebSocket的支持,使得...
在"spring websocket在线聊天demo"中,我们主要探讨的是如何利用Spring框架集成WebSocket,创建一个功能完备的在线聊天应用。 1. **Spring WebSocket概述** Spring框架提供了对WebSocket的支持,通过`spring-...
《Spring WebSocket 中文注释案例详解》 在现代Web开发中,实时通信功能变得越来越重要,Spring框架提供了WebSocket支持,使得服务器与客户端可以进行双向通信,实现高效、低延迟的数据交换。本文将深入探讨一个...
在Spring框架中,Spring Boot提供了对WebSocket的支持,使得开发者可以方便地集成WebSocket功能到自己的应用程序中。 在"spring websocket的demo"中,我们看到的是一个基于Spring Boot实现的WebSocket服务器和...
在本文中,我们将深入探讨如何使用Spring框架,特别是Spring WebSocket,来创建一个简单的WebSocket应用程序。这对于初学者来说是一个很好的起点,因为它提供了一个直观的理解和实践机会。 首先,让我们了解Spring ...
在这个"spring+websocketdemo"中,我们将探讨如何结合Spring框架和WebSocket技术来构建一个实时通信的应用,并引入Netty作为WebSocket的服务器端实现。 首先,Spring框架是Java企业级应用开发的主流选择,它提供了...
SpringWebSocket-master.zip是一个包含Spring Boot应用的示例项目,展示了如何使用WebSocket技术和STOMP协议实现前后端通信。WebSocket是一种在单个TCP连接上进行全双工通信的协议,相较于传统的HTTP请求,它允许...
Spring框架,作为Java开发中的主流框架,提供了对WebSocket的支持,使得开发者可以轻松地在Spring应用中集成WebSocket功能。 在这个"websocket+spring"项目中,前端和后端的代码都包含了实现WebSocket通信的逻辑。...
在现代Web开发中,实时通信已经成为一个不可或缺的功能,Spring、Netty和WebSocket的结合为构建高性能、低延迟的实时应用提供了强大的解决方案。本实例将详细探讨如何利用这三种技术进行集成,实现高效的双向通信。 ...
**Spring WebSocket 深度解析** WebSocket 是一种在客户端与服务器之间建立长连接的协议,它允许双方进行双向通信,而不仅仅是服务器向客户端推送数据。在Web应用中,WebSocket为实时交互提供了强大的支持,比如...
在Spring框架中,Spring WebSocket提供了全面的支持,使得开发人员可以轻松地集成WebSocket功能到他们的应用程序中。下面将详细介绍Spring WebSocket通信应用实例,包括其工作原理、配置、心跳监测以及如何构建一个...
在IT行业中,Spring框架提供了对WebSocket的支持,使得开发者可以方便地在Java应用中集成WebSocket功能。 标题中的“spring websocket与echart集成”意味着我们要探讨的是如何在使用Spring框架构建的Web应用中,...
Spring WebSocket是Spring框架提供的一套完整的WebSocket支持,它使得在Spring应用中集成WebSocket变得简单。 **一、WebSocket简介** WebSocket API设计目标是为了提供低延迟、高效率的双向通信机制。与HTTP不同,...
要在Spring WebSocket中获取HttpSession,我们通常会使用STOMP(Simple Text Oriented Messaging Protocol)作为WebSocket的消息协议,因为它易于理解和实现,并且Spring提供了很好的支持。以下是一步步实现的步骤:...
SpringWebSocket.jar