现在的位置: 首页 > 综合 > 正文

dwr配置文件详解

2013年08月08日 ⁄ 综合 ⁄ 共 4599字 ⁄ 字号 评论关闭

1.建立dwr.xml配置文件

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

   

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

   

 

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

 

   在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(有些局限性)

 

2:The converters 

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

  

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

 

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

 

 

  2.1:BeanConverter

 

  一种不能采用默认方式定义的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.2: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>

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

 

 

  默认的时候DWRjava void值转换成javascriptnull值就是这样设置<convert converter="null" match="void"/>. 有时java.lang.Void也需要进行这样的转换,所以设置也是相似的<convert converter="null" match="java.lang.Void"/>.java中传递null值到javascript是没有任何危险性的,所以DWR将这个作为默认的converter,所以你自己不用再把这个converter添加到配置文件的<allow>部分中去.基本类型的converter转换int,boolean,double.当然还包括对应的对象形式Integerv,Boolean等等

 

 

 

 

 

 

2.3 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.4 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

抱歉!评论已关闭.