一.原理
DWR 是一个引擎,可以把服务器端 Java 对象的方法公开给 JavaScript 代码。使用 DWR 可以有效地从应用程序代码中把 Ajax 的全部请求-响应循环消除掉。这意味着客户端代码再也不需要直接处理 XMLHttpRequest 对象或者服务器的响应。不再需要编写对象的序列化代码或者使用第三方工具才能把对象变成 XML。甚至不再需要编写 servlet 代码把 Ajax 请求调整成对 Java 域对象的调用。虽然 DWR 不是 Java 平台上唯一可用的 Ajax-RPC 工具包,但是它是最成熟的,而且提供了许多有用的功能。 DWR 是作为 Web 应用程序中的 servlet 部署的。把它看作一个黑盒子,这个 servlet 有两个主要作用:首先,对于公开的每个类,DWR 动态地生成包含在 Web 页面中的 JavaScript。生成的 JavaScript 包含存根函数,代表 Java 类上的对应方法并在幕后执行 XMLHttpRequest。这些请求被发送给 DWR,这时它的第二个作用就是把请求翻译成服务器端 Java 对象上的方法调用并把方法的返回值放在 servlet 响应中发送回客户端,编码成 JavaScript。
二.使用DWR的开发步骤
1)下载dwr.jar并将其加载到应用程序lib包下,并且将JAR包中的engine.js,util.js放在应用程序指定目录下,如dwr,注意这里要考虑目录路径问题
2)配置应用程序部署描述XML文件
以下为通用默认配置
xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>dwr-invokerservlet-name>
<servlet-class>uk.ltd.getahead.dwr.DWRServletservlet-class>
<init-param>
<param-name>debugparam-name>
<param-value>trueparam-value>
init-param>
servlet>
<servlet-mapping>
<servlet-name>dwr-invokerservlet-name>
<url-pattern>/dwr/*url-pattern>
servlet-mapping>
web-app>
这一步骤的目标是将DWRServlet这个servlet配置到应用程序中
3)配置dwr.xml
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="AIX">
<param name="class" value="com.longcredit.KEye.app.business.AIXStatusBusiness"/>
create>
allow>
dwr>
在这里要注意的是:
<create creator="new" javascript="AIX">这里的AIX是DWR自己生成的JS文件的名称,在网页中将被引用的JS文件名称
value="com.longcredit.KEye.app.business.AIXStatusBusiness"/>
这里的value值是一个类路径及其名称,该类为业务类,将被DWR映射成JS文件调用,它的调用名就是上面的AIX
1) 编写AIXStatusBusiness类
public class AIXStatusBusiness {
public String remove(String id){
//执行command
//返回状态
//把返回的XML结果解析
return id;
}
}
2) 在页面中调用
首先要引入JS
<script type="text/javascript" src='dwr/interface/AIX.js'>script>
<script type='text/javascript' src='dwr/engine.js'>script>
<script type='text/javascript' src='dwr/util.js'>script>
目录结构如下图
dwr
--engine.js
--util.js
WEB-INF
---- web.xml
-----AIX.page
---AIX.html
我们要在AIX页面中调用,而JS文件存储在 dwr目录下。
6)在AIX.html页面中触发业务类定义的方法
AIX.remove(id,“回掉函数”);