dwr 推送消息

2024-05-05 02:38
文章标签 推送 消息 dwr

本文主要是介绍dwr 推送消息,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

dwr + spring  实时推送消息,通过网络技术学习,做了个小功能,总结如下:


1、下载dwr.jar

官网地址:http://directwebremoting.org/dwr/downloads/

下载最新版本v3.0


2、导入jar

   

3、配置web.xml

<!-- DWR配置 START -->
<servlet><description>This is the description of my J2EE component</description><display-name>This is the display name of my J2EE component</display-name><servlet-name>DWRServlet</servlet-name><servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class><!--commet 方式--><init-param><param-name>activeReverseAjaxEnabled</param-name><param-value>true</param-value></init-param><!--测试环境下,需要开启debug模式,线上环境需要关闭-->  <init-param><param-name>debug</param-name><param-value>false</param-value></init-param><!--允许跨域--><init-param><param-name>crossDomainSessionSecurity</param-name><param-value>false</param-value></init-param><!--允许脚本标签远程--> <init-param><param-name>allowScriptTagRemoting</param-name><param-value>true</param-value></init-param>
</servlet><servlet-mapping><servlet-name>DWRServlet</servlet-name><url-pattern>/dwr/*</url-pattern>
</servlet-mapping> <!-- DWR配置 END -->

4、由Spring管理dwr

配置applicationContext-common.xml 

<!--由spring管理dwr   -->
<bean id="deviceInfo" class="com.dc.rcms.DWRDeviceInfoStatus"></bean>


5、页面引用以下js

<!--dwr消息推送 -->
<script type="text/javascript" src="dwr/engine.js"></script>
<script type="text/javascript" src="dwr/util.js"></script>

并且页面 初始化,加

$(function(){    dwr.engine.setActiveReverseAjax(true);  dwr.engine.setNotifyServerOnPageUnload(true);
});

6、后台直接要推送的内容

public DWRDeviceInfoStatus(){//定时向前台推送设备信息Timer timer = new Timer();timer.schedule(new TimerTask() {@Overridepublic void run() {<span style="white-space:pre">	</span>try{ServerContext serverContext = ServerContextFactory.get();Container container = serverContext.getContainer();ScriptSessionManager manager = container.getBean(ScriptSessionManager.class);Collection sessions = manager.getAllScriptSessions();if(sessions.size() == 0 ){return;}//得到设备部位信息状态数量Util util = new Util(sessions);List<SEntity> list=baseDao.search("select count(id) as allnum,sum(case when status=1 then 1 end) as gznum,sum(case when status=0 then 1 end) as zcnum from rcms_device ",null);if(list!=null && list.size()>0){SEntity entity=list.get(0);String jsonStr="{\"allnum\":"+repaceNull(entity.getValueAsString("allnum"))+",\"gznum\":"+repaceNull(entity.getValueAsString("gznum"))+",\"zcnum\":"+repaceNull(entity.getValueAsString("zcnum"))+"}";util.addFunctionCall("showDeviceInfo", jsonStr);}//得到所有故障点信息Util utilgzd = new Util(sessions);List<SEntity> gzlist=baseDao.search("select device_code,count(id) n from rcms_device where status =1 group by device_code order by device_code", null);if(gzlist!=null && gzlist.size()>0){String gzdjsonStr="[";for(int i=0;i<gzlist.size();i++){SEntity gzdentity=gzlist.get(i);gzdjsonStr += "{";gzdjsonStr +="\"device_code\":\""+repaceNull(gzdentity.getValueAsString("DEVICE_CODE"))+"\",";gzdjsonStr +="\"gzdnum\":\""+repaceNull(gzdentity.getValueAsString("n"))+"\"";gzdjsonStr +="},";}gzdjsonStr = gzdjsonStr.substring(0,gzdjsonStr.length()-1);gzdjsonStr = gzdjsonStr+"]" ;utilgzd.addFunctionCall("showDeviceGzdInfo", gzdjsonStr);}}catch(Exception e){}}}, 10*1000, 1000*3);}	


7、页面接收后台推送的消息

脚本处理

/* 后台自动推送设备信息 */
//显示设备正常与否信息
function showDeviceInfo(data){var jsonstr = eval( "(" + data + ")" );if(jsonstr!=null){$("#bottomcount").html("<p style=\"margin-left: 20px;margin-top: 20px; font-size: 16px;\">共<span id=\"allnum\" style=\"margin-left: 10px;margin-right: 10px;\">"+jsonstr.allnum+"</span>个   正常<span id=\"zcnum\" style=\"margin-left: 10px;margin-right: 10px;\"><a class=\"icon\" target=\"dialog\" rel=\"main\" title=\"设备部位的正常数量\" width=\"850\" height=\"500\" οnclick=\"getsitezc_gznum(0);\"><font color=\"green\">"+jsonstr.zcnum+"</font></a></span>个   故障<span id=\"gznum\" style=\"margin-left: 10px;margin-right: 10px;\"><a class=\"icon\" target=\"dialog\" rel=\"main\" title=\"设备部位码的故障数量\" width=\"850\" height=\"500\"οnclick=\"getsitezc_gznum(1);\"><font color=\"red\">"+jsonstr.gznum+"</font></a></span>个</p>");}
}
//显示所有故障点信息
function showDeviceGzdInfo(data){var gzdjsonstr = eval( "(" + data + ")" );if(gzdjsonstr!=null){$("#gzdcount").html("<ul>");for(var i=0; i<gzdjsonstr.length; i++) { $("#gzdcount").append("<a target=\"dialog\" rel=\"main\" title=\"设备部位的故障点数量\" width=\"850\" height=\"500\" οnclick=\"getsitegzdnum('"+gzdjsonstr[i].device_code+"');\"><li style=\"list-style-type:none;\"><img alt=\"警示\" src=\"img/warning.png\"/><span id=\"gzsnum\" style=\"margin-left: 5px;margin-top: 20px; font-size: 14px;\">"+gzdjsonstr[i].device_code+"  (  故障  <span style=\"margin-left: 5px;margin-right: 5px;margin-top: 10px;\"><font color=\"red\" >"+gzdjsonstr[i].gzdnum + "</font></span>个)</span></li></a></ul>");}}isfirst=2;
}

页面如下




至此,大功告成。。。




这篇关于dwr 推送消息的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/960641

相关文章

ActiveMQ—消息特性(延迟和定时消息投递)

ActiveMQ消息特性:延迟和定时消息投递(Delay and Schedule Message Delivery) 转自:http://blog.csdn.net/kimmking/article/details/8443872 有时候我们不希望消息马上被broker投递出去,而是想要消息60秒以后发给消费者,或者我们想让消息没隔一定时间投递一次,一共投递指定的次数。。。 类似

Java消息队列:RabbitMQ与Kafka的集成与应用

Java消息队列:RabbitMQ与Kafka的集成与应用 大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿! 在现代的分布式系统中,消息队列是实现系统间通信、解耦和提高可扩展性的重要组件。RabbitMQ和Kafka是两个广泛使用的消息队列系统,它们各有特点和优势。本文将介绍如何在Java应用中集成RabbitMQ和Kafka,并展示它们的应用场景。 消息队

Kafka 分布式消息系统详细介绍

Kafka 分布式消息系统 一、Kafka 概述1.1 Kafka 定义1.2 Kafka 设计目标1.3 Kafka 特点 二、Kafka 架构设计2.1 基本架构2.2 Topic 和 Partition2.3 消费者和消费者组2.4 Replica 副本 三、Kafka 分布式集群搭建3.1 下载解压3.1.1 上传解压 3.2 修改 Kafka 配置文件3.2.1 修改zookeep

Android 友盟消息推送集成遇到的问题

友盟消息推送遇到的问题 集成友盟消息推送,步骤根据提供的技术文档接入便可。可是当你集成到项目中去的时候,可能并不是一帆风顺就搞定,因为你项目里面是可能集成了其他的sdk(比如支付宝,微信,七鱼等等三方的sdk)。那么这个时候,再加上友盟的消息推送sdk集成可能就会出现问题。 问题清单 友盟消息推送sdk和支付宝sdk冲突问题 后台配置了消息推送,也显示发送成功,但是手机没有收到消息通知

消息队列的理解和应用场景

知乎上的一个通俗理解的优秀答案 by 祁达方 小红是小明的姐姐。 小红希望小明多读书,常寻找好书给小明看,之前的方式是这样:小红问小明什么时候有空,把书给小明送去,并亲眼监督小明读完书才走。久而久之,两人都觉得麻烦。 后来的方式改成了:小红对小明说「我放到书架上的书你都要看」,然后小红每次发现不错的书都放到书架上,小明则看到书架上有书就拿下来看。 书架就是一个消息队列,小红是生产者,小明是

Redis应用之Feed流关注推送

我的博客大纲 我的后端学习大纲 -------------------------------------------------------------------------------------------------------------------------------------------------# 3.好友关注: 3.1.关注和取关: a.接口说明:

YOLOv8改进 | Conv篇 | YOLOv8引入DWR

1. DWR介绍 1.1  摘要:当前的许多工作直接采用多速率深度扩张卷积从一个输入特征图中同时捕获多尺度上下文信息,从而提高实时语义分割的特征提取效率。 然而,这种设计可能会因为结构和超参数的不合理而导致多尺度上下文信息的访问困难。 为了降低多尺度上下文信息的绘制难度,我们提出了一种高效的多尺度特征提取方法,将原始的单步方法分解为区域残差-语义残差两个步骤。 在该方法中,多速率深度扩张卷积

GIT-macOS配置推送代码到GitHub

文章目录 前言1. **设置 HTTP/HTTPS**临时设置(仅对当前会话有效)永久设置(写入配置文件) 2. **设置 SOCKS **3. **取消设置**4. **验证配置**5. **测试推送** 总结 前言 macOS配置推送代码到GitHub 1. 设置 HTTP/HTTPS 临时设置(仅对当前会话有效) git config --global ht

Linux平台下利用JNI+双向RMI实现远程推送

一、 前言  作为一种优秀的编程语言,Java在许多方面具有突出的优越性。其中,RMI技术充分展现了Java卓越的分布式计算能力,而JNI技术则体现了Java结合异种编程语言的强大能力。人们常说,RMI是“从Java到Java”,这种说法忽视了这样一个事实:Java可利用JNI技术很容易地与原有系统连接。JNI+RMI的技术解决方案极大地延伸了Java的分布式功能。  本文的写作是基于这样一种实