DWR.xml配置文件说明书

来源:互联网 发布:免费约爱软件 编辑:程序博客网 时间:2024/05/01 11:09

1建立dwr.xml 配置文件

任何一个dwr.xml的文件都需要包含DWR DOCTYPE的声明行,格式如下:

<!DOCTYPE dwr PUBLIC

    "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"

    "http://www.getahead.ltd.uk/dwr/dwr10.dtd">

整个配置文件的大体结构如下:

<dwr>

  <init>

    <creator id="..." class="..."/>

    <converter id="..." class="..."/>

  </init>

  <allow>

    <create creator="..." javascript="..." scope="...">

      <param name="..." value="..."/>

    </create>

    <convert convertor="..." match="..."/>

  </allow>

  <signatures>

    ...

  </signatures>

</dwr>

有几个术语有必要理解,参数叫做converted,远程Bean叫做created.如果远程Bean A有个方法A.blah(B),那么你需要为A建立一个created,B建立一个converted.

 

配置文件init部分声明那些用于建立远程bean和在方法调用中转换bean的类.这部分是可选择性配置的,多数情况下可以不必使用它,如果你想定义一个新的creator或者converter那么就必须在部分中声明,but do double check on the ones that are currently available first.

init部分的作用是告诉DWR一些类实例和关于这些类怎样运行的信息.实际上并不会使用.这有点向java中的import语句,多数类在使用之前需要引入,但引入了类并不意味着这些在使用,每个creatorconverter需要有个id属性来允许以后进行引用.

配置文件的allow部分定义哪些类可以建立和转换,每个被准许的类都可以有一个'create'或者'convert'配置行.下面列出的类的转换在默认情况下不需要进一步的设置.

  1、所有基本类型,boolean,int,double等等

  2、基本类型的对象形式实现的类,Boolean,Integer等等

  3java.lang.String

  4java.util.date 和三个SQL形式的派生类

  5、以上所有类型的数组形式

  6、以上所有类型的集合,List,Set,Map(有些局限性)

However nothing is added to the list of classes that can be created (i.e. put up for remoting) without you declaring it.

2The Converters

DWR已经默认定义和初始化了常用的Converter,他们分别如下:

<converter id="null"

    class="uk.ltd.getahead.dwr.convert.NullConverter"/>

<converter id="primitive"

    class="uk.ltd.getahead.dwr.convert.PrimitiveConverter"/>

<converter id="bignumber"

    class="uk.ltd.getahead.dwr.convert.BigNumberConverter"/>

<converter id="string"

    class="uk.ltd.getahead.dwr.convert.StringConverter"/>

<converter id="date"

    class="uk.ltd.getahead.dwr.convert.DateConverter"/>

<converter id="array"

    class="uk.ltd.getahead.dwr.convert.ArrayConverter"/>

<converter id="map"

    class="uk.ltd.getahead.dwr.convert.MapConverter"/>

<converter id="collection"

    class="uk.ltd.getahead.dwr.convert.CollectionConverter"/>

<converter id="bean"

    class="uk.ltd.getahead.dwr.convert.BeanConverter"/>

<converter id="hibernate"

    class="uk.ltd.getahead.dwr.convert.HibernateBeanConverter"/>

<converter id="dom"

    class="uk.ltd.getahead.dwr.convert.DOMConverter"/>

<converter id="dom4j"

    class="uk.ltd.getahead.dwr.convert.DOM4JConverter"/>

<converter id="jdom"

    class="uk.ltd.getahead.dwr.convert.JDOMConverter"/>

<converter id="xom"

    class="uk.ltd.getahead.dwr.convert.XOMConverter"/>

<converter id="servlet" class="uk.ltd.getahead.dwr.convert.ServletConverter"/>

这里仅仅是定义了Converter并且简单的放在<convert….>元素之内,任何的<convert….>元素内容都有两个必须定义的属性.一个是对converter定义的引用和converter能够转换的类.

例如最简单的converternull converter,它作用是把nullvoid值转换成javascriptnullundefined.它是所有converter中最简单的,就象调用java的静态方法一样,所以并不需要创建对象.

默认的时候DWRjava void值转换成javascriptnull值就是这样设置de><convert converter="null" match="void"/>de>. 有时java.lang.Void也需要进行这样的转换,所以设置也是相似的<convert converter="null" match="java.lang.Void"/>.java中传递null值到javascript是没有任何危险性的,所以DWR将这个作为默认的converter,所以你自己不用再把这个converter添加到配置文件的<allow>部分中去.

基本类型的converter转换int,boolean,double.当然还包括对应的对象形式Integerv,Boolean等等.DWR中在allow预定义了16个配置项目分别用于所有基本类型的转换.就象这样<convert converter="primitive" match="java.lang.Long"/><convert converter="primitive" match="long"/>.

String类型和Date同样预先定义了Converter,这些converter都没有办法进行改变的,所有的String,Date和数值类型都统一采用默认的converter.

2.1 Array Converters

Array的配置项目没有上面介绍的那么直观,默认情况下DWR装载所有的基本类型和可装载的对象,这些包括String,Date等先前介绍的类型.java高级程序员可能会理解为什么match的这行有点奇怪.

<convert converter="array" match="[Z"/>

<convert converter="array" match="[B"/>

<convert converter="array" match="[S"/>

<convert converter="array" match="[I"/>

<convert converter="array" match="[J"/>

<convert converter="array" match="[F"/>

<convert converter="array" match="[D"/>

<convert converter="array" match="[C"/>

<convert converter="array" match="[L*"/>

*符号在上面没有提到,其实这是个可以表示任何字符的通配符号.这些数组可装载的的类型和其他可装载的类型是一样的.

2.2 Bean Converters

一种不能采用默认方式定义的converter就是Bean Converter,这个是将POJO对象转换成javascript相关的数组,反向也一样.基于安全因素的考虑这种类型的converter不能采用默认的方式实现.

假设有个bean并且通过<create ...>语句设置成远程可用,有种类型的参数他本身是一个带有setterjava bean,setter会产生严重的隐患.攻击者可能促使这隐患的发生.通过下面的语句就可以设置但个类的bean converter

<convert converter="bean" match="your.full.package.BeanName"/>

要想允许转换指定包或子包下所有类的转换可以按照下面的设置

<convert converter="bean" match="your.full.package.*"/>

很明显,可以采用下面的方式来转换所有的java bean

<convert converter="bean" match="*"/>

2.3 Restricting Property Conversion(指定属性转换)

将象用excludeincluce来通知DWR隔离creator的方法一样,converter也有一个类似的配置方法.因为指定属性转换只有针对bean才有效(基本类型的转换没有必要指定属性),这个功能只能应用与特定的converterBeanConverter和从次类派生的所有类.相关配置语法如下

<convert converter="bean" match="com.example.Fred"/>

  <param name="exclude" value="property1, property2"/>

</convert>

这样就可以限定DWR不能调用Fred对象的getProperty1()getProperty2()方法,通常这被成为拒绝访问方式,当然你也可以采用下面的方式配置可以访问的方法(授权访问方式)

<convert converter="bean" match="com.example.Fred"/>

  <param name="include" value="property1, property2"/>

</convert>

较好的安全控制大部分都是采用授权访问方式.

2.4 Collection Converters

DWR最后两个默认的converterMapsCollections

<convert converter="collection" match="java.util.Collection"/>

<convert converter="map" match="java.util.Map"/>

通常converter是采用递归方法转换集合中的所有对象.

这里有两个地方需要注意:

仅仅通过反射方法没有办法知道集合元素中的类型,所以上面的两个converter能将任何集合转换成相对javascript而言有意义的对象.然而没有办法将不同的集合类类型分别采用不同的转换方法.因为没有办法完全自动进行转换,我们可以应用dwr.xml文件的special signatures syntax配置部分设置类型的转换处理过程.

2.5 DOM Objects

DWR 自动将DOMDOM4JJDOMXOM转换成DOM,前面这几种类型都仅仅返回Document,Element,Node.DWR会自动将这些转换成浏览器DOM对象.通常在启动JDOM Converter时会有一个提示信息,除非你想采用JDOMconverter否则可以忽略.

INFO: Missing classdef for converter 'jdom'. Failed to load uk.ltd.getahead.dwr.convert.JDOMConverter. Cause: org/jdom/Document

因为DWR没有办法知道你是否采用jdom converter,所以提示信息是info级别.如果你想采用jdom converter,你必须很清楚地知道jdom converter是否可以被加载.这就是DWR保留上面的提示信息的原因.

3 The Creators

DWR共有三种Creator,最简单的”new”是调用bean的默认构造函数创建实例.”scripted”允许采用其他脚本语言创建实例.BeanShell.在远程bean的默认构造函数不能进行进一步配置的情况下这种类型的creator比较有用.”Spring”类型允许你通过spring创建实例.

下面是关于creator的参考资料和配置参数说明.

Creator

Parameter

User

new

class

类的全名称(包括包路径)

scripted

language

BSF框架支持的脚本语言名称(BSFapache项目)

scripted

script

返回远程对象的脚本,脚本可以指定一些属性,多数情况下一般只设置param节点配置.属性很少设置.

spring

Location*

任何以location开头的参数,每个参数都是指定一个spring的配置文件,在参数没有设置的情况下DWR会去读取spring的全局的配置文件.

spring

beanName

从配置文件中读取的bean的名称

“scope参数允许你配置creator的生命周期,共有以下几个选项:application,session,request,page.这些参数对于用过jspservlet的开发人员并不陌生.

3.1 Uing static methods

如果你想远程调用一个creator的静态方法,并且creatornew类型.因为调用远程bean的方法前DWR不会检测将要执行的方法是不是静态方法,如果是静态方法那么creator就不用创建.这种机制可以适用任何类型的creator,new类型的creator是最简单配置的.

3.2 Security

Creator可以配置类的成员函数的访问权限.creator有授权访问(指明可以被访问的方法)和拒绝访问(指明不允许访问的方法)两种配置方式.

如果要设置除了setWibble方法之外的所有方法都不可访问可以采用下面的设置.

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

  <param name="class" value="com.example.Fred"/>

  <exclude method="setWibble"/>

</create>

如果采用j2ee访问角色控制的模式

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

  <param name="class" value="com.example.Fred"/>

  <auth method="setWibble" role="admin"/>

</create>

3.3 The 'spring' Creator

3.4 The 'new' Creator

DWR已经默认定义了new creator.

<creator id="new" class="uk.ltd.getahead.dwr.create.NewCreator"/>DWR已经将这配置到了内置的dwr.xml文件中,并不需要进行额外的配置.

Creator通过调用类的默认的构造方法创建实例.应用new creator有以下几个优点:

?         安全性   

生命周期比较短的creator可以得到更好的安全性,通过不同的应用情况设置适合的生命周期.

?         低内存开销

在访问量比较大的情况下,可以不用担心发生内存泄露的情况.

配置一个creator的创建和远程方法调用设置:

<allow>

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

    <param name="class" value="java.util.Date"/>

  </create>

  ...

</allow>

上面的配置信息表示将java.util.date提供给客户端调用,并且引用名称是Blash.当你在客户端调用Blash.toString(reply),后台将采用java.util.date的默认构造方法创建一个实例.然后调用实例的tostring方法.客户端的javascript将返回给reply对象(此时replyjava.util.date的字符串形式)

3.5 The 'scripted' Creator

DWR 已经默认配置了scripted creator配置,

<creator id="script" class="uk.ltd.getahead.dwr.create.ScriptedCreator"/>这种类型的creator采用BSF执行脚本语言并返回bean.例如

<allow>

  ...

  <create creator="script" javascript="EmailValidator">

    <param name="language" value="beanshell"/>

    <param name="script">

      import org.apache.commons.validator.EmailValidator;

      return EmailValidator.getInstance();

    </param>

  </create>

  ...

</allow>

 

4 Signatures in dwr.xml

Signatures部分用于配置Collections中装载对象元素的类型.举个例子来说

  • DWR.xml配置文件说明书
  • DWR.xml配置文件说明书
  • DWR.xml配置文件说明书
  • DWR.xml配置文件说明书(网摘)
  • dwr配置文件dwr.xml祥解
  • dwr配置文件dwr.xml祥解
  • dwr配置文件dwr.xml详解
  • dwr配置文件dwr.xml详解
  • dwr配置文件dwr.xml详解
  • dwr配置文件dwr.xml详解
  • dwr配置文件dwr.xml详解
  • dwr配置文件dwr.xml详解
  • dwr配置文件dwr.xml详解
  • dwr配置文件dwr.xml详解
  • dwr配置文件dwr.xml祥解
  • dwr配置文件dwr.xml详解
  • dwr配置文件dwr.xml详解
  • DWR.xml配置文件学习
  • 简单是一种方法
  • 粒子群算法(1-6)----粒子群算法简介
  • java.lang.OutOfMemoryError: PermGen space及其解决方法
  • 关于 ie6 ie7 无法选择文字
  • 电子银行业务分析系统—项目总结2. 需求管理总结
  • DWR.xml配置文件说明书
  • SQL 查找重复记录
  • 新的开始
  • 在C#中优化字符串操作
  • 电子银行业务分析系统—项目总结3. 计划执行总结
  • Robert 边缘检测算子
  • 电子银行业务分析系统—项目总结4. 产品质量总结
  • 新的开始
  • 如何为域里面的ASP.NET站点集成 Windows authentication?
  • 原创粉丝点击