DWR简介

 什么是 DWR? DWR 是英文 Direct Web Remoting 的缩写,是一套易于用 Java 实现的 Ajax 框架,利用 DWR 可以轻松实现页面的无刷新效果。



图( 1
图( 1 )就是典型的 DWR 调用过程:
select 框的选择(此处应有 select onchange 事件来调用页面上的 eventHandler 函数),会调用服务器端的 Java 函数 AjaxService.getOptions() ,该 Java 方法返回一个 String 数组到页面上,同时,调用回调函数 populateList() ,通过 DWR 自带的方法将该数组的值添加到下拉框中。
整个过程中页面不会刷新,但页面上的结果会有所不同。

dwr.xml 介绍术语:
参数会被 converted, 远程 Bean 会被 created, 所以如果有一个叫 A bean ,它有一个方法叫 A.blah(B) ,那么你需要一个 A creator 和一个 B converter

DWR 的配置文件 dwr.xml 大致分为三个部分:
1.          <init>
<init> 标签用于声明自己的创造器
2.          <allow>
<allow> 标签是必须的,否则 DWR 什么也做不了
实例:
<allow>
<create creator = “new” javascript = ”testClass”>
    <param name=”class” value=”/com.dwr.TestClass” />
<include method=”testMethod1” />
</create>
</allow>
<create> 标签中指定 javascript 中可以访问的 java 类,并定义 DWR 应当如何获得将要进行远程调用的类的实例。
creator = “new” 属性指定 java 类实例的生成方式, new 意味着 DWR 应当调用类的默认构造函数来获得实例,当然还有其它方式
javascript=”testClass” 属性指定 javascript 代码访问对象时使用的名称。
<param> 标签指定要公开给 javascript java 类名
<include> 标签指定要公开给 javascript 的方法,不指定的话就公开所有方法
<exclude> 标签指定要防止被访问的方法。
l   <converter>
我们必须保证所有的参数都可以被转换, JDK 中的大多数类型已经有转换器了,但是你需要给 DWR 转换你的代码的权利,一般来说 JavaBean 的参数需要 <convert…> 定义,默认情况下,如下类型不需要定义就可以转换:
1.          所有原生类型 boolean int double
2.          原生类型的对象类型 Integer Double
3.          Java.lang.String java.util.Data SQL 中的 Date
4.          以上类型组成的数组
5.          以上类型的集合类型 (List Set Map Iterator )
3.          <signatures>
signatures 使 DWR 能确定集合中存放的数据类型。例如下面的定义中我们无法知道 list 中存放的是什么类型。
public class Check{
     Public void setLotteryResults(List nos){
      …….
}
}
Signatures 允许我们暗示 DWR 应该使用什么类型去处理,如下:
<signatures>
<![CDATA[
import java.util.List;
import com.exapmle.Check;
Check.setLotteryResults(List<Integer> nos);
]]>
< /signatures >
Signatures 只是用来确定泛型参数中的类型参数。 DWR 会自己使用反射机制或运行时类型来确定类型,或者假设它是一个 String 类型,所以:
l  不需要 signatures —没有泛型参数
Public void method(String p);
Public void method(String[] p);

l  需要 signatures DWR 不能通过反射确定
Public void method(list<DATE> p);
Public void method(Map<String, WibbleBean> p);

l  不需要 signatures DWR 能够正确的猜出
Public void method(String p);

l  不需要 signatures DWR 可以通过运行时类型确定
Public List<DATE> method(String p);

Reverse Ajax 通常情况下的 Ajax 过程:


Reverse Ajax ——反向 Ajax ,即服务器端的 java 方法可以取得浏览器端的 Web 上下文,并可以调用 javascript 的方法,将服务器端的数据异步地传输给浏览器。
DWR 支持 3 种从服务器端发送数据给客户端的方式:
l   Polling
轮询:客户端在每个时间周期内向服务器发送请求,看看服务器有没有数据更新,如果有,就向服务器请求数据。

l   Comet
Comet 基于 HTTP 长连接的服务器推动方式。客户端向服务器端发送请求后,服务器端将数据通过 response 发送给客户端,但不会将此 response 关闭,而是一直通过 response 将最新的数据发送给客户端浏览器,知道客户端浏览器关闭。

l   Piggybacking
服务器端将最近的数据排成队列,等待客户端下一次请求,接收到请求后就将等待更新的数据发给客户端。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值