首发:个人博客

必须说明:这篇博文只用于自己记录,使用spring的websocket支持一定要看官方文档,权威又简明,不推荐看不专业又啰嗦的国产博文。

已尝试了两种方法,当然,不管哪种方法都要先添加maven依赖:

<dependency>  
   <groupId>org.springframework</groupId>  
   <artifactId>spring-websocket</artifactId>  
</dependency>  
<dependency>  
   <groupId>org.springframework</groupId>  
   <artifactId>spring-messaging</artifactId>  
</dependency>

<dependency>
    <groupId>javax.websocket</groupId>
    <artifactId>javax.websocket-api</artifactId>
    <version>1.0</version>
</dependency>

第一种方法,对应文档中的25.2这一节:
1)声明个Handler组件:

@Component
public class MyHandler extends TextWebSocketHandler {

@Override
    public void handleTextMessage(WebSocketSession session, TextMessage message) {
        try {
            session.sendMessage(message);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

2)在spring配置文件中配置该组件,注意要写在springmvc的配置文件中而不是spring主配置文件中:

<!-- websocket配置1 -->
    <websocket:handlers>
        <websocket:mapping path="/myHandler" handler="myHandler"/>
    </websocket:handlers>

当然,添加这段配置之前要在xml的根节点beans节点上补充这个声明让spring认识websocket前缀:

xmlns:websocket="http://www.springframework.org/schema/websocket"

3)这就OK了

第二种方法,对应文档中的25.4这一节:
实际是参考了官方的引导文档(一定要看),然后基于参考手册把java配置改为xml配置了。
1)在某个controller中声明:

@MessageMapping("/say")
    @SendTo("/topic/greetings")
    public String greeting(String message) throws Exception {
        return message;
    }

2)在springmvc配置文件中添加:

<websocket:message-broker application-destination-prefix="/app">
        <websocket:stomp-endpoint path="/hello">
            <websocket:sockjs />
        </websocket:stomp-endpoint>
        <websocket:simple-broker prefix="/topic" />
    </websocket:message-broker>

3)测试的页面太长了就不贴了,到这里找吧,在页面的中下部分。
如果懒得找就看官方提供的示例程序中测试页面

总结:
websocket的意义在让浏览器和服务器保持长连接。
在websocket之前如果想保持长连接,或者采用轮询的方法,或者采用服务器端阻塞的方法,显然都浪费性能。
如果用服务器端阻塞的话,编程中读请求(阻塞的)和写请求(由用户操作触发)也是分开的。
websocket直接就分开它们俩了,浏览器随时可以向服务器中写指令,服务器也随时可以向浏览器写指令,两者都有触发函数监听对方。
这是对无状态的http协议非常重要的补充。
html5技术很大方面就是让B/S自带富客户端编程元素,比如本地存储,长连接这些,这也是单页面程序兴起的重要原因。
真正是一个页面就是一个程序,有界面显示,有操作控件,有临时数据,有持久数据,有与服务器保持的连接。

长期欢迎项目合作机会介绍,项目收入10%用于酬谢介绍人。新浪微博:@冷镜,QQ:908789432。

spring支持的websocket的更多相关文章

  1. 【Java Web开发学习】Spring MVC整合WebSocket通信

    Spring MVC整合WebSocket通信 目录 ========================================================================= ...

  2. spring boot 集成 websocket 实现消息主动推送

    spring boot 集成 websocket 实现消息主动 前言 http协议是无状态协议,每次请求都不知道前面发生了什么,而且只可以由浏览器端请求服务器端,而不能由服务器去主动通知浏览器端,是单 ...

  3. Spring Boot 集成 WebSocket 实现服务端推送消息到客户端

    假设有这样一个场景:服务端的资源经常在更新,客户端需要尽量及时地了解到这些更新发生后展示给用户,如果是 HTTP 1.1,通常会开启 ajax 请求询问服务端是否有更新,通过定时器反复轮询服务端响应的 ...

  4. Spring框架之websocket源码完全解析

    Spring框架之websocket源码完全解析 Spring框架从4.0版开始支持WebSocket,先简单介绍WebSocket协议(详细介绍参见"WebSocket协议中文版" ...

  5. 【Spring】Spring系列5之Spring支持事务处理

    5.Spring支持事务处理 5.1.事务准备 以上代码结构与AOP的前置通知.返回通知.异常通知.后置通知一样. 5.2.声明式事务 5.2.1.基于注解 5.2.2.基于配置文件 5. 3.事务传 ...

  6. 【Spring】Spring系列4之Spring支持JDBC

    4.Spring支持JDBC 4.1.使用JdbcTemplate简化JDBC开发 也可以这么用(不推荐): 4.2.使用NamedParameterJdbcTemplate

  7. 在web项目中使用cxf开发webservice,包含spring支持

    本文主要介绍了,如何使用cxf内置的例子,学会开发webserivce,在web项目中使用,且包含spring支持. webserivce的开发可以使用cxf或者axis,好像还有httpclient ...

  8. Spring Boot之WebSocket

    一.项目说明 1.项目地址:https://github.com/hqzmss/test01-springboot-websocket.git 2.IDE:IntelliJ IDEA 2018.1.1 ...

  9. 8 -- 深入使用Spring -- 6...1 Spring支持的事务策略

    8.6.1 Spring支持的事务策略 JTA.JDBC.Hibernate Java EE应用的传统事务有两种策略:全局事务和局部事务.全局事务由应用服务器管理,需要底层服务器的JTA(Java T ...

随机推荐

  1. CSS布局属性

    一.弹性盒模型介绍 1.弹性盒模型介绍 — 基础知识 弹性盒模型( Flexible Box 或 Flexbox)是一个CSS3新增布局模块,官方称为CSS Flexible Box Layout M ...

  2. Java学习-021-Properties 获取配置项对应的值

    在日常的脚本编写过程中,通常会获取配置文件中的配置项,以执行相应的业务逻辑. 小二上码...若有不足之处,敬请大神指正,不胜感激! 获取配置项值的源码如下所示: /** * Get value fro ...

  3. NSUserDefaults 可以保存哪些类型

    NSData NSString NSNumber NSDate NSArray NSDictionary *如果你想保存其他类型,如UIImage,你应该进行编码(即archive),或者将它转换为N ...

  4. svn使用svnsync实现双机热备

    前提条件: 主:10.11.100.205从:10.11.100.50 源目录:http://10.11.100.205/svn/rep-ops目标目录:http://10.11.100.50/svn ...

  5. Java HashMap Demo

    代码: import java.util.HashMap; import java.util.Iterator; import java.util.Set; import java.util.Map. ...

  6. python_递归

    1.  递归示例 #coding:utf-8 #递归进行阶乘 def mm(num): if(num == 1): return 1 else: return mm(num-1) * num prin ...

  7. CL.exe的 /D 选项, Preprocessor Macro预处理器宏定义

    在看"Inside COM"第10章的代码. MAKEFILE里面有几个标记我没看懂. 去网上搜也搜不到. /D_OUTPROC_SERVER_ /DWIN32 /DREGISTE ...

  8. 这是我定位的Bug

    https://github.com/danielgindi/ios-charts/issues/406

  9. hibernate反向生成映射文件报错

    报错原因:可能是你的数据库里的某个表没设置主键.

  10. PostgreSQL 系统的基本体系结构

    PostgreSQL 使用客户机/服务器(C/S)的模式提供服务,一个PostgreSQL会话由下列相关的进程(程序)组成: (1)一个服务器端进程.该进程管理数据库文件,接受客户端与数据库的连接,且 ...