`
chq_love_hate
  • 浏览: 7069 次
  • 性别: Icon_minigender_1
  • 来自: 南京
最近访客 更多访客>>
社区版块
存档分类
最新评论

dwr2.0 reverse-ajax 的用法

    博客分类:
  • ajax
阅读更多

本文引自:http://www.blogjava.net/rocket/archive/2007/05/19/118543.html

仅copy过来内容,本人才做blog,还不清楚一些用法,后续在完善。

 

dwr reverse-ajax 实例解析
在网上找了一个老外写的dwr reverse-ajax的例子,自己把coding顺序调整了一下希望可以对学习dwr reverse-ajax的朋友有所帮助
1、首先要下载dwr 2.0 地址 http://getahead.org/dwr/download
2、在web.xml中加入dwr的servlet和相关配置
<!--dwr servlet-->

pollAndCometEnabled是指dwr 的reverse ajax是使用polling 和comet的方式,在这个例子中可以明显地从页面上看出来是用的polling+comet
附:关于reverse-ajax的实现有3种方式
polling 就是隔一段时间向服务器发送一request来检查服务端是否有数据更新
comet 就是一个长http请求,在请求期间服务端可以向客户端push数据,但是这种做法要求server和brower长期建立一个通信通道,而且效率很低
piggyback 就是服务端的更新数据都在排队等待,等到下一次有请求过来,那么这些等待更新数据就伴随这次请求一起发送到brower
有关更详细的reverse-ajax技术介绍可以参考http://getahead.org/dwr/reverse-ajax
3、创建一个dwr.xml,用于配置你要制定的java代码映射类,以及允许使用的方法和converter
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC
"-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"
"http://www.getahead.ltd.uk/dwr/dwr10.dtd">
<dwr>
<allow>
<create creator="new" javascript="DWRHelper">
<param name="class" value="com.cloverworxs.uma.helper.DWRHelper" />
<include method="addMessage" />
</create>
<convert converter="bean" match="com.cloverworxs.uma.helper.Message">
<param name="include" value="id,text" />
</convert>
</allow>
</dwr>
create是只一个java的js映射,其中include是可以在js使用的方法
convert 是指对应js到java,或者java到js的对象转换,其中include是可以转换的属性
4、写服务段的java代码
DWRHelper
package com.cloverworxs.uma.helper;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import org.directwebremoting.ScriptBuffer;
import org.directwebremoting.WebContext;
import org.directwebremoting.WebContextFactory;
import org.directwebremoting.proxy.dwr.Util;

public class DWRHelper {

public void addMessage(String text) {
LinkedList messages = new LinkedList();

if (text != null && text.trim().length() > 0) {
messages.addFirst(new Message(text));
while (messages.size() > 10) {
messages.removeLast();
}
}
// Reverse Ajax code to be added here shortly
WebContext wctx = WebContextFactory.get();
String currentPage = wctx.getCurrentPage();

// Clear the input box in the browser that kicked off this page only
Util utilThis = new Util(wctx.getScriptSession());
utilThis.setValue("text", "");

// For all the browsers on the current page:
Collection sessions = wctx.getScriptSessionsByPage(currentPage);
Util utilAll = new Util(sessions);
// Clear the list and add in the new set of messages
utilAll.removeAllOptions("chatlog");
utilAll.addOptions("chatlog", messages, "text");

}

}
Message
package com.cloverworxs.uma.helper;

import org.directwebremoting.Security;

public class Message {
public Message(String newtext) {
text = newtext;
if (text.length() > 256) {
text = text.substring(0, 256);
}
text = Security.replaceXmlCharacters(text);
}

public long getId() {
return id;
}

public String getText() {
return text;
}

private long id = System.currentTimeMillis();

private String text;
}
5、到此为止可以写页面代码了,下面的代码html或者jsp都可以
<h1>Java Chat</h1>
<body onload="dwr.engine.setActiveReverseAjax(true);">
<script type='text/javascript' src='/sperc/dwr/interface/DWRHelper.js'></script>
<script type='text/javascript' src='/sperc/dwr/engine.js'></script>
<script type='text/javascript' src='/sperc/dwr/util.js'></script>
<p>This is a very simple chat demo that uses reverse ajax to collect messages and server-side browser manipulation to update the pages with the results.</p>
<p>Your Message: <input id="text" onkeypress="dwr.util.onReturn(event, sendMessage)" /> <input type="button" value="Send" onclick="sendMessage()" /></p>
<script type="text/javascript">
function sendMessage() {
alert(dwr.util.getValue("text"));
DWRHelper.addMessage(dwr.util.getValue("text"));
}
</script>
<hr />
<ul id="chatlog" style="list-style-type:none;">
</ul>
</body>
页面代码简单吧,只有方法调用,没有任何获得返回数据,和对回传数据处理的代码
注意:<body onload="dwr.engine.setActiveReverseAjax(true);">
这个是要在使用reverse-ajax的页面必须的!
现在可以启动应用体检一把reverse-ajax,希望你能和我有一样的惊奇感觉
当然,肯定有人会说这种功能用普通的ajax也可以实现啊,为什么要用reverse-ajax
这时候你就要考虑这种情况了,有用户A和用户B同时在发Message,A正在看message没有任何request动作,而B发了一条新 message,这时要求这个信息要展现给A看,那么普通的ajax可以处理这种功能吗?这就是reverse-ajax的用途,可以从服务段向 brower下推信息

 

分享到:
评论

相关推荐

    dwr 2.0(reverse ajax)实现推的web IM例子

    总的来说,通过这个例子,你可以学习到如何使用DWR 2.0来构建一个实时的Web应用,特别是如何利用Reverse Ajax实现服务器到客户端的数据推送。这不仅加深了对DWR的理解,还对Web开发中的实时通信有了实际操作的经验。...

    DWR2.0中文文档

    5. **DWR的使用方法** - **JavaScript API**:学习DWR提供的JavaScript接口,如`DWRUtil`、`RemoteObject`等。 - **Java Classes and Interfaces**:了解如何创建可被DWR调用的Java类和接口。 - **JSON and XML**...

    DWR3.0.jar、DWR.war和DWR2.0中文说明文档

    这份文档对于理解DWR的工作原理和使用方法至关重要,特别是对于中文用户来说。DWR2.0文档可能会涵盖以下几个方面: - **安装与配置**:介绍如何将DWR添加到现有项目中,包括引入jar文件、配置web.xml和dwr.xml文件...

    使用dwr2.0实现服务器推客户端

    虽然示例中没有直接列出DWR的相关配置,但在实际应用中,你需要添加一个`dwr-engine-filter`和`dwr-reverse-ajax-filter`过滤器映射,以及对应的`dwr-servlet`配置。这些配置允许DWR运行并处理JavaScript与Java之间...

    dwr2.0示例

    在"TestDWR"这个压缩包中,很可能是包含了一些DWR 2.0的示例代码,用于演示如何使用DWR进行Ajax开发。通过分析这些示例,我们可以深入理解DWR的工作原理,以及如何在实际项目中应用DWR来构建动态、交互性强的Web应用...

    服务器推--DWR中的push机制-Reverse_Ajax.docx

    DWR(Direct Web Remoting)是一个开源Java库,它实现了服务器推功能,尤其是其2.0版本开始引入的push机制。 1. **Polling(轮询)** 轮询是最基础的模拟服务器推的方式。客户端以一定的频率(如几秒一次)向...

    DWR中的push机制-Reverse_Ajax.pdf

    Direct Web Remoting(DWR)自2.0版本起引入了引人注目的Push功能,即Reverse Ajax,这一特性打破了传统的Web通信模式,允许服务器主动向客户端推送数据。本文将深入探讨DWR的Push机制,包括其实现原理、三种工作...

    DWR帮助文档(中文)

    1. **Ajax通信**:DWR2.0允许开发者使用简单的JavaScript代码就能实现Ajax请求,如`DWRUtil.remoteCall('ServerMethod', params, callback);`,这大大简化了前端与后端的交互。 2. **对象映射**:DWR可以自动将Java...

    dwr官方资料

    DWR简化了在Web应用中使用Ajax的过程,让开发者可以方便地调用服务器端的方法,更新页面而无需刷新整个页面。 标题中的“dwr官方资料”指的是关于DWR框架的官方文档、教程、示例代码或API参考,这些资料通常会帮助...

    struts2.0与dwr开发实例

    Struts2.0作为MVC(Model-View-Controller)框架,主要用于构建企业级的Java Web应用,而DWR则是一种使得JavaScript可以与服务器端Java对象进行交互的技术,类似于一种Ajax库。在Struts2.0中集成DWR,可以极大地提升...

    dwr消息推送功能

    DWR 消息推送的核心是实现了基于 AJAX 的双向通信机制,即所谓的 Reverse Ajax。在这种模式下,客户端发起一个连接到服务器的持久请求,当服务器有新数据时,会主动推送数据给客户端,而不是等待客户端轮询。这种...

    采用反向AJAX实现在线人员上下线模拟.docx

    在DWR 2.0版本中,引入了反向AJAX的支持,使得服务器能够主动地更新客户端的Web页面。 1. **轮询(Polling)**: 客户端定期向服务器发送请求,检查是否有新数据。如果存在,服务器将数据返回给客户端。这是最简单...

    extjs做的一个桌面应用系统

    DWR的使用涉及到几个核心概念:Reverse AJAX、CORS(跨域资源共享)和安全控制。Reverse AJAX允许浏览器向服务器发送异步请求,DWR通过动态生成JavaScript接口,使得客户端可以直接调用服务器端的方法。CORS解决了...

Global site tag (gtag.js) - Google Analytics