`
hackbomb
  • 浏览: 213238 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

dwr.xml配置文件说明书

    博客分类:
  • Dwr
阅读更多

dwr.xml格式:
<!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

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"/>

Array的配置项目:
<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*"/>

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

指定属性转换只有针对bean才有效
<convert converter="bean" match="com.example.Fred"/>
  <param name="exclude" value="property1, property2"/>
</convert>

授权访问方式
<convert converter="bean" match="com.example.Fred"/>
  <param name="include" value="property1, property2"/>
</convert>

Maps和Collections converter
<convert converter="collection" match="java.util.Collection"/>
<convert converter="map" match="java.util.Map"/>

creator
Creator    Parameter    User   
new    class    类的全名称(包括包路径)   
scripted    language    BSF框架支持的脚本语言名称(BSF为apache项目)   
scripted    script    返回远程对象的脚本,脚本可以指定一些属性,多数情况下一般只设置param节点配置.属性很少设置.   
spring    Location*    任何以location开头的参数,每个参数都是指定一个spring的配置文件,在参数没有设置的情况下DWR会去读取spring的全局的配置文件.   
spring    beanName    从配置文件中读取的bean的名称   
           
           
           
fan访问权限           
           
如果要设置除了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>

DWR的引擎文件,他承担着把后台自动生成的javascript接口与前台调用之间的衔接责任
<script type='text/javascript'
    src='/[YOUR-WEB-APP]/dwr/engine.js'>
</script>

Java组件的编写和发布以及客户端引用
Java组件必须是一个具体类(因为接口、抽象类反射机制无法实例化)
实体类必须遵循Java Bean规范即实现Getter和Setter
配置文件中Allow部分的Create元素的JavaScript属性的值要唯一
如果存在Java Bean需要转换则要配置Allow部分的Convert元素
客户端引用业务组件要以dwr/interface/xxx.js的路径引用JS文件

DWR前台引擎(Engine.js)的主要职责:
截取每个后台组件的请求实现客户端的统一入口
将用于组件调用的JS参数对象重新包装组合
检测客户端浏览器的环境并选择最佳的数据提交方案
处理后台执行结果并通过执行回调函数通知客户

后台控制器(DWRServet)的主要职责
装载Servlet时初始化DWR配置参数
实现后台业务组件调用的服务器端统一入口
分发各种不同类型的请求 JS文件请求 业务调用请求等
输出组件执行结果(JavaScript语句)到客户端浏览器

业务组件执行器的主要职责
根据配置文件的参数确定后台组件的访问规则和生命周期
拆包前台传入的参数 包装组件执行结果
按参数类型匹配数据类型转换器
采用反射机制执行业务组件方法处理客户端请求
处理与其他系统的接口和协作 如:Spring Hibernate等

dwr.xml的业务组件发布和调用规则配置部分Allow
Create配置元素详细说明:
 属性:
 Creator 
 配置业务组件的创建类型。主要有四种:Spring、New、 none 、Scripts。
 JavaScript
 前台页面javascript引用此组件的名称。名称需要唯一。
 scope
 组件的作用范围或则叫做生命周期。这个和Servlet的生命周期的作用是 一样的。共Session、request、application、page四个选项。
子节点:
 Param 
 配置业务组件的创建参数。Name属性设置名称,value属性设置业务组件的具体路径(类全名称)。
 Include
 授权方式保护业务组件方法的可见性。属性method可以访问的方法名称。如果没有配置则默认为所有方法都可以访问。
 exclude
 排除方式保护业务组件方法的可见性。属性method设置不可以访问的方法名称。除此之外的都可以访问。如果有需要控制业务组件方法的访问权限时建议采用这种方式。
Auth
采用EJB的角色访问控制方式。Method属性设置可以访问的方法名称,role属性设置访问角色。

Convert配置元素详细说明:
 属性:
 converter 
 配置数据类型的转换器。一般是设置bean转换器,因为基本类型的转换器DWR默认设置。
 match
 设置要使用此转换器的java实体对象。如:
<convert converter="bean" match="demo.entity.*"/>
 子节点:
Param对象属性的转换规则,name属性设置规则有include和exclude选项,作用和组件方法控制的一样。Value属性设置实体对象的属性。默认是所有属性都进行转换。

dwr.xml的业务组件方法签名配置部分Signatures
Signatures是用来配置Java Bean数据类型转换时遇到不能确定转换类型的情况。如:
Bean.setList(List a)方法,DWR设置集合a的时候就无法确定a这个集合里需要填充哪种数据类型。所以针对有输入集合对象的情况就需额外设置Signatures配置节点来设置。这个节点的配置如下:
<signatures>
  <![CDATA[
    import java.util.List;
    import demo.entity.*;
    import demo.busi.*;
   
    Customer.setAccounts(List<Account> accounts);
    DemoBusinessObject.getListSet(List<Contact> inList);
   ]]>
</signatures>

Signatures主要有两个部分:

Import部分 和java文件的作用一样

另一部分对方法的签名进行范型的设定。返回结果的集合元素类型不需要设置,因为可以在运行时确定。

JS开发注意事项
1、要注意DWR异步机制带来的数据可能不同步问题
2、返回结果只能是一个值所以要详细设计返回结果类型
3、要注意Java引用传递和JavaScript值传递的差异
4、连续多次后台请求尽量采用批量调用
5、尽量将JavaScript的逻辑处理代码抽取成一个独立的文件

分享到:
评论
1 楼 dopic 2009-02-19  
very good

相关推荐

Global site tag (gtag.js) - Google Analytics