`

一个成功运行的DWR推技术例子

阅读更多

1、首先要下载dwr 3.0 地址 http://directwebremoting.org/dwr/download.html

2、在web.xml中加入dwr的servlet和相关配置
<!--dwr servlet-->
  <servlet>
    <servlet-name>dwr-invoker</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>pollAndCometEnabled</param-name>
      <param-value>true</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>      
  </servlet>
  <servlet-mapping>
      <servlet-name>dwr-invoker</servlet-name>
      <url-pattern>/dwr/*</url-pattern>
  </servlet-mapping>

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.Collection;
import java.util.LinkedList;  
import org.directwebremoting.WebContext;
import org.directwebremoting.WebContextFactory;
import org.directwebremoting.proxy.dwr.Util;
public class DWRHelper {
    
    public void addMessage(String text,String name) {
     String tempStr = name+"说:"+text;
        LinkedList messages = new LinkedList();
        if (text != null && text.trim().length() > 0) {
            messages.addFirst(new Message(tempStr));
            //messages.addLast(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都可以
<%@ page language="java" contentType="text/html; charset=UTF-8" 
    pageEncoding="UTF-8"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
 <title>Insert title here</title> 
</head> 
<h1>Java Chat</h1>
<body onload="dwr.engine.setActiveReverseAjax(true);">
<script type='text/javascript' src='dwr/interface/DWRHelper.js'></script>
<script type='text/javascript' src='dwr/engine.js'></script>
<script type='text/javascript' src='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 Name:<input id="username" type="text"/></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"),document.getElementById("username").value);
    }
</script>
<hr />
<ul id="chatlog" style="list-style-type:none;">
</ul>
</body>

</html>
页面代码简单吧,只有方法调用,没有任何获得返回数据,和对回传数据处理的代码
注意:<body onload="dwr.engine.setActiveReverseAjax(true);">
这个是要在使用reverse-ajax的页面必须的!

6.同时打开两个浏览器,都访问jsp页面,就可以互相聊天了。

现在可以启动应用体检一把reverse-ajax,希望你能和我有一样的惊奇感觉
当然,肯定有人会说这种功能用普通的ajax也可以实现啊,为什么要用reverse-ajax
这时候你就要考虑这种情况了,有用户A和用户B同时在发Message,A正在看message没有任何request动作,而B发了一条新message,这时要求这个信息要展现给A看,那么普通的ajax可以处理这种功能吗?这就是reverse-ajax的用途,可以从服务段向brower下推信息 .

 

文字转载自:http://blog.sina.com.cn/s/blog_5bd96d520100gau4.html

分享到:
评论
2 楼 413277409 2011-09-05  
不错。还狠经典的 。
1 楼 damoo 2011-07-16  
写的不错。
谢谢分享。

相关推荐

    dwr推技术官方实例

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

    dwr 推送例子,CHAT

    这个"DWR 推送例子, CHAT"是演示如何利用DWR实现双向通信,创建一个实时聊天应用的示例。下面将详细解释DWR的核心概念以及这个CHATDEMO的工作原理。 首先,理解DWR的基本工作方式非常重要。DWR通过在服务器端运行的...

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

    DWR的工作原理是通过在服务器端创建一个Java对象,这个对象暴露了若干方法供客户端JavaScript调用。当这些方法被调用时,DWR会处理网络通信细节,使得JavaScript可以直接与服务器上的Java代码进行交互。同时,DWR还...

    DWR推送技术大全 dwr推送聊天实例

    - **事件处理**:在客户端,通常会有一个事件监听器来捕获来自DWR的推送消息,并在界面上显示新消息。 - **用户认证与会话管理**:为了保证安全性,聊天应用通常需要用户认证。DWR可以集成Spring Security等框架进行...

    dwr推送例子

    通过以上步骤,你可以在MyEclipse中成功搭建一个DWR推送的例子,体验到DWR带来的便捷性和实时性。在实际开发中,还可以结合其他前端框架,如jQuery或AngularJS,进一步提升用户体验。同时,注意对DWR的安全性进行...

    dwr java推送例子 免积分

    总的来说,这个"DWR Java推送例子 免积分"提供了一个学习和实践DWR实时推送功能的机会,特别适合那些希望在Web应用中实现即时通信功能的开发者。通过理解并实践这个例子,你可以更好地掌握DWR的使用,以及如何在不...

    DWR网页聊天例子

    Direct Web Remoting (DWR) 是一个开源的Java库,它允许JavaScript在浏览器端与服务器端的Java代码进行交互,从而实现动态、实时的Web应用程序。DWR使得开发者能够轻松地在客户端和服务器之间传递数据,而无需手动...

    dwr推技术简单案例

    DWR通过在浏览器和服务器之间建立一个持久连接,使得服务器可以主动向客户端推送数据,而不仅仅是响应客户端的请求。这种技术通常被称为Comet或长轮询,是实现服务器推的关键。 在开始DWR的实战之前,确保你的项目...

    dwr 实现推技术 实例

    本实例将通过一个点对点聊天功能的实现,深入探讨DWR的推技术。 ### DWR基础 1. **反向Ajax(Reverse Ajax)**:DWR的核心功能之一是实现反向Ajax,即服务器可以主动向客户端推送数据,而不仅仅是响应客户端的请求...

    DWR服务器推技术Demo

    DWR是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开发人员开发包含AJAX技术的网站。它可以允许在浏览器里的代码使用运行在WEB服务器上的JAVA函数,就像它就在浏览器里一样。

    第一个DWR HelloWorld例子(附:详细说明)

    在这个"第一个DWR HelloWorld例子"中,我们将深入理解DWR的基本原理和操作流程,通过实践来学习如何搭建一个简单的DWR应用。 1. **DWR的基本概念** DWR的核心思想是创建一个安全的、高效的、易于使用的AJAX框架。...

    dwr反推简单例子

    在创建一个DWR反推例子时,你需要遵循以下步骤: 1. **配置DWR**:在你的项目中,你需要创建一个名为`dwr.xml`的配置文件,用于定义DWR允许暴露给JavaScript的Java类和方法。例如,你可以将一个名为`MyService`的类...

    dwr 推技术 demo

    本"dwrd 推技术 demo"显然是一个用于展示DWR实时推送功能的示例项目。 1. **DWR框架核心概念**: - **Reverse AJAX**:DWR的核心特性之一就是反向AJAX,即服务器可以主动向客户端发送数据,而不仅仅是响应客户端的...

    dwr简单推送例子

    这个"**dwr简单推送例子**"是一个示例项目,旨在展示如何利用DWR实现服务端向客户端的实时数据推送功能,这是Web应用中实现即时更新、实时聊天或通知的关键技术。 DWR的核心功能是通过AJAX(Asynchronous ...

    dwr推送技术

    在实际项目中,根据`dwrpush`这个文件名,我们可以推测这是一个关于DWR推送技术的示例或配置文件,可能包含了如何设置和使用DWR推送功能的代码示例。通过对这个文件的深入学习和实践,可以更好地理解和掌握DWR3的推...

    DWR服务器推送技术(实时)

    DWR的核心特性是它支持AJAX(Asynchronous JavaScript and XML)以及服务器推送技术,极大地提高了Web应用的用户体验。 **服务器推送技术**: 传统的HTTP协议是基于请求-响应模型的,即客户端发起请求,服务器响应...

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

    在描述中提到的案例是一个使用DWR构建的广播或群聊系统。DWR的实时更新能力使其非常适合用于构建这样的系统。通过DWR的Push技术,服务器可以主动向客户端推送消息,而不仅仅是响应客户端的请求。这种模式在群聊系统...

    dwr服务器推送,dwr.jar,推送,服务器ajax,dwr服务推送例子

    - ** Comet**:DWR也支持Comet技术,这是一种模拟服务器推送的技术,通过长时间保持一个HTTP连接来实现,直到服务器有数据时才关闭连接并发送更新。 在实际应用中,使用DWR服务器推送的例子可能包括实时聊天系统、...

    dwr服务器推技术

    在描述中提到的"DWR服务器推技术整合Struts2",意味着我们将DWR与流行的MVC框架Struts2相结合,以创建一个具有聊天功能的Web应用。Struts2提供了一个强大的架构来处理HTTP请求,并结合DWR,可以创建一个动态的、交互...

    学习dwr的一个例子

    这个"学习dwr的一个例子"是一个实践教程,可能包含了如何设置DWR环境、创建远程Java对象、调用这些对象的方法以及处理返回的数据等步骤。 1. **DWR简介**:DWR的核心功能是通过AJAX技术实现浏览器与服务器之间的...

Global site tag (gtag.js) - Google Analytics