DWR众多Ajax框架中的一种,那么在众多框架中它的特色是什么呢?通过JavaScript代码调用服务器端的Java方法这也就是DWR的特色所在,今天自学了一下DWR框架现在就来做个简单的学习总结。
首先我们在做开发之前总是要得到所要用到的jar包,当然DWR也不例外了,我们可以在这里获得我们需要的jar包,获得我们的下载包后我们可以得到我们需要的dwr.jar文件,然后把我们开发所需要的jar文件拷贝到WEB-INF/lib目录下(注意:DWR运行的时候需要依赖于commons-logging库的支持,所以我们还需要把相应的jar包复制到WEB-INF/lib目录下)现在我们就在我们的web.xml文件配置将特定请求转发给DWR的核心Servlet
<servlet>
<servlet-name>DwrServlet</servlet-name>
<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
<!--这里的debug在我们开发阶段可以配上但是实际发布的时候记得去掉-->
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>DwrServlet</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
接下来我们需要在web.xml的同一目录下建立dwr.xml文件,它的作用在于定义Java类和JavaScript之间的对应
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN"
"dwr/dwr20.dtd">
<dwr>
<allow>
<create creator="new" javascript="myDwr">
<param name="class" value="java.util.Date" />
</create>
</allow>
</dwr>
这样我们就搭建了一个简单的DWR应用的例子了。
dwr.xml文件到底有什么东东呢?接下来我们就去看看它里面到底都有些什么
<allow>元素:它定义了DWR能够创建和转换的类,是dwr.xml中最重要的元素
<create>元素:创建器,定义如何将一个Java类转换成JavaScript对象,它有几个常用的属性
creator属性:DWR内置多个创建器用于处理多种类型Java类,常用的内置创建器有
new:用new关键字创造对象
none:不创建对象,适用于对象已经存在或者调用的是静态方法
(使用new和none创建器需要指定class参数<param name="class" value="com.***.***">)
javascript属性:在客户端给创建的javascript对象命名
scope属性:作用域,选项可以是application、session、request、page
<param>元素:用来指定创建器的参数
<include>元素:定义允许访问的方法列表,method属性指定暴露给客户端的方法
<exclude>元素:与<include>元素正好相反,定义不允许访问的方法列表,method属性指定不被暴露给客户端的方法
<convert>元素:它用于定义Java类型和JavaScript类型之间的对应关系
支持类型如下:
基本类型,boolean、int、double等
包装类,Boolean、Integer等
java.lang.String
日期类型,java.util.Date、java.sql.Times、java.sql.Timestamp等
数组
集合,List、Set、Map、Iterator等
Bean转换器:<convert converter="bean" match="www.dwrdemo.DwrBean" />
看完了dwr.xml文件现在我们再来看看engine.js和util.js
对DWR来说非常重要,它是DWR客户端的核心,用来把动态生成的javascript对象转换为服务器上的java对象,所以要用到dwr的地方都要用到它了,一般的我们都使用该函数库设置一些DWR的全局属性
设置超时
dwr.engine.setTimeout(time)//注意这里是以毫秒为单位
设置请求的方法
dwr.engine.setHttpMethod(method)//该方法只能设置两个值POST和GET
设置调用顺序
dwr.engine.setOrdered(boolean)//Ajax通常都是异步调用,但服务器响应的顺序与调用顺序往往不同,如果想实现一致把值设置为true即可
util.js文件中包含了一些工具函数,通过这些函数的帮助,可以大大的简化我们的操作,其实util.js文件对DWR来说依赖性并不是很强,可以单独把util.js文件抽出来作为一个工具函数库,那么我们就来看看这个util.js能为我们简化那些操作
$():根据指定ID查找页面中的HTML元素简化了我们在js中写的大量的document.getElementById(ID);
访问元素值
dwr.util.getValue(id):返回HTML元素的值,其中id为HTML元素id属性的值
dwr.util.setValue(id,value[,options]):根据提一个参数中指定的id找到相应元素,并根据第二个参数value改变该元素的值
操作列表
dwr.util.removeAllOption(id):用于删除列表中的所有项
dwr.util.addOptions():用于添加列表项目
操作表格
dwr.util.removeAllRows(id):删除table中所有行,其中id为table元素的id属性值
dwr.util.addRows(id,array,cellFuncs,[options]):向表中添加数据行,其中id为table元素的id属性值