1、Pom.xml

 <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-websocket</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-messaging</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.websocket</groupId>
<artifactId>javax.websocket-api</artifactId>
<version>1.0</version>
<scope>provided</scope>
</dependency>

2、Spring-servlet,xml

 <context:component-scan base-package="com.websocket"/>

3、WebSocketConfig.java

package com.websocket;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry; /**
* Created by HendSame on 11/29/16.
*/
@Configuration
@EnableWebMvc
@EnableWebSocket
public class WebSocketConfig extends WebMvcConfigurerAdapter implements WebSocketConfigurer {
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
//允许连接的域,只能以http或https开头
String[] allowsOrigins = {"*"}; //WebIM WebSocket通道
registry.addHandler(allBedWebSocketHandler(),"/websocket/get/all/data/rt").setAllowedOrigins(allowsOrigins).addInterceptors(myInterceptor());
registry.addHandler(allBedWebSocketHandler(), "/sockjs/websocket/get/all/data/rt").setAllowedOrigins(allowsOrigins).addInterceptors(myInterceptor()).withSockJS(); registry.addHandler(bedWebSocketHandler(),"/websocket/get/by/time").setAllowedOrigins(allowsOrigins).addInterceptors(myInterceptor());
registry.addHandler(bedWebSocketHandler(), "/sockjs/websocket/get/by/time").setAllowedOrigins(allowsOrigins).addInterceptors(myInterceptor()).withSockJS(); registry.addHandler(alarmsWebSocketHandler(),"/websocket/get/alarms").setAllowedOrigins(allowsOrigins).addInterceptors(myInterceptor());
registry.addHandler(alarmsWebSocketHandler(), "/sockjs/websocket/get/alarms").setAllowedOrigins(allowsOrigins).addInterceptors(myInterceptor()).withSockJS(); registry.addHandler(overViewWebSocketHandler(),"/websocket/get/overview").setAllowedOrigins(allowsOrigins).addInterceptors(myInterceptor());
registry.addHandler(overViewWebSocketHandler(), "/sockjs/websocket/get/overview").setAllowedOrigins(allowsOrigins).addInterceptors(myInterceptor()).withSockJS(); }
@Bean
public AllBedWebSocketHandler allBedWebSocketHandler() {
return new AllBedWebSocketHandler();
} @Bean
public BedWebSocketHandler bedWebSocketHandler() {
return new BedWebSocketHandler();
} @Bean
public AlarmsWebSocketHandler alarmsWebSocketHandler() {
return new AlarmsWebSocketHandler();
} @Bean
public OverViewWebSocketHandler overViewWebSocketHandler() {
return new OverViewWebSocketHandler();
} @Bean
public WebSocketHandshakeInterceptor myInterceptor(){
return new WebSocketHandshakeInterceptor();
}
}

4、BedWebSocketHandler.java

package com.websocket;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.bbkj.nursestation.common.ApiResult;
import com.bbkj.nursestation.common.UserVO;
import com.bbkj.nursestation.site.service.DeviceService;
import com.bbkj.nursestation.site.vi.HospitalBedDataVI;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler; import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map; /**
* Created by hy on 11/29/16.
*/
@Component
public class BedWebSocketHandler extends TextWebSocketHandler { private final static List<WebSocketSession> sessions = Collections.synchronizedList(new ArrayList<WebSocketSession>()); @Autowired
private DeviceService deviceService;
//接收文本消息,并发送出去
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
super.handleTextMessage(session, message);
byte[] bytes = message.asBytes();
String params = new String(bytes);
JSONObject object=JSON.parseObject(params);
UserVO userVO = new UserVO();
userVO = (UserVO) session.getAttributes().get("websocketUser"); ApiResult<Map<String, Integer>> apiResult = new ApiResult<>(1, "error");
HospitalBedDataVI hospitalBedDataVI = new HospitalBedDataVI();
hospitalBedDataVI.setEn(Long.parseLong(object.get("en").toString()));
hospitalBedDataVI.setPaitenid(Long.parseLong(object.get("paitenid").toString()));
apiResult = deviceService.getHosptialBedRealTimeData4Websocket(hospitalBedDataVI);
apiResult.setUser(userVO);
session.sendMessage(new TextMessage(apiResult.toString())); } //连接建立后处理
@SuppressWarnings("unchecked")
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
sessions.add(session);
//处理离线消息
}
//抛出异常时处理
@Override
public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
if(session.isOpen()){
session.close();
} sessions.remove(session);
}
//连接关闭后处理
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception { sessions.remove(session);
} @Override
public boolean supportsPartialMessages() {
return false;
} /**
* 给所有在线用户发送消息
*
* @param message
*/
public void sendMessageToUsers(TextMessage message) {
for (WebSocketSession user : sessions) {
try {
if (user.isOpen()) {
user.sendMessage(message);
}
} catch (IOException e) {
e.printStackTrace();
}
}
} /**
* 给某个用户发送消息
*
* @param userName
* @param message
*/
public void sendMessageToUser(String userName, TextMessage message) {
for (WebSocketSession user : sessions) {
if (user.getAttributes().get("username").equals(userName)) {
try {
if (user.isOpen()) {
user.sendMessage(message);
}
} catch (IOException e) {
e.printStackTrace();
}
break;
}
}
}
}

5、DeviceService.java

package com.site.service;

import com.bbkj.nursestation.common.ApiResult;
import com.bbkj.nursestation.site.entity.Device;
import com.bbkj.nursestation.site.vi.HospitalBedDataVI;
import com.bbkj.nursestation.site.vo.HosptialBedDataNow;
import com.bbkj.nursestation.site.vo.OverviewVO; import java.util.List;
import java.util.Map; /**
* Created by hy on 11/21/16.
*/
public interface DeviceService { ApiResult<Map<String,Integer>> getHosptialBedRealTimeData4Websocket(HospitalBedDataVI hospitalBedDataVI); }

7、Javascript

<script type="text/javascript" src="js/sockjs-1.1.1.min.js"></script>
<script>
var websocket;
if ('WebSocket' in window) { //某张床位实时信息接口
websocket = new WebSocket("ws://192.168.1.114:8099/websocket/get/by/time");
} else if ('MozWebSocket' in window) { websocket = new MozWebSocket("ws://192.168.1.114:8099/websocket/get/by/time");
} else { websocket = new SockJS("http://192.168.1.114:8099/sockjs/websocket/get/by/time"); }
websocket.onopen = function (evnt) {
alert("建立连接");
};
websocket.onmessage = function (evnt) {
alert(evnt.data)
};
websocket.onerror = function (evnt) {
};
websocket.onclose = function (evnt) {
} $('#send').click(function(e) {
var params ="{'en':1,'paitenid':1}";
websocket.send(params);
});
</script>

基于Spring mvc 的Websocket 开发的更多相关文章

  1. 基于Spring MVC的Web应用开发(三) - Resources

    基于Spring MVC的Web应用开发(3) - Resources 上一篇介绍了在基于Spring MVC的Web项目中加入日志,本文介绍Spring MVC如何处理资源文件. 注意到本项目的we ...

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

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

  3. 基于Spring MVC 实现拦截器

    Spring MVC 拦截器 一,具体内容: 在所有的开发之中拦截器属于一个重要的组件,可以说几乎所有的项目都会提供的概念应用,不管是Spring MVC,还是Struts 2.x都是提供有拦截器的, ...

  4. Spring MVC第一课:用IDEA构建一个基于Spring MVC, Hibernate, My SQL的Maven项目

    作为一个Spring MVC新手最基本的功夫就是学会如何使用开发工具创建一个完整的Spring MVC项目,本文站在一个新手的角度讲述如何一步一步创建一个基于Spring MVC, Hibernate ...

  5. 基于spring mvc的图片验证码实现

    本文实现基于spring mvc的图片验证码,分后台代码和前端页面的展现以及验证码的验证. 首看后台实现代码: @RequestMapping({"authCode"}) publ ...

  6. Spring Boot 2.X(三):使用 Spring MVC + MyBatis + Thymeleaf 开发 web 应用

    前言 Spring MVC 是构建在 Servlet API 上的原生框架,并从一开始就包含在 Spring 框架中.本文主要通过简述 Spring MVC 的架构及分析,并用 Spring Boot ...

  7. 使用IDEA和gradle搭建Spring MVC和MyBatis开发环境

    1. 概述 Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具. 它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐 ...

  8. ssm(spring mvc+mybatis)+netty4开发qiq

    发布时间:2018-10-30   技术:spring mvc+mybatis+nett4+layui   概述 简单快捷的IM方案,快速打造在线IM,可用于公司内网.外网通讯,客服系统等,实现了so ...

  9. spring MVC之注解开发控制器(二)

    开发表单控制器 在传统的Spring MVC开发方法中,是通过扩展SimpleFormController类来创建简单的表单控制器.这样就定义了基本的表单处理流程,并允许通过覆盖几个生命周期方法来定制 ...

随机推荐

  1. GIT快速学习

    http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001373962845513ae ...

  2. PHP 获得域控内用户的计算机登录名

    一个需求: 在域控范围获得访问用户的计算机名.方法: 1.测试软件环境: XAMPP Control Panel V3.2.1 ,  Apache version 2.4.7 2.Apache 2.2 ...

  3. element-UI ,Table组件实现拖拽效果

    拖拽效果,先放效果图,步骤放在后面~~ 一.引入三方插件 1.引入sortable.js的包: npm install sortable.js --save 2.或者npm i -S vuedragg ...

  4. Python3.6全栈开发实例[024]

    24.文件a1.txt内容(注意每行中的空格是不一样的,需要对空格进行处理)序号 部门   人数   平均年龄           备注 1 python   30   26   单身狗 2 Linu ...

  5. Python3.6全栈开发实例[020]

    20.判断一个数是否是水仙花数, 水仙花数是一个三位数, 三位数的每一位的三次方的和还等于这个数. 那这个数就是一个水仙花数, 例如: 153 = 1**3 + 5**3 + 3**3 num = i ...

  6. hexo+yilia页脚添加总访问量

    个人博客:https://www.yuehan.online 现在博客:http://www.wangyurui.top 脚本方法使用不蒜子计数 安装脚本 要使用不蒜子(官网:http://busua ...

  7. App的开发过程

    不同的项目管理模式或许会有完全不同的流程步骤.但是专业性几乎是保证产品质量的唯一准则. App的开发过程主要分为以下阶段,本文会按顺序为大家简单地说明: 1.需求梳理.分析 2.产品原型图绘制 3.U ...

  8. Owncloud-X安装配置

    系统是基于Centos7.2 1.更改yum源: mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.back ...

  9. loadrunder之脚本篇——action分类

    Action分类 l . Vuser_init 2. Vuser_end 3.  Action 在lr中用户的初始化操作应该存放在Vuser_init中.用户的结束操作存放在Vuser_end中.因为 ...

  10. linux 定时任务未执行php脚本

    1,对于无法执行php文件,首先你应该考虑的问题是是否php代码有错误,你可以先检查一下你的php代码,或者可以在linux上面执行一下这个文件,看是否能够执行成功:如果成功了,就说明是crontab ...