DWR是一个框架,简单的说就是能够在javascript直接调用java方法,而不必去写一大堆的javascript代码。它的实现是基于ajax的,可以实现无刷新效果。
网上有不少DWR的例子,但大都只是某种方法的调用,本文只在使用层面上介绍DWR,并不涉更多的技术与设计,其目的是让初学者能够很快的学会各种java方法在javascript中是如何调用的。
本文以DWR 1.1 为基础,对于DWR 2.0,因为还没有正式发布版,故不做介绍。
1、最小配置
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
2、当我们想看DWR自动生成的测试页(Using debug/test mode)时,可在servlet配置中加上
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
这个参数DWR默认是false。如果选择true,我们可以通过http://localhost:port/app/dwr看到你部署的每个DWR class。并且可以测试java代码的每个方法是否运行正常。为了安全考虑,在正式环境下你一定把这个参数设为false。
3、多个dwr.xml文件的配置
可能有几种情况,我们一一列举。一个servlet,多个dwr.xml配置文件;多个servlet,每个servlet对应一个或多个dwr.xml配置文件。
3.1、一个servlet,多个dwr.xml配置文件
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
<init-param>
<param-name>config-1</param-name>
<param-value>WEB-INF/dwr1.xml</param-value>
</init-param>
<init-param>
<param-name>config-2</param-name>
<param-value>WEB-INF/dwr2.xml</param-value>
</init-param>
</servlet>
在这种配置下,param-name的值必须以config开头。param-name可以有>=0个。如果没有param-name,那么将会读取WEB-INF/dwr.xml。如果有大于零个param-name,那么WEB-INF/dwr.xml文件将不会被读取。
3.2、多个servlet,每个servlet对应一个或多个dwr.xml
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>dwr-invoker1</servlet-name>
<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
<init-param>
<param-name>config-admin</param-name>
<param-value>WEB-INF/dwr1.xml</param-value>
</init-param>
<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>
<servlet-mapping>
<servlet-name>dwr-invoker1</servlet-name>
<url-pattern>/dwr1/*</url-pattern>
</servlet-mapping>
在这种情况下,我们可以根据J2EE security来控制权限,针对不同url,加不同的角色。
二、dwr使用篇
1、调用没有返回值和参数的JAVA方法
1.1、dwr.xml的配置
<dwr>
<allow>
<create creator="new" javascript="testClass" >
<param name="class" value="com.dwr.TestClass" />
<include method="testMethod1"/>
</create>
</allow>
</dwr>
<allow>标签中包括可以暴露给javascript访问的东西。
<create>标签中指定javascript中可以访问的java类,并定义DWR应当如何获得要进行远程的类的实例。creator="new"属性指定java类实例的生成方式,new意味着DWR应当调用类的默认构造函数来获得实例,其他的还有spring方式,通过与IOC容器Spring进行集成来获得实例等等。javascript=" testClass "属性指定javascript代码访问对象时使用的名称。
<param>标签指定要公开给javascript的java类名。
<include>标签指定要公开给javascript的方法。不指定的话就公开所有方法。
<exclude>标签指定要防止被访问的方法。
1.2、javascript中调用
首先,引入javascript脚本
<script src='dwr/interface/ testClass.js'></script>
<script src='dwr/engine.js'></script>
<script src='dwr/util.js'></script>
其中TestClass.js是dwr根据配置文件自动生成的,engine.js和util.js是dwr自带的脚本文件。
其次,编写调用java方法的javascript函数
Function callTestMethod1(){
testClass.testMethod1();
}
2、调用有简单返回值的java方法
2.1、dwr.xml的配置
配置同1.1
<dwr>
<allow>
<create creator="new" javascript="testClass" >
<param name="class" value="com.dwr.TestClass" />
<include method="testMethod2"/>
</create>
</allow>
</dwr>
2.2、javascript中调用
首先,引入javascript脚本
其次,编写调用java方法的javascript函数和接收返回值的回调函数
Function callTestMethod2(){
testClass.testMethod2(callBackFortestMethod2);
}
Function callBackFortestMethod2(data){
//其中date接收方法的返回值
//可以在这里对返回值进行处理和显示等等
alert("the return value is " + data);
}
其中callBackFortestMethod2是接收返回值的回调函数
3、调用有简单参数的java方法
3.1、dwr.xml的配置
配置同1.1
<dwr>
<allow>
<create creator="new" javascript="testClass" >
<param name="class" value="com.dwr.TestClass" />
<include method="testMethod3"/>
</create>
</allow>
</dwr>
3.2、javascript中调用
首先,引入javascript脚本
其次,编写调用java方法的javascript函数
Function callTestMethod3(){
//定义要传到java方法中的参数
var data;
//构造参数
data = “test String”;
testClass.testMethod3(data);
}
4、调用返回JavaBean的java方法
4.1、dwr.xml的配置
<dwr>
<allow>
<create creator="new" javascript="testClass" >
<param name="class" value="com.dwr.TestClass" />
<include method="testMethod4"/>
</create>
<convert converter="bean" match=""com.dwr.TestBean">
<param name="include" value="username,password" />
</convert>
</allow>
</dwr>
<creator>标签负责公开用于Web远程的类和类的方法,<convertor>标签则负责这些方法的参数和返回类型。convert元素的作用是告诉DWR在服务器端Java 对象表示和序列化的JavaScript之间如何转换数据类型。DWR自动地在Java和JavaScript表示之间调整简单数据类型。这些类型包括Java原生类型和它们各自的封装类表示,还有String、Date、数组和集合类型。DWR也能把JavaBean转换成JavaScript 表示,但是出于安全性的原因,要求显式的配置,<convertor>标签就是完成此功能的。converter="bean"属性指定转换的方式采用JavaBean命名规范,match=""com.dwr.TestBean"属性指定要转换的javabean名称,<param>标签指定要转换的JavaBean属性。
4.2、javascript中调用
首先,引入javascript脚本
其次,编写调用java方法的javascript函数和接收返回值的回调函数
Function callTestMethod4(){
testClass.testMethod4(callBackFortestMethod4);
}
Function callBackFortestMethod4(data){
//其中date接收方法的返回值
//对于JavaBean返回值,有两种方式处理
//不知道属性名称时,使用如下方法
for(var property in data){
alert("property:"+property);
alert(property+":"+data[property]);
}
//知道属性名称时,使用如下方法
alert(data.username);
alert(data.password);
}
其中callBackFortestMethod4是接收返回值的回调函数
5、调用有JavaBean参数的java方法
5.1、dwr.xml的配置
配置同4.1
<dwr>
<allow>
<create creator="new" javascript="testClass" >
<param name="class" value="com.dwr.TestClass" />
<include method="testMethod5"/>
</create>
<convert converter="bean" match="com.dwr.TestBean">
<param name="include" value="username,password" />
</convert>
</allow>
</dwr>
5.2、javascript中调用
首先,引入javascript脚本
其次,编写调用java方法的javascript函数
Function callTestMethod5(){
//定义要传到java方法中的参数
var data;
//构造参数,date实际上是一个object
data = { username:"user", password:"password" }
testClass.testMethod5(data);
}
6、调用返回List、Set或者Map的java方法
6.1、dwr.xml的配置
配置同4.1
<dwr>
<allow>
<create creator="new" javascript="testClass" >
<param name="class" value="com.dwr.TestClass" />
<include method="testMethod6"/>
</create>
<convert converter="bean" match="com.dwr.TestBean">
<param name="include" value="username,password" />
</convert>
</allow>
</dwr>
注意:如果List、Set或者Map中的元素均为简单类型(包括其封装类)或String、Date、数组和集合类型,则不需要<convert>标签。
6.2、javascript中调用(以返回List为例,List的元素为TestBean)
首先,引入javascript脚本
其次,编写调用java方法的javascript函数和接收返回值的回调函数
Function callTestMethod6(){
testClass.testMethod6(callBackFortestMethod6);
}
Function callBackFortestMethod6(data){
//其中date接收方法的返回值
//对于JavaBean返回值,有两种方式处理
//不知道属性名称时,使用如下方法
for(var i=0;i<data.length;i++){
for(var property in data){
alert("property:"+property);
alert(property+":"+data[property]);
}
}
//知道属性名称时,使用如下方法
for(var i=0;i<data.length;i++){
alert(data.username);
alert(data.password);
}
}
相关推荐
### DWR介绍 #### 一、DWR概述 DWR(Direct Web Remoting)是一种用于简化客户端JavaScript调用服务器端Java方法的技术。它通过Ajax技术实现了网页上的JavaScript直接调用服务器端的Java对象,极大地提高了Web应用...
本篇文章将从安装DWR、配置相关文件到创建配置文件等方面,详细介绍如何使用DWR进行Ajax开发。 #### 二、安装DWR JAR文件 首先,你需要下载DWR的`dwr.jar`文件,并将其放置于web应用的`WEB-INF/lib`目录下。通常,...
- **jstl讲义.ppt**:可能是关于JSTL的教程材料,帮助理解JSTL的使用和功能。 - **dwr使用步骤.txt**:可能包含了DWR的配置和使用步骤,对于初学者非常有帮助。 - **JSTL1.txt**、**jstl.txt**:可能为JSTL的更多...
**Ajax 技术详解** Ajax(Asynchronous JavaScript and XML...而DWR框架则进一步简化了Ajax应用的开发,提供了更便捷的Java和JavaScript交互方式。理解并掌握这些技术,对于提升Java应用的交互性和响应速度至关重要。
资源名称:适合初学者的DWR基本使用视频教程资源目录:【】dwr01_dwr的安装【】dwr02_dwr的转换器和异常处理【】dwr03_dwr的util的介绍【】dwr04_文件上传和与spring进行整合【】dwr05_dwr的debug和获取ServletAPI...
#### 三、DWR框架介绍 DWR框架是一种轻量级的开源框架,它能够将服务器端的Java方法暴露给客户端JavaScript,从而实现远程调用。这意味着开发者可以直接在JavaScript中调用服务器端的方法,就像调用本地函数一样...
下面将详细介绍Dwr的使用步骤: 1. **导入DWR库**: 在项目中引入DWR的核心库dwr.jar。这通常通过Maven或Gradle等构建工具完成,或者手动将JAR文件添加到项目的类路径中。 2. **配置DWR**: 在`web.xml`文件中...
- **安装与配置**:介绍如何将DWR添加到现有项目中,包括引入jar文件、配置web.xml和dwr.xml文件。 - **基本使用**:讲解如何创建可从JavaScript调用的Java方法,以及如何在客户端使用DWR API进行调用。 - **安全...
- 该中文文档将详细介绍DWR的安装、配置、使用方法以及常见问题的解决,是学习DWR的重要参考资料。 通过深入学习这份DWR中文文档,开发者不仅可以掌握DWR的基本用法,还能了解到如何在实际项目中有效利用DWR提升...
在这个压缩包中,"DWR开发培训.ppt"可能是一个演示文稿,用于教学或研讨会,其中可能包含PPT幻灯片,系统地介绍了DWR的各个方面,可能包括实例演示、最佳实践和常见问题解答。 总的来说,这个DWR教程包提供了一套...
4. **没有cookies的情况下使用DWR**:提供替代方案,比如使用URL重写来绕过对cookies的依赖。 **10.2 JavaScript高级应用**:深入探讨JavaScript语言的一些高级特性,帮助开发者更好地利用DWR。 1. **用变量操纵...
由于Java是同步的,而AJAX是异步的,因此在使用DWR时,你需要提供回调函数来处理网络返回的数据。DWR还提供了一种称为“反转的AJAX”技术,进一步简化了客户端与服务器端的通信。 以下是一个简单的DWR应用示例: 1...
文档会介绍如何使用这些接口,以及如何定义和调用远程Java类和方法。 4. **安全与权限控制**:DWR提供了安全机制,如白名单、IP限制和安全配置,以防止未授权的远程方法调用。 5. **类型转换**:DWR自动处理Java...
本篇将详细介绍如何使用Spring框架的注解特性来整合DWR。 #### 二、整合步骤详解 ##### 1. 配置Web.xml 在`web.xml`文件中,需要完成以下四个主要配置: - **配置DWR Servlet**:通过`<servlet>`元素指定DWR的...
为了更好地理解DWR的工作原理及其配置方式,我们将通过一个简单的例子来详细介绍DWR的基本配置和使用流程。 ##### 1. 配置dwr.xml ```xml <dwr> <param name="class" value="com.dwr.TestClass"/> </...
### DWR配置与使用详解 #### 一、DWR简介 DWR,全称为Direct Web Remoting,是一种专为Java开发者设计的AJAX框架。它通过简化JavaScript与Java后端服务之间的交互,使得前端开发人员能够如同调用本地JavaScript...
下面将详细介绍如何通过注解实现DWR和Spring的集成以及相关知识点: 1. **Spring注解配置**: - `@Configuration`:标记一个类为Spring配置类,可替代传统的XML配置。 - `@ComponentScan`:用于扫描指定包下的...
7. **文档更新**:与DTD文件一起提供的可能还有详细的官方文档,这些文档通常会介绍如何配置和使用DWR 2.0,以及如何解决常见问题。 在压缩包中的“开始dwr”文件可能是一个引导性的文档或教程,帮助开发者快速上手...
- 介绍如何使用**DWR**提供的元数据对象来获取服务方法的信息。 - 可以用来动态生成客户端代码。 通过以上介绍可以看出,**DWR**不仅可以简化前端与后端之间的通信,还可以与其他流行框架(如**Spring**、**...