什么是DWR
全名 Drect Web Remoting 开源,免费的Ajax框架
将Java类发布为JavaScript可调用的脚本对象,提供JavaScript工具类,简化页面编码
DWR(Direct Web Remoting)是一个WEB远程调用框架.利用这个框架可以让AJAX开发变得很简单.利用DWR可以在客户端利用JavaScript直接调用服务端的Java方法并返回值给JavaScript就好像直接本地客户端调用一样(DWR根据Java类来动态生成JavaScrip代码).
DWR原理
DWR 主要由两部分组成
运行在服务端的 Java Servlet,用来接收请求和发送响应到浏览器
运行在客户端的 JavaScript,用来发送请求和动态更新页面。DWR 依靠动态的 Javascript 来工作,这些 Javascript 脚本是基于 Java 类的。代码产生一些 Ajax 的动作使之看起来像是发生在浏览器中的客户端,但事实上是服务端在执行这些代码,DWR负责数据的转换,然后来来回回的传输所产生的数据。
DWR 主要由两部分组成
运行在服务端的 Java Servlet,用来接收请求和发送响应到浏览器
运行在客户端的 JavaScript,用来发送请求和动态更新页面。DWR 依靠动态的 Javascript 来工作,这些 Javascript 脚本是基于 Java 类的。代码产生一些 Ajax 的动作使之看起来像是发生在浏览器中的客户端,但事实上是服务端在执行这些代码,DWR负责数据的转换,然后来来回回的传输所产生的数据。
好了不多说了,开始正题
1.新建一个项目
将 dwr.jar , commons-logging-1.04.jar , log4j-1.2.12.jar 三个文件拷贝到
WEB-INF/lib 目录中,因为DWR 需要使用日志记录
2. DWR 使用一个Servlet 来处理用户的异步请求和发送响应,所以我们需要在web.Xml 中配置这个Servlet
可以打开dwr.war 这个实例包,然后打开 /WEB-INF/web.xml 文件,拷贝其中有关servlet
部署的代码到我们工程的web.Xml 中
3.编写一个 java 类,供客户端进行调用
4.客户端要使用javaScrip 调用Hello 类中的sayHello 方法,并且还要传递参数,然后返回一个字符串,客户端显示这个字符串。此时必须告诉 DWR 的 Servlet 我们只要做的事情,如何告诉?DWR 是通过一个 xml 文件告诉Servlet 的,这个xml 文件就是dwr.xml. 在与web.xml 同目录中创建该文件。
配置参数说明
creator: new,spring,none
javaScript:生成客户端的对象,避免使用Javascript关键字
scope:对象保存的范围
param ,creator构造器参数,如new构造器参数:
<param name=“class” value=“类的全限定名" />
include,指定的可以方法名。
exclude,指定拒绝访问的方法名。
creator 设定为new,表示DWR 框架使用Hello 的无参构造方法实例化Hello类,javaScript 表示 Hello 类映射到客户端javaScript 中的类型这个部署描述文件定义什么样的Java 类可以被DWR 应用创建并通过Javascript 远程调用。在上面的部署描述中,定义了可以被DWR 创建的Java 类com.wq.ajaxservice.Hello,并给这个类赋予一个Javascript 名称Hello。通过修改dwr.xml,也可以将自定义的Java 类暴露给Javascript 远程调用。
需要注意的是,dwr 部署描述为远程Java 类拟定的Javascript 名称还是有些限制的。
避免使用 Javascript 关键字或者保留字,因为这些用Javascript 关键字或者保留字命名
的方法会自动执行。大部分的Javascript 关键字或者保留字也是Java 的关键字或者保
留字,比如,“try()”不是一个合法的命名。不过还是有一部分的Javascript 关键字或
者保留字在Java 中不被限制,比如“delete()”。
避免使用方法重载。有时候,在调用这些重载的方法会引起麻烦,因为Javascript 没
有像Java 那样的包命名机制来支持方法重载。
u
可以看到 DWR 已经识别出了部署在 DWR 中的com.wq.ajaxservice.Hello 类。点击Hello
在其中sayHello 中输入参数,然后Execute 执行:
上面出现了预期的结果,说明通过测试了
6. 在 jsp 页面中通过调用javaScript 方法,来调用服务器上的Hello 类的 sayHello 方法,然后在jsp 页面中处理返回的结果
在上一步的测试中,可以看到测试页面显示了如下的内容:
也就是说,DWR 为我们生成好了Hello 类对应的JavaScript 调用的js 文件,我们需要在jsp文件中引入上面的三个js 文件, util.js 是一个工具,可以根据情况决定是否引用。
7.jsp页面调用
8. dwr.xml 文件说明
所有部署描述文件的顶级根元素为dwr,其按照顺序可以包含以下三个子元素之一。
init:此元素定义那些在应用程序启动时作为DWR 运行库所需的类自动加载并初
始化的类。
allow:此元素定义那些允许客户端Javascript 远程调用的Java 类。
signatures:此元素签名必要的方法,当使用集合的时候,为转换器指定Java 反射
机制外的类别信息。
元素名称 属性名称 父 元 素 用 途
dwr dwr.xml 文档的根元素
init dwr 定义那些在应用程序启动时作为DWR 运行库所
需的类自动加载并初始化的类
creator init 定义供Javascript 调用的新建对象的方法,即对
象的构造方法
id creator 用来惟一标识creator 所创建的对象。必需属性
class creator 应用creator 元素定义的Java 对象的完整名称。
必需属性
converter init 定义Javascript 对象和Java 对象之间新的转换
方法。有些类有默认的转换机制,但有些类需要
自定义转换机制
id converter 用来惟一标识converter 所创建的对象。必需属
性
class converter 应用converter 元素定义的Java 对象的完整名
称。必需属性
allow dwr 定义那些允许客户端Javascript 远程调用的
Java 类
create allow 定义允许创建的Java 类,并为其指定一个
Javascript 名称,并定义DWR 应当如何获得要进
行远程的类的实例
creator create create 元素所使用的构造方法名称。必需属性
续表
元素名称 属性名称 父 元 素 用途
javascript create Java 类暴露给浏览器调用的Javascript 名称。必
需属性
scope create create 元素所创建的类的可用范围,默认为
page。可选属性
param create 指定create 元素所需要的参数,比如其允许创
建的Java 类的名称
name param param 元素所指定的参数名称。必需属性
value param param 元素所指定的参数值。必需属性
include create 指定应当公开的方法的名称。必需属性
exclude create 指定那些想防止被访问的方法
auth create 为暴露给浏览器的方法指定允许访问的角色
method auth 指定需要访问角色限制的方法。必需属性
role auth 指定允许访问的角色。必需属性
convert allow 告诉DWR在服务器端 Java 对象表示和序列化
的 Javascript 之间如何转换数据类型
converter convert 指定所使用的转换器的标识。必需属性
match convert 与转换器所匹配的类名称。必需属性
param convert 指定转换器所要包含的参数
name param param 元素所指定的参数名称。必需属性
value param param 元素所指定的参数值。必需属性
signatures dwr 签名必要的方法,当使用集合的时候,为转换
器指定Java 反射机制之外的类别信息