DWR(Direct Web Remoting)是一个WEB远程调用框架.利用这个框架可以让AJAX开发变得很简单.利用DWR可以在客户端利用JavaScript直接调用服务端的Java方法并返回值给JavaScript就好像直接本地客户端调用一样(DWR根据Java类来动态生成JavaScrip代码).
按照Getahead官方网站上的步骤,可以按照如下的步骤来尝试第一个DWR应用:
1. 我首先创建了一个简单的Tomcat项目dwrstudy,IDE是Eclipse;
2. 将已经下载的dwr.jar文件放入WEB-INF/lib目录下;
3. 在部署描述符文件(web.xml)中注册如下一个servlet
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<display-name>DWR Servlet</display-name>
<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
4. 创建一个dwr.xml放在WEB-INF目录下面,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC
"-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN"
"http://getahead.org/dwr/dwr20.dtd">
<dwr>
<allow>
<create creator="new" javascript="JDate">
<param name="class" value="java.util.Date"/>
</create>
</allow>
</dwr>
上面的文件表明将会根据java.util.Date类创建一个JDate.js文件,
5. 在浏览器中输入http://localhost:8888/dwrstudy/dwr/index.html,此时将会列出所有的JS文件名以及它所对应的Java类,例如本例中将显示如下列表:JDate (java.util.Date),点开链接会看到关于这个类的详细说明。
6. 如何使用dwr呢?按照说明,我新建了一个index.html文件,内容如下:
<!DOCTYPE html PUBLIC "-//W 3C //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>
<script src='/dwrstudy/dwr/interface/JDate.js'></script>
<script src='/dwrstudy/dwr/engine.js'></script>
<script type='text/javascript'
src='/dwrstudy/dwr/util.js'></script>
<body>
<input class='ibutton' type='button' onclick='JDate.toString(reply5);'
value='Execute'
title='Calls JDate.toString(). View source for details.' />
<script type='text/javascript'>
var reply5 = function(test){
if (test != null && typeof test == 'object')
alert(dwr.util.toDescriptiveString(test, 2));
else
dwr.util.setValue('d5', dwr.util.toDescriptiveString(test, 1));
}
</script>
<span id='d5' class='reply'></span>
</body>
</html>
红色背景的代码是我们必须要引入的js,这些js应该是由DWR自动给我们生成的。细细看了一下,隐藏了AJAX的原理。首先,onclick事件触发的函数是JDate.toString,这个函数是dwr自动给我们生成的,它会相应调用java.util.Date类的toString方法,它的参数只有一个reply5,这是一个函数的指针,它是一个回调函数,当java.util.Date类的toString方法执行完毕之后会调用reply5所指向的函数。这个回调函数,有一个参数,它所接收的值就是java.util.Date类的toString方法的返回值。整个流程就和传统的ajax很类似了,通常我们是通过xmlHttpRequest请求服务器端的某个方法,执行完毕后通过onreadystatechange事件来调用回调函数,服务端的执行结果可以写在response中通过xmlHttpRequest的responseXml来获得并进行相应的处理。有点类似于DWR帮我们把这些过程都包装起来了,DWR的理念也就是Easy AJAX For JAVA。DWR is a Java open source library which allows you to write Ajax web sites.