您的位置:首页 > 其它

使用DWR反转实现信息推送

2015-04-08 15:03 197 查看


使用DWR反转实现信息推送

博客分类:

DWR

DWR反转推送

除了利用Pushlet实现信息推送外,DWR反转同样可以实现推送。

DWR的简单配置方法已经在以前的博客中写过。所以这里直接贴代码:

新建web工程,这里命名为DwrEg,包结构如下:



web.xml代码如下:

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代码


<?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代码如下:

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代码


<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代码


<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页面推送信息,以后接着总结。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: