`

使用DWR反转实现信息推送(一)

    博客分类:
  • DWR
阅读更多

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

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

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

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页面推送信息,以后接着总结。。。。

  • 大小: 9.9 KB
分享到:
评论
1 楼 soanlin 2014-02-20  
我可不可以不用页面点击推送,直接后台推送的

相关推荐

    dwr demo 反向推送 导向推送

    总结来说,"dwr demo 反向推送 导向推送"是一个演示如何使用DWR实现实时服务器推送的项目,它包括了必要的配置和JavaScript调用,对于理解DWR的工作原理以及在实际项目中应用反向推送技术非常有帮助。通过学习这个...

    dwr+spring实现后台向前台推送实例

    本实例是在一些网络资料的基础上整合出来的一个:以后台向前台页面推送消息的一个完整实例工程,采用了spring、dwr反转,实现的是后台向前台不断推送消息,并管理相关用户退出;可以用在如定时任务的桌面消息提醒之...

    dwr反转AJAX聊天源码

    通过学习和研究这个源码,开发者可以了解到如何使用DWR库实现服务器向客户端的实时数据推送,掌握DWR的基本配置和API使用,同时也能理解如何设计和实现一个简单的聊天系统。这对于理解Ajax通信、提升Web开发技能,...

    dwr推技术实现服务器推送数据

    总结来说,DWR推技术是实现服务器主动向客户端推送数据的一种高效方式,尤其适用于需要实时数据更新的应用,如股票实时显示。通过反转Ajax,DWR简化了开发流程,提高了用户体验,是现代Web开发中的一个重要工具。

    dwr消息推送demo

    以后台向前台页面推送消息的一个完整实例工程,采用了spring、dwr反转,实现的是后台向前台不断推送消息,并管理相关用户退出;可以用在如定时任务的桌面消息提醒之类的场景。改变传统的前台定时刷新/请求后台的工作...

    dwr推技术反转聊天事例

    这种机制称为反向Ajax或Comet技术,能够实现数据的推送,即服务器主动将数据推送给客户端,而不是等待客户端请求。在聊天应用中,这种功能尤为重要,因为它确保了消息的即时传递。 1. **DWR配置**:在开始之前,...

    java+dwr框架实现聊天室

    dwr 框架实现了服务器推技术,使得服务器可以实时推送数据到客户端,实现了实时通信的功能。 七、结论 Java+dwr 框架实现聊天室是使用Java语言和dwr框架实现的服务器推技术,实现了实时通信的聊天室功能。该技术的...

    Dwr 推例子 反转 ajax dwr dwr推群聊 dwr聊天系统源码 聊天系统 广播系统

    在DWR中,可以通过`StreamingUpdateService`来实现流式推送,确保聊天信息的实时性和效率。 **4. 数据加密与持久化** 描述中提到了聊天信息被加密并保存到文本文档中,这涉及到数据安全性和存储。在实际应用中,...

    dwr推技术官方实例

    压缩包内的"chat(dwrAjax反转)"文件可能是DWR聊天室的示例,它展示了如何使用DWR的推技术实现一个简单的实时聊天应用。在这个示例中,用户可以通过JavaScript与服务器进行交互,发送消息,同时服务器也能在接收到新...

    spring与dwr整合(简单)

    Spring 和 Direct Web Remoting (DWR) 的整合是将 Spring 框架的依赖注入和控制反转特性与 DWR 的动态 Web 接口相结合,从而实现客户端 JavaScript 和服务器端 Java 代码之间的无缝交互。这种整合使得开发人员可以...

    DWR示例与spring集成

    **DWR反转Ajax**是DWR的一个核心特性,它使得开发者可以在服务器端编写业务逻辑,然后直接调用这些逻辑,而无需关心前端如何触发请求。这种模式下,服务器可以主动向客户端推送数据,而不仅是响应客户端的请求,提高...

    dwr小项目及资料

    同时,DWR还支持服务器端反向调用,即服务器可以主动触发前端的JavaScript函数,这对于实时更新、推送通知等场景非常有用。 在提供的压缩包文件列表中: 1. **Spring与DWR集成.doc** - 这可能是一个文档,详细介绍...

    dwr3.x demo 实例 例子

    这极大地简化了Ajax的使用,并增强了用户体验,因为服务器可以主动推送数据到客户端。 2. **轮询(Polling)**:在实时性要求较高的应用中,DWR支持定时轮询机制,即客户端定期向服务器发送请求,获取最新的数据。...

    dwr comet 使用示例,使用spring作为后台的管理容器

    Comet是Web应用程序中实现服务器向客户端推送数据的一种技术,通常用于构建实时更新的Web应用。在这个示例中,我们将探讨如何结合DWR 3.0和Spring 2.5框架来实现Comet交互。** **1. DWR(Direct Web Remoting)** ...

    dwr实例,JavaScript调用java方法的小例子

    10. **实时更新(Remote Update)**:DWR的实时更新功能允许服务器主动推送数据到客户端,而无需客户端发起请求,这在实现实时应用时非常有用。 通过"TestDwr"中的示例,你可以看到如何配置DWR,创建可调用的Java服务...

    java聊天室技术分析

    本文将重点介绍基于Java技术栈实现聊天室的方法之一——利用DWR(Direct Web Remoting)技术实现服务器端主动推送数据到客户端的过程。 #### 二、“推”技术概述 在传统的B/S架构中,通常采用的是客户端向服务器...

Global site tag (gtag.js) - Google Analytics