`
wtnhwbb
  • 浏览: 165832 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多

概述 

以前在公司用Confluence记录一些整理的文档,现在移交到JAVA EYE,下面的文档还是基于DWR1.0版本的。

DWR是一个AJAX开源库,允许浏览器端调用服务器端的JAVA函数,就好像这些函数是在浏览器端。DWR包含两个主要的部分:

  • 一个JAVA SERVLET运行在服务器端,处理请求并发送响应给客户。
  • JavaScript运行在浏览器端,发送请求并动态更新网页。

DWR通过基于JAVA类动态的生成javascript脚本来实现,这些代码在后台做一些AJAX操作,实际上是服务器在执行代码,DWR来回执 行数据序列化和反序列化。调用的是javascript代码,而实际上执行的是Java代码,使用户感觉好像是使用传统的RPC机制,如RMI或者 SOAP,而其优点是不需要在浏览器端安装插件。

Java基本上是同步的,而Ajax是异步的。因此当你调用远程方法时,你需要提供DWR一个回调函数,这样当数据从服务器端返回时,DWR会调用这个回调函数更新页面或做一些其他的操作

DWR可以动态的生成一个Javascript的AjaxService类对应服务器端的AjaxService类。这个方法被eventHandler调用,DWR负责处理所有的远程交互细节,包括在JAVA和Javascript之间转换所有的参数和返回值。然后执行提供的回调函数(这里是populateList(data))。

 

快速上手

添加库文件

http://getahead.ltd.uk/dwr/download下载dwr.jar,拷贝到你的WEB应用程序的 WEB-INF/lib目录下

更改配置

需要更改WEB.XML文件的配置,添加对DWR SERVLET的配置,类似如下:

xml 代码
  1. <servlet>  
  2.   <servlet-name>dwr-invokerservlet-name>  
  3.   <display-name>DWR Servletdisplay-name>  
  4.   <servlet-class>uk.ltd.getahead.dwr.DWRServletservlet-class>  
  5.   <init-param>  
  6.      <param-name>debugparam-name>  
  7.      <param-value>trueparam-value>  
  8.   init-param>  
  9. servlet>  
  10.   
  11. <servlet-mapping>  
  12.   <servlet-name>dwr-invokerservlet-name>  
  13.   <url-pattern>/dwr/*url-pattern>  
  14. servlet-mapping>  

然后需要WEB-INF目录下创建dwr.xml文件,一个最简单的示例文件如下:

xml 代码
  1. <dwr>    
  2.    <allow>       
  3.         <create creator="new" javascript="JDate">         
  4.                 <param name="class" value="java.util.Date"/>       
  5.         create>       
  6.         <create creator="new" javascript="Demo">  
  7.                 <param name="class" value="your.java.Bean"/>       
  8.         create>     
  9.     allow>  
  10. dwr>  

DWR配置文件定义DWR能将哪些JAVA类转换成JAVASCRIPT类,上述例子中DWR可以创建两个类,create元素的javascript属性用来定义相应的JAVA类在javascript中的名称。

new creator要求所有的javabean类必须有一个无参数的构造函数,另外DWR还有一些限制如下:

  • 避免使用Javascript预留关键字,使用保留关键字的方法都会被自动排除,大部分javascript保留关键字也是java保留关键字,因此不可以有一个方法命名为try。
  • 另外要避免使用重载方法。

测试配置

发布WEB应用程序,然后在浏览器输入如地址http://localhost:8080/YOUR-WEBAPP/dwr/,这里的YOUR-WEBAPP是指应用程序的名字。这时候你应该可以看到你上一步发布的两个类的链接,进一步可以看到所有暴露的方法索引。

客户端调用

客户端页面中需要添加对相应脚本的引用,类似如下:

xml 代码
  1. <script src='/YOUR-WEBAPP/dwr/interface/[TEC:YOUR-SCRIPT].js'>script>  
  2. <script src='/YOUR-WEBAPP/dwr/engine.js'>script>  

也可以忽略[YOUR-WEBAPP使用相对路径。

配置dwr.xml文件

dwr.xml 是DWR必须的配置文件,缺省需要放置在WEB-INF目录下。如下是一个dwr.xml文件结构示例:

xml 代码
  1. <!---->
  2.     "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"   
  3.     "http://www.getahead.ltd.uk/dwr/dwr10.dtd">  
  4.   
  5. <dwr>  
  6.   
  7.   <!---->  
  8.   <init>  
  9.     <creator id="..." class="..."/>  
  10.     <converter id="..." class="..."/>  
  11.   init>  
  12.   
  13.   <!---->  
  14.   <allow>  
  15.     <create creator="..." javascript="..."/>  
  16.     <convert converter="..." match="..."/>  
  17.   allow>  
  18.   
  19.   <!---->  
  20.   <signatures>  
  21.     ...   
  22.   signatures>  
  23.   
  24. dwr>  

术语

有一些术语需要了解,参数被converted,但是远程bean实例被created。因此如果你有一个类A,有一个方法A.blah(B),那么你需要一个类A的creator和一个B的转换器。

<allow></allow>

allow元素用来定义DWR可以创建和转换哪些类型。

Creators

每个我们需要调用其方法的类,必须有一个<create></create>入口。有几种类型的creator,最常用的是使用new关键字定义的creator或者使用spring框架提供的creator。详情请参见http://getahead.ltd.uk/dwr/server/dwrxml/creators

Converters

必须保证所有的参数都可以转换。DWR支持许多JDK缺省提供的类型,但是如果是自定义的类型,通常需要在配置文件中添加一个<converter></converter>入口。

缺省情况下,下列类型转换不需要额外的声明:

如何定义自定义的转换器来转换自己BEAN,请参见相关文档http://getahead.ltd.uk/dwr/server/dwrxml/converters

<init></init>

这个区域用来定义那些Creator和Convertor实例。大部分情况下你不需要使用这个元素。如果你需要定义一个新的Creator或者Convertor类型时,才需要在这里添加声明。

这个区域有一个入口仅仅告诉DWR这些类的存在,以及提供使这些类工作的详细信息,这有点类似于JAVA的import语句,大多数类在使用前必须导入,但是导入了不表示这些类就会被用到。每个Creator和Convertor都有一个ID属性,允许随后被引用。

<signatures></signatures>

待补充!!!

多个dwr.xml文件

待补充!!!

工具方法

util.js包含许多工具方法,你可以独立于DWR使用这些函数。

创建列表

DWR通常需要填充一个列表框,主要是addOptions和removeAllOptions方法。如果当你更新时需要维护列表,通常需要如下代码:

var sel = DWRUtil.getValue(id);
DWRUtil.removeAllOptions(id);
DWRUtil.addOptions(id, ...);
DWRUtil.setValue(id, sel);
DWRUtil.addOptions(selectid,array)

数组的每一个元素的字符串表示值和文本,值和文本属性是一样的。

DWRUtil.addOptions( "demo1", ['Africa', 'America', 'Asia', 'Australasia', 'Europe' ])
DWRUtil.addOptions(selectid, data, prop)

数组的每一个元素是一个对象,prop表示值和文本对应的属性名称,这里值和文本属性是一样的。

DWRUtil.addOptions( "demo1",[
{ name:'Africa', population:'800m' },
  { name:'America', population:'900m' },
  { name:'Asia', population:'3000m' },
  { name:'Australasia', population:'31m' },
  { name:'Europe', population:'700m' }
],"name")
DWRUtil.addOptions(selectid, array, valueprop, textprop)

数组的每一个元素是一个对象,其valueprop和textprop属性表示值和文本对应的属性名称。

DWRUtil.addOptions( "demo1",[
{ name:'Africa', id:'AF' },
  { name:'America', id:'AM' },
  { name:'Asia', id:'AS' },
  { name:'Australasia', id:'AU' },
  { name:'Europe', id:'EU' }
],"id","name")
DWRUtil.addOptions(selectid, map, reverse)

MAP的每一个属性键表示属性值,属性值表示文本,如果reverse属性为true,那么属性键表示文本,属性值表示值。

DWRUtil.addOptions( "demo1",{
  AF:'Africa',
  AM:'America',
  AS:'Asia',
  AU:'Australasia',
  EU:'Europe'
})
DWRUtil.addOptions(selectid, map, valueprop, textprop)

Map中的一个对象表示一个入口,其valueprop和textprop属性表示值和文本对应的属性名称。

DWRUtil.addOptions(ulid, array)

第一个参数表示一个ul或者ol元素的ID,每一个数组元素表示一个选项,其字符串表示会作为一个li元素的值。

创建表格

DWRUtil.removeAllRows()

接受一个ID参数,用来唯一标识需要删除的表格元素。

DWRUtil.addRows()
语法

DWRUtil.addRows(id, array, cellfuncs,options);

描述

添加数据到指定的表格元素。从一个数组中接受数据,数组的每一个元素表示表格中的一行,cellfuncs数组中的一个元素表示一列。单元格通过针对每一个数据数组循环调用cellfuncs的函数生成。

处理伪代码类似如下:

for each member in array
  for each function in cellfuncs
  create cell from cellfunc(array[i])
参数
  • id: 表格元素ID值
  • array: 数组或者是对象,一个元素表示表格中的一行。
  • cellfuncs: 表示函数的数组,每一个元素表示一个函数,用来从提供的行数组中解析数据。
  • options: 一个包含不同选项的对象。

目前可用的选项是:

  • rowCreator: 用来创建一行的函数(比如你想给TR标记添加CSS)。缺省返回document.createElement("tr") 。
  • cellCreator: 用来创建一个单元格的函数(比如用一个TH代替TD)。缺省返回document.createElement("td") 。

获值/设置方法

DWRUtil.getValue(id)是setValue()对应的获值方法。用来获取指定元素的值,而不必关心给定元素是一个DIV还是一个下拉列表。
getValues()类似于getValue()方法,区别是其参数是一个包含键值对的javascript对象。名字是需要从中获取值的元素的ID, 值将被改变用来反应相应元素的值。这个方法不返回值,而是改变传递进去的对象的值,这个方法用来一次获取多个元素的值,示例代码如下:

DWRUtil.getValues({ div:null, textarea:null, select:null, text:null, password:null, formbutton:null, button:null })

getText(id)类似于getValue,区别是它主要是针对select元素用来获取显示的文本而不是当前显示的值。

$()

这个函数来源于Protoype库,简单地讲$ = document.getElementById,因为在AJAX中后者经常被使用。

这个函数用来从当前Document中获取指定ID的元素,也可以一次获取多个元素的数据。

DWRUtil.toDescriptiveString

这个方法主要用来调试,第一个参数是需要输出的对象,第二个参数是需要输入的信息详细程序,有三个选项:

  • 0: 一行信息
  • 1: 多行调试信息,不包含子对象的信息
  • 2: 多行调试信息,包含当前对象的第二层次的子对象的信息
评论

相关推荐

    DWR使用方法-step by step

    ### DWR使用方法详解:逐步指南 #### 一、引言 DWR(Direct Web Remoting)是一种简化Ajax开发的框架,它允许在浏览器端直接调用服务器端的方法,如同调用本地对象一样简单。本篇文章将从安装DWR、配置相关文件到...

    java dwr 使用例子

    对于初学者来说,这是一个很好的起点,它涵盖了DWR基本的使用方式和配置,同时也提供了一个可运行的示例,帮助理解Ajax通信的工作原理。通过深入学习和实践,你可以利用DWR构建更复杂的交互式Web应用。

    DWR的使用方法

    **DWR(Direct Web Remoting)使用方法详解** DWR,全称为Direct Web Remoting,是一种开源Java技术,用于在Web应用程序中实现浏览器与服务器之间的实时双向通信。它允许JavaScript直接调用Java方法,就像它们在...

    DWR 框架使用手册

    DWR通过在客户端和服务器之间建立一个通信层,使得开发者可以轻松地在JavaScript中使用Java对象,极大地简化了前后端交互的复杂性。 DWR的核心组件包括: 1. **DWRServlet**:这是DWR的主要入口点,它是一个...

    dwr使用例子配置和使用

    下面我们将详细探讨DWR的配置和使用方法。 首先,配置DWR涉及以下几个关键步骤: 1. **引入DWR库**:在项目中添加dwr.jar,这是DWR的核心库,包含了所有必要的类和接口。 2. **创建Java类**:定义你需要在客户端...

    dwr demo dwr简单使用

    在"Dwr demo - Dwr简单使用"这个项目中,你可以通过以下步骤了解和学习DWR的基本用法: 1. **环境准备**:首先确保你有Eclipse IDE,并且已经安装了Java Development Kit (JDK)。由于DWR是一个Java库,所以你需要一...

    Dwr的使用实例

    Dwr的使用实例 war文件 1. lib要导入包: dwr-2.0.M3.jar 2. web.xml配置: 3. WEB-INF下dwr.xml的配置 4. bean例子: 5. index.jsp的例子 详细内容请下载

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

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

    dwr dwrdwr

    dwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwr

    dwr跨域访问以及dwr的使用+dwr.jar

    Direct Web Remoting (DWR) 是一个开源Java库,它允许Web应用程序在浏览器和服务器之间进行实时、安全的双向通信,有效地打破...然而,正确配置和使用DWR,以及处理好跨域安全问题,是每个开发者必须面对和解决的挑战。

    dwr 包的 使用入门

    以下是对DWR包的使用入门的详细说明: 1. **DWR的安装与配置**: - 在Java项目中引入DWR库,通常通过Maven或Gradle添加依赖。 - 配置DWR的`dwr.xml`文件,定义允许的远程方法和类,这是DWR的核心配置文件,用于...

    DWR 视频教程 使用DWR开发AJAX For JavaEE

    9. **实战项目**:“[浪曦原创]零散视频三 使用DWR开发AJAX For J2EE(JustCode).wrf”可能是一个实际操作视频,详细演示如何使用DWR构建一个简单的AJAX应用,通过观看可以加深对上述理论知识的理解。 10. **资源...

    DWR技术文档、快速使用DWR、java技术

    **DWR(Direct Web Remoting)技术文档** DWR,全称Direct Web Remoting,是一种在Web应用程序中实现...通过理解其核心功能、配置步骤以及使用流程,开发者可以快速地在项目中引入DWR,构建高效、动态的Web应用。

    dwr和ajax使用demo

    五、DWR使用步骤 1. **配置DWR**:在Web应用的`web.xml`中添加DWR的Servlet配置。 2. **生成DWR映射文件**:为每个要在客户端调用的Java方法生成一个对应的DWR接口。 3. **编写JavaScript代码**:在JavaScript中使用...

    dwr说明dwr说明dwr说明

    DWR (Direct Web ...总的来说,DWR提供了一种高效且易于使用的解决方案,使得开发者能够构建高度互动的Web应用,同时减少了传统AJAX技术的复杂性。通过学习和掌握DWR,你可以更轻松地创建动态、响应式的网页应用。

    DWR的学习资料,DWR学习必备

    DWR使用笔记.chm:这可能是一份详细的DWR使用手册,包含了如何集成DWR到项目中、配置DWR引擎、创建远程接口以及处理各种交互的实例。通过阅读这份笔记,你可以了解到DWR的基本概念、配置步骤以及实际应用技巧。 dwr...

    dwr使用入门总结

    dwr使用入门总结,适合想入门的dwr学者。

    dwr配置和使用详解

    本篇文章将深入讲解DWR的配置与使用。 首先,配置DWR是使用它的第一步。在DWR的配置过程中,主要涉及到两个关键文件:`dwr.xml`和`web.xml`。`dwr.xml`是DWR的核心配置文件,它定义了哪些Java类和方法可以被...

    Ajax的DWR使用

    **Ajax的DWR使用** Direct Web Remoting (DWR) 是一种开源JavaScript库,它使得在Web应用程序中实现Ajax(Asynchronous JavaScript and XML)技术变得简单。DWR允许JavaScript与服务器端Java对象直接通信,无需编写...

Global site tag (gtag.js) - Google Analytics