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. CodeIgniter框架——源码分析之入口文件index.php

    CodeIgniter框架的入口文件主要是配置开发环境,定义目录常量,加载CI的核心类core/CodeIgniter.php.   在index.php中,CI首先做的事情就是设置PHP的错误报告, ...

  2. poj1840

    Eqs Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 15133   Accepted: 7426 Description ...

  3. 《从零开始学Swift》学习笔记(Day43)——构造函数继承

    原创文章,欢迎转载.转载请注明:关东升的博客 Swift中的子类构造函数的来源有两种:自己编写和从父类继承.并不是父类的所有的构造函数都能继承下来,能够从父类继承下来的构造函数是有条件的,如下所示. ...

  4. "大中台、小前台”新架构下,阿里大数据接下来怎么玩? (2016-01-05 11:39:50)

    "大中台.小前台”新架构下,阿里大数据接下来怎么玩?_炬鼎力_新浪博客 http://blog.sina.com.cn/s/blog_1427354e00102vzyq.html " ...

  5. Bootstrap学习-其它内置组件

    1.缩略图(一) 缩略图在网站中最常用的地方就是产品列表页面,一行显示几张图片,有的在图片底下(左侧或右侧)带有标题.描述等信息.Bootstrap框架将这一部独立成一个模块组件.并通过“thumbn ...

  6. ehcache.xml配置详解

    一:配置文件案例 <ehcache> <!-- 磁盘存储:将缓存中暂时不使用的对象,转移到硬盘,类似于Windows系统的虚拟内存 path:指定在硬盘上存储对象的路径 --> ...

  7. ftp 协议分析

    File Transfer Protocol(文件传输协议) 使用SOCKET实现 FTP的客户端协议规则: .h #pragma once #include <string> #incl ...

  8. Django模型中OneToOneField和ForeignKey的区别

    网上看到一篇讲解"Django模型中OneToOneField和ForeignKey区别" 的文章,浅显易懂; 可以把ForeignKey形象的类比为: ForeignKey是on ...

  9. CSS让一个元素一闪一闪的

    .heart{ animation:heart 1s ease infinite; } @keyframes heart { 0% {opacity:0.1;} 100%{;} }

  10. Symfony4 数据库连接

    代码 https://github.com/liudianpeng/BlogMVC-Symfony4 在 .env 文件可以调整一下数据库连接信息 ###> doctrine/doctrine- ...