除了利用Pushlet实现信息推送外,DWR反转同样可以实现推送。
DWR的简单配置方法已经在以前的博客中写过。所以这里直接贴代码:
新建web工程,这里命名为DwrEg,包结构如下:
![](http://dl.iteye.com/upload/attachment/0062/9091/6fbe0ff0-2a03-3905-b278-34dc6660e37f.bmp)
web.xml代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>dwr-invoke</servlet-name>
<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>activeReverseAjaxEnabled</param-name>
<param-value>true</param-value>
</init-param>
<!--
<init-param>
<param-name>classes</param-name>
<param-value>java.lang.Object</param-value>
</init-param> -->
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoke</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>client.html</welcome-file>
</welcome-file-list>
</web-app>
dwr.xml代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr//dwr20.dtd">
<dwr>
<allow>
<create javascript="myrevsrse" creator="new">
<param name="class" value="com.src.MyReverse"/>
</create>
</allow>
</dwr>
MyReverse.java代码如下:
package com.src;
import java.util.Collection;
import org.directwebremoting.ScriptBuffer;
import org.directwebremoting.ScriptSession;
import org.directwebremoting.ServerContext;
import org.directwebremoting.ServerContextFactory;
import org.directwebremoting.WebContext;
import org.directwebremoting.WebContextFactory;
import org.directwebremoting.proxy.dwr.Util;
public class MyReverse {
public void sendMes(String mes){
System.out.println("kao shi si bestllll...");
send("系统消息:"+mes);
}
public void send(final String output) {
org.directwebremoting.WebContext web = WebContextFactory.get();
String page = web.getServletContext().getContextPath()+"/client.html";
Collection sessions = web.getScriptSessionsByPage(page);
System.out.println("size=="+sessions.size());
Util utilAll = new Util(sessions);
utilAll.addFunctionCall("callBack", output); //callBack是client.jsp里面的javascript函数,output是传递过去的参数
//utilAll.setValue("news_id", output, false);
//这种方法也可以,直接将client.html里id为news_id的textarea的值设置为output的值
}
public void noticeNewOrder(int id) {
WebContext wctx = WebContextFactory.get();
ScriptBuffer script = new ScriptBuffer();
script.appendScript("receiveMessages(")
.appendData(id)
.appendScript(");");
ServerContext sctx = ServerContextFactory.get(wctx.getServletContext());
Collection<ScriptSession> pages = sctx.getScriptSessionsByPage("/DwrEg/client.html");
for (ScriptSession session : pages) {
session.addScript(script);
}
}
}
client.html代码如下:
<html>
<script type="text/javascript" src="dwr/engine.js"></script>
<script type="text/javascript" src="dwr/util.js"></script>
<head>
<script type="text/javascript">
function callBack(data){
alert(data);
}
function receiveMessages(id) {
$('orderNotice').innerHTML = "收到id为" + id + "的新订单!";
$('orderNotice').show();
}
</script>
</head>
<body onload="dwr.engine.setActiveReverseAjax(true);">
<textarea rows="20" cols="20" id="news_id"></textarea>
<br />
<div id="orderNotice"></div>
</body>
</html>
推送界面dopush.html的代码如下:
<html>
<script type="text/javascript" src="dwr/engine.js"></script>
<script type="text/javascript" src="dwr/util.js"></script>
<script type="text/javascript" src="dwr/interface/myrevsrse.js"></script>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
<script type="text/javascript">
function sendnews(){
var new_content = dwr.util.getValue("newcontent");
myrevsrse.sendMes(new_content);
}
function sendinfo(){
myrevsrse.noticeNewOrder(12);
}
</script>
</head>
<body>
<input type="text" name="newcontent">
<input type = "button" value="发消息" onclick="sendnews()"/>
<br />
<input type = "button" value="send 2" onclick="sendinfo()"/>
<br />
</body>
同样,这里的问题也是怎么实现点对点的信息推送,这儿只是实现了向所有的clent.html页面推送信息,以后接着总结。。。。
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0062/9091/6fbe0ff0-2a03-3905-b278-34dc6660e37f-thumb.bmp)
- 大小: 9.9 KB
分享到:
相关推荐
学习两天,项目中做一个反向推送功能,功能比较简单,但是比较实用。要是项目中集成的话直接修改一下包路径 就行了。推送是session做的。可以用用户ID的。
使用dwr+spring实现消息推送 。
springMVC+dwr技术实现消息推送实例,简单实例演示如何用dwr实现后台向前台主动推送消息
本实例是在一些网络资料的基础上整合出来的一个:以后台向前台页面推送消息的一个完整实例工程,采用了spring、dwr反转,实现的是后台向前台不断推送消息,并管理相关用户退出;可以用在如定时任务的桌面消息提醒之...
springMvc + dwr 注解 实现消息推送 ,支持单个用户精确推送以及指定成员.群推送. 不需要任何配置修改,即可使用
使用DWR实现服务器端向客户端精确推送消息
实现 Dwr 服务器推送实现 Dwr 服务器推送实现 Dwr 服务器推送实现 Dwr 服务器推送实现 Dwr 服务器推送
该文档介绍了dwr实现消息推送的具体步骤,希望对大家有所帮助,若有不明白的地方,可以给我发消息,小弟能解答的一定解答。
dwr的反转ajax,实现服务器推送数据。
用dwr3实现推送功能,文件就是该实现代码
干货无需多扯,由于项目需求采用dwr3.0实现消息精准推送,以及JS调用后台Java函。Demo中有详细注释
在做公司OA时遇到了服务器向客户端发信息的屏障,后来百度搜了下,发现了DWR反转可以实现。这是自己做的一个小东西,大家可以下载看看!共同学习!呵呵!
在springMVC配置项目下,实现简单的DWR反转即时聊天
包含了dwr推送技术的详细介绍 和 一个基于dwr推送技术的聊天实例
使用dwr2.0实现服务器推客户端(结合响应socket服务器推消息)
以后台向前台页面推送消息的一个完整实例工程,采用了spring、dwr反转,实现的是后台向前台不断推送消息,并管理相关用户退出;可以用在如定时任务的桌面消息提醒之类的场景。改变传统的前台定时刷新/请求后台的工作...
文档记录了dwr相关的配置信息,按照实例即可完成dwr的推送。 解决了ScriptSessionListener 第一次不加载问题,及跨域的修改方式,以及Maven的引入方式
dwr反转聊天事例,dwr推技术反转聊天事例
dwr comet web push 服务器主动推送