《dwr学习手册》由会员分享,可在线阅读,更多相关《dwr学习手册(8页珍藏版)》请在金锄头文库上搜索。
1、DWR 是一个框架,简单的说就是能够在 javascript 直接调用 java 方法,而不必去写一大堆的 javascript 代码。它的实现是基于 ajax 的,可以实现无刷新效果。 网上有不少 DWR 的例子,但大都只是某种方法的调用,本文只在使用层面上介绍DWR,并不涉更多的技术与设计,其目的是让初学者能够很快的学会各种 java 方法在javascript 中是如何调用的。本文以 DWR 1.1 为基础,对于 DWR 2.0,因为还没有正式发布版,故不做介绍。一、 dwr 配置篇之 web.xml1 、最小配置dwr-invokeruk.ltd.getahead.dwr.DWRSer
2、vletdwr-invoker/dwr/*2、当我们想看 DWR 自动生成的测试页( Using debug/test mode)时,可在 servlet 配置中加上debugtrue这个参数 DWR 默认是 false。如果选择 true,我们可以通过 http:/localhost:port/app/dwr 看到你部署的每个 DWR class。并且可以测试 java 代码的每个方法是否运行正常。为了安全考虑,在正式环境下你一定把这个参数设为 false。3、多个 dwr.xml 文件的配置可能有几种情况,我们一一列举。一个 servlet,多个 dwr.xml 配置文件;多个 servl
3、et,每个 servlet 对应一个或多个 dwr.xml 配置文件。3.1、一个 servlet,多个 dwr.xml 配置文件dwr-invokeruk.ltd.getahead.dwr.DWRServletconfig-1WEB-INF/dwr1.xmlconfig-2WEB-INF/dwr2.xml在这种配置下,param-name 的值必须以 config 开头。param-name 可以有=0 个。如果没有param-name,那么将会读取 WEB-INF/dwr.xml。如果有大于零个 param-name,那么 WEB-INF/dwr.xml 文件将不会被读取。3.2 、多个
4、servlet ,每个 servlet 对应一个或多个 dwr.xmldwr-invokeruk.ltd.getahead.dwr.DWRServletdwr-invoker1uk.ltd.getahead.dwr.DWRServletconfig-adminWEB-INF/dwr1.xmldebugtruedwr-invoker/dwr/*dwr-invoker1/dwr1/*在这种情况下,我们可以根据 J2EE security 来控制权限,针对不同 url, 加不同的角色。二、 dwr 使用篇1、调用没有返回值和参数的 JAVA 方法1.1、dwr.xml 的配置标签中包括可以暴露给 j
5、avascript 访问的东西。标签中指定 javascript 中可以访问的 java 类,并定义 DWR 应当如何获得要进行远程的类的实例。 creator=new 属性指定 java 类实例的生成方式, new 意味着 DWR 应当调用类的默认构造函数来获得实例,其他的还有 spring 方式,通过与 IOC 容器 Spring 进行集成来获得实例等等。 javascript= testClass 属性指定 javascript 代码访问对象时使用的名称。标签指定要公开给 javascript 的 java 类名。标签指定要公开给 javascript 的方法。不指定的话就公开所有方法。
6、标签指定要防止被访问的方法。1.2、javascript 中调用首先,引入 javascript 脚本其中 TestClass.js 是 dwr 根据配置文件自动生成的, engine.js 和 util.js 是 dwr 自带的脚本文件。其次,编写调用 java 方法的 javascript 函数Function callTestMethod1()testClass.testMethod1();2、调用有简单返回值的 java 方法2.1、dwr.xml 的配置配置同 1.12.2、javascript 中调用首先,引入 javascript 脚本其次,编写调用 java 方法的 javas
7、cript 函数和接收返回值的回调函数Function callTestMethod2()testClass.testMethod2(callBackFortestMethod2);Function callBackFortestMethod2(data)/ 其中 date 接收方法的返回值/ 可以在这里对返回值进行处理和显示等等alert(the return value is + data);其中 callBackFortestMethod2 是接收返回值的回调函数3、调用有简单参数的 java 方法3.1、dwr.xml 的配置配置同 1.13.2、javascript 中调用首先,引入
8、 javascript 脚本其次,编写调用 java 方法的 javascript 函数Function callTestMethod3()/ 定义要传到 java 方法中的参数var data;/ 构造参数data = “test String”;testClass.testMethod3(data);4、调用返回 JavaBean 的 java 方法4.1、dwr.xml 的配置标签负责公开用于 Web 远程的类和类的方法, 标签则负责这些方法的参数和返回类型。 convert 元素的作用是告诉 DWR 在服务器端 Java 对象表示和序列化的 JavaScript 之间如何转换数据类型。
9、 DWR 自动地在 Java 和 JavaScript 表示之间调整简单数据类型。这些类型包括 Java 原生类型和它们各自的封装类表示,还有 String 、 Date 、数组和集合类型。 DWR 也能把 JavaBean 转换成 JavaScript 表示,但是出于安全性的原因,要求显式的配置, 标签就是完成此功能的。 converter=bean 属性指定转换的方式采用 JavaBean 命名规范, match=com.dwr.TestBean 属性指定要转换的 javabean 名称, 标签指定要转换的 JavaBean 属性。4.2 、javascript 中调用首先,引入 java
10、script 脚本其次,编写调用 java 方法的 javascript 函数和接收返回值的回调函数Function callTestMethod4()testClass.testMethod4(callBackFortestMethod4);Function callBackFortestMethod4(data)/ 其中 date 接收方法的返回值/ 对于 JavaBean 返回值,有两种方式处理/ 不知道属性名称时,使用如下方法for(var property in data)alert(property:+property);alert(property+:+dataproperty)
11、;/ 知道属性名称时,使用如下方法alert(data.username);alert(data.password);其中 callBackFortestMethod4 是接收返回值的回调函数5、调用有 JavaBean 参数的 java 方法5.1、dwr.xml 的配置配置同 4.15.2 、javascript 中调用首先,引入 javascript 脚本其次,编写调用 java 方法的 javascript 函数Function callTestMethod5()/ 定义要传到 java 方法中的参数var data;/ 构造参数, date 实际上是一个 objectdata = u
12、sername:user, password:password testClass.testMethod5(data);6、调用返回 List、Set 或者 Map 的 java 方法6.1、dwr.xml 的配置配置同 4.1注意:如果 List 、 Set 或者 Map 中的元素均为简单类型(包括其封装类)或 String 、 Date 、数组和集合类型,则不需要标签。6.2 、javascript 中调用(以返回 List 为例,List 的元素为 TestBean)首先,引入 javascript 脚本其次,编写调用 java 方法的 javascript 函数和接收返回值的回调函数F
13、unction callTestMethod6()testClass.testMethod6(callBackFortestMethod6);Function callBackFortestMethod6(data)/ 其中 date 接收方法的返回值/ 对于 JavaBean 返回值,有两种方式处理/ 不知道属性名称时,使用如下方法for(var i=0;i);标签是用来声明 java 方法中 List 、 Set 或者 Map 参数所包含的确切类,以便 java 代码作出判断。7.2 、javascript 中调用(以返回 List 为例,List 的元素为 TestBean)首先,引入
14、javascript 脚本其次,编写调用 java 方法的 javascript 函数Function callTestMethod7()/ 定义要传到 java 方法中的参数var data;/ 构造参数, date 实际上是一个 object 数组,即数组的每个元素均为 objectdata = username:user1,password:password2,username:user2,password: password2;testClass.testMethod7(data);注意:1、 对于第 6 种情况,如果 java 方法的返回值为 Map ,则在接收该返回值的 javas
15、cript 回调函数中如下处理:function callBackFortestMethod(data)/ 其中 date 接收方法的返回值for(var property in data)var bean = dataproperty;alert(bean.username);alert(bean.password);2、 对于第 7 种情况,如果 java 的方法的参数为 Map (假设其 key 为 String , value 为 TestBean ) ,则在调用该方法的 javascript 函数中用如下方法构造要传递的参数:function callTestMethod ()/ 定
16、义要传到 java 方法中的参数var data; / 构造参数, date 实际上是一个 object ,其属性名为 Map 的 key ,属性值为 Map 的 valuedata = key1:username:user1,password:password2,key2:username:user2,password: password2;testClass.testMethod(data);并且在 dwr.xml 中增加如下的配置段);3、 由以上可以发现,对于 java 方法的返回值为 List(Set) 的情况, DWR 将其转化为 Object 数组,传递个 javascript ;对于 java 方法的返回值为 Map 的情况, DWR