`

dwr的介绍和使用

阅读更多

DWR是一个框架,简单的说就是能够在javascript直接调用java方法,而不必去写一大堆的javascript代码。它的实现是基于ajax的,可以实现无刷新效果。

 

    网上有不少DWR的例子,但大都只是某种方法的调用,本文只在使用层面上介绍DWR,并不涉更多的技术与设计,其目的是让初学者能够很快的学会各种java方法在javascript中是如何调用的。

 

    本文以DWR 1.1 为基础,对于DWR 2.0,因为还没有正式发布版,故不做介绍。

 

一、dwr配置篇之web.xml

 

   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.1dwr.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>标签指定要公开给javascriptjava类名。

 

<include>标签指定要公开给javascript的方法。不指定的话就公开所有方法。

 

<exclude>标签指定要防止被访问的方法。

 

1.2javascript中调用

 

首先,引入javascript脚本

 

<script src='dwr/interface/ testClass.js'></script>

 

<script src='dwr/engine.js'></script>

 

<script src='dwr/util.js'></script>

 

其中TestClass.jsdwr根据配置文件自动生成的,engine.jsutil.jsdwr自带的脚本文件。

 

其次,编写调用java方法的javascript函数

 

Function callTestMethod1(){

 

      testClass.testMethod1();

 

}

 

 

 

 

 

 

 

2、调用有简单返回值的java方法

 

2.1dwr.xml的配置

 

配置同1.1

 

<dwr>

 

<allow>

 

<create creator="new" javascript="testClass" >

 

<param name="class" value="com.dwr.TestClass" />

 

<include method="testMethod2"/>

 

</create>

 

</allow>

 

</dwr>

 

2.2javascript中调用

 

首先,引入javascript脚本

 

其次,编写调用java方法的javascript函数和接收返回值的回调函数

 

Function callTestMethod2(){

 

      testClass.testMethod2(callBackFortestMethod2);

 

}

 

Function callBackFortestMethod2(data){

 

     //其中date接收方法的返回值

 

     //可以在这里对返回值进行处理和显示等等

 

alert("the return value is " + data);

 

}

 

其中callBackFortestMethod2是接收返回值的回调函数

 

 

 

3、调用有简单参数的java方法

 

3.1dwr.xml的配置

 

配置同1.1

 

<dwr>

 

<allow>

 

<create creator="new" javascript="testClass" >

 

<param name="class" value="com.dwr.TestClass" />

 

<include method="testMethod3"/>

 

</create>

 

</allow>

 

</dwr>

 

3.2javascript中调用

 

首先,引入javascript脚本

 

其次,编写调用java方法的javascript函数

 

Function callTestMethod3(){

 

                 //定义要传到java方法中的参数

 

      var data;

 

      //构造参数

 

      data = test String;

 

      testClass.testMethod3(data);

 

}

 

 

 

4、调用返回JavaBeanjava方法

 

4.1dwr.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自动地在JavaJavaScript表示之间调整简单数据类型。这些类型包括Java原生类型和它们各自的封装类表示,还有StringDate、数组和集合类型。DWR也能把JavaBean转换成JavaScript 表示,但是出于安全性的原因,要求显式的配置,<convertor>标签就是完成此功能的。converter="bean"属性指定转换的方式采用JavaBean命名规范,match=""com.dwr.TestBean"属性指定要转换的javabean名称,<param>标签指定要转换的JavaBean属性。

 

4.2javascript中调用

 

首先,引入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.1dwr.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.2javascript中调用

 

首先,引入javascript脚本

 

其次,编写调用java方法的javascript函数

 

Function callTestMethod5(){

 

                 //定义要传到java方法中的参数

 

      var data;

 

      //构造参数,date实际上是一个object

 

      data = { username:"user", password:"password" }

 

      testClass.testMethod5(data);

 

}

 

6、调用返回ListSet或者Mapjava方法

 

6.1dwr.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>

 

注意:如果ListSet或者Map中的元素均为简单类型(包括其封装类)或StringDate、数组和集合类型,则不需要<convert>标签。

 

6.2javascript中调用(以返回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概述 DWR(Direct Web Remoting)是一种用于简化客户端JavaScript调用服务器端Java方法的技术。它通过Ajax技术实现了网页上的JavaScript直接调用服务器端的Java对象,极大地提高了Web应用...

    DWR使用方法-step by step

    本篇文章将从安装DWR、配置相关文件到创建配置文件等方面,详细介绍如何使用DWR进行Ajax开发。 #### 二、安装DWR JAR文件 首先,你需要下载DWR的`dwr.jar`文件,并将其放置于web应用的`WEB-INF/lib`目录下。通常,...

    dwr和ajax技术

    - **jstl讲义.ppt**:可能是关于JSTL的教程材料,帮助理解JSTL的使用和功能。 - **dwr使用步骤.txt**:可能包含了DWR的配置和使用步骤,对于初学者非常有帮助。 - **JSTL1.txt**、**jstl.txt**:可能为JSTL的更多...

    ajax技术和dwr介绍

    **Ajax 技术详解** Ajax(Asynchronous JavaScript and XML...而DWR框架则进一步简化了Ajax应用的开发,提供了更便捷的Java和JavaScript交互方式。理解并掌握这些技术,对于提升Java应用的交互性和响应速度至关重要。

    适合初学者的DWR基本使用视频教程

    资源名称:适合初学者的DWR基本使用视频教程资源目录:【】dwr01_dwr的安装【】dwr02_dwr的转换器和异常处理【】dwr03_dwr的util的介绍【】dwr04_文件上传和与spring进行整合【】dwr05_dwr的debug和获取ServletAPI...

    dwr框架的使用简介

    #### 三、DWR框架介绍 DWR框架是一种轻量级的开源框架,它能够将服务器端的Java方法暴露给客户端JavaScript,从而实现远程调用。这意味着开发者可以直接在JavaScript中调用服务器端的方法,就像调用本地函数一样...

    ajax框架Dwr的具体使用步骤

    下面将详细介绍Dwr的使用步骤: 1. **导入DWR库**: 在项目中引入DWR的核心库dwr.jar。这通常通过Maven或Gradle等构建工具完成,或者手动将JAR文件添加到项目的类路径中。 2. **配置DWR**: 在`web.xml`文件中...

    DWR3.0.jar、DWR.war和DWR2.0中文说明文档

    - **安装与配置**:介绍如何将DWR添加到现有项目中,包括引入jar文件、配置web.xml和dwr.xml文件。 - **基本使用**:讲解如何创建可从JavaScript调用的Java方法,以及如何在客户端使用DWR API进行调用。 - **安全...

    DWR中文文档DWR

    - 该中文文档将详细介绍DWR的安装、配置、使用方法以及常见问题的解决,是学习DWR的重要参考资料。 通过深入学习这份DWR中文文档,开发者不仅可以掌握DWR的基本用法,还能了解到如何在实际项目中有效利用DWR提升...

    DWR 教程 中文API DWR.xml配置文件说明 DWR学习笔记

    在这个压缩包中,"DWR开发培训.ppt"可能是一个演示文稿,用于教学或研讨会,其中可能包含PPT幻灯片,系统地介绍了DWR的各个方面,可能包括实例演示、最佳实践和常见问题解答。 总的来说,这个DWR教程包提供了一套...

    DWR中文文档 (DWR 2.0)

    4. **没有cookies的情况下使用DWR**:提供替代方案,比如使用URL重写来绕过对cookies的依赖。 **10.2 JavaScript高级应用**:深入探讨JavaScript语言的一些高级特性,帮助开发者更好地利用DWR。 1. **用变量操纵...

    DWR的介绍以及使用范例.还有使用DWR的相关配置

    由于Java是同步的,而AJAX是异步的,因此在使用DWR时,你需要提供回调函数来处理网络返回的数据。DWR还提供了一种称为“反转的AJAX”技术,进一步简化了客户端与服务器端的通信。 以下是一个简单的DWR应用示例: 1...

    dwr3api+DWR文档.pdf

    文档会介绍如何使用这些接口,以及如何定义和调用远程Java类和方法。 4. **安全与权限控制**:DWR提供了安全机制,如白名单、IP限制和安全配置,以防止未授权的远程方法调用。 5. **类型转换**:DWR自动处理Java...

    spring使用annotation整合dwr笔记

    本篇将详细介绍如何使用Spring框架的注解特性来整合DWR。 #### 二、整合步骤详解 ##### 1. 配置Web.xml 在`web.xml`文件中,需要完成以下四个主要配置: - **配置DWR Servlet**:通过`&lt;servlet&gt;`元素指定DWR的...

    DWR(Direct Web Remoting)介绍

    为了更好地理解DWR的工作原理及其配置方式,我们将通过一个简单的例子来详细介绍DWR的基本配置和使用流程。 ##### 1. 配置dwr.xml ```xml &lt;dwr&gt; &lt;param name="class" value="com.dwr.TestClass"/&gt; &lt;/...

    DWR配置介绍

    ### DWR配置与使用详解 #### 一、DWR简介 DWR,全称为Direct Web Remoting,是一种专为Java开发者设计的AJAX框架。它通过简化JavaScript与Java后端服务之间的交互,使得前端开发人员能够如同调用本地JavaScript...

    dwr+spring 注解方式

    下面将详细介绍如何通过注解实现DWR和Spring的集成以及相关知识点: 1. **Spring注解配置**: - `@Configuration`:标记一个类为Spring配置类,可替代传统的XML配置。 - `@ComponentScan`:用于扫描指定包下的...

    dwr 2.0 的 dtd 和官方网站首页

    7. **文档更新**:与DTD文件一起提供的可能还有详细的官方文档,这些文档通常会介绍如何配置和使用DWR 2.0,以及如何解决常见问题。 在压缩包中的“开始dwr”文件可能是一个引导性的文档或教程,帮助开发者快速上手...

    DWR中文版教程

    - 介绍如何使用**DWR**提供的元数据对象来获取服务方法的信息。 - 可以用来动态生成客户端代码。 通过以上介绍可以看出,**DWR**不仅可以简化前端与后端之间的通信,还可以与其他流行框架(如**Spring**、**...

Global site tag (gtag.js) - Google Analytics