dwr.xml 是你用来配置 DWR 的文件,默认是将其放入 WEB-INF 文件夹。

创建一个 dwr.xml 文件
dwr.xml 有如下的结构:

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC
"-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN"
"http://getahead.org/dwr/dwr30.dtd"> <dwr>
<!-- 仅当需要扩展DWR时才需要 -->
<init>
<creator class="..." id="..."/>
<converter class="..." id="..."/>
</init> <!-- 没有它DWR什么也做不了 -->
<allow>
<create creator="..." javascript="..."></create>
<convert match="..." converter="..."></convert>
</allow> <!-- 有必要告诉DWR方法签名 -->
<signatures>...</signatures>
</dwr>

<init>标签

  这个初始化部分申明被用来创建远程 beans 而且这个类能被用来以某种过程转换。大多数例子你将不需要用它,如果你想去定义一个新的 Creator 或者 Converter,就要在此被申明。
在 init 部分里有了定义只是告诉 DWR 这些扩展类的存在,给出了如何使用的信息。这时他们还没有被使用。这种方式很像 Java 中的 import 语句。多数类需要在使用前先 import 一下,但是只有 import 语句并不表明这个类已经被使用了。每一个 creator 和 converter 都用 id 属性,以便后面使用。

<allow>标签
  allow 部分定义了 DWR 能够创建和转换的类。

Creator
  每一个在类中被调用的方法需要一个<create …>有若干类型的 creator,使用“new”关键字或者 Spring 框架等。
  create 元素是如下的结构

   <allow>
<create creator="..." javascript="..." scope="...">
<param name="..." value=".."/>
<auth role="..." method="..."/>
<exclude method="..."/>
<include method="..."/>
</create> ... </allow>

1、create 属性

    ¤new:Java 用“new”关键字创造对象

     是 DWR 默认的 creator,如下所示    

 <create id="new" class="org.directwebremoting.create.NewCreator"/>

     没有必要把它加入 dwr.xml,它已经在 DWR 内部文件了。

     这个 creator 将使用默认构造器创建类的实例,以下是用 new 创建器的好处

     √ 安全:DWR 创造的对象生存的时间越短,多次调用中间的值不一致的错误机会越少。

     √ 内存消耗低: 如果你的站点用户量非常大,这个创造器可以减少 VM 的内存溢出。

    ¤ none: 它不创建对象,看下面的原因。 (v1.1+)

     none 创建器不创建任何对象,它会假设你不须要创建对象。有 2 个使用的原因:

      √ 你可能在使用的 scope 不是"page"(看上面),并在在前面已经把这个对象创建到这个 scope 中了,这时你就不需要再创建对象了。

      √ 还有一种情况是要调用的方法是静态的,这时也不需要创建对象。DWR 会在调用创建器之前先检查一下这个方法是不是静态的。

  对于上诉两种情况,你仍然需要 class 参数,用来告诉 DWR 它是在操作的对象类型是什么。

   ¤scripted: 通过BSF使用脚本语言创建对象,例如BeanShell或Groovy。

    要使用这个创造器,你需要把一些辅助库放到 WEB-INF/lib 文件夹下:比如 BSF 的 jar 包 ,你要用的脚本语言的 jar 包 。

    new 创造器在 DWR 中已经默认声明了:

      <creator id="script" class="uk.ltd.getahead.dwr.create.ScriptedCreator"/>
    这个创造器用 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>
<signatures>...</signatures>
</dwr>

2、javascript 属性

  在浏览器里给你创建的对象命名。避免使用 JavaScript 保留字。这个名字将在页面里作为 js 被导入

  dwr.xml

 <create creator="new" javascript="service">
<param name="class" value="web.service.Service"/>
</create>

  html/jsp

 <html>
<head>

<script type='text/javascript' src='dwr/interface/service.js'>

3、scope 属性

  和定义在 servlet 的 scope 一样大的范围,它允许你指定哪个 bean 是可以获得的。选项可以是:application,session, request 和 page。这些值应该已经被开发者们熟悉了。

  scope 选项是可选的,默认为 page, 使用 session 请求 cookies。目前,DWR 还不支持 URL 重写。

4、param 元素 

  被用来指定创造器的其他参数,每种构造器各有不同。例如,"new"创造器需要知道要创建的对象类型是什么。每一个创造器的参数在各自的文档中能找到。

5、include 和 exclude 元素

  允许一个创造器去限制进入类的方法。一个创造器必须指定 include 列表或 exclude 列表之一。如果是include 列表则暗示默认的访问策略是"拒绝",include 中的每个方法就是允许访问的方法;如果是 exclude列表则暗示默认的访问策略是"允许",exclude 中的每个方法就是拒绝访问的方法。

<create creator="new" javascript="Fred">
<param name="class" value="com.example.Fred" />
<include method="setWibble" />
</create>

  说明你只能在 DWR 中使用 Fred 的是 setWibble 方法。

6、auth 元素

  允许你指定一个 J2EE 的角色作为将来的访问控制检查:

 <create creator="new" javascript="Fred">
<param name="class" value="com.example.Fred" />
<auth method="setWibble" role="admin" />
</create>

7、使用静态方法

  DWR 会在调用创建器之前先检查一下这个方法是不是静态的,如果是那么创造器不会被调用。很显然这个逻辑适用于所有创造器,尽管如此"null"创造器是最容易配置的。

8、使用单例类  

  对于单例类的创建,最好适用 BeanShell 和 BSF 来实例化对象。

9、DWR 与 HttpSessionBindingListeners

  DWR1.x 中存贮已经创造的 Bean 的方法需要注意,它在每次请求时都会调用相同的 setAttribute() 方法。就是说,如果一个 Bean 在 dwr.xml 中的声明周期设置为 session,再每次调用 bean 中的方法时,DWR都会执行一次 session.setAttribute(yourBean) 。这看上去没有什么危害,但是如果你要使用 servlet 的事件机制的,就是说用了 HttpSessionBindingListener 接口,你就会发现 valueBound 和 valueUnbound 事件在每次调用时都会发生,而不是你想像的在 bean 被创建时以及 session 过期时。

  DWR2 只在第一次创建对象时调用 setAttribute() 。

====================================================

Converter

  我们需要确认所有的参数能被转换。许多 JDK 提供的类型使你能够使用,但是你如果要转换你自己的代码,就必须告诉 DWR。一般是指 JavaBean 的参数需要一个<convert…>标签作为入口。

  你不需要在 dwr.xml 中<allow>部分的<convert>中定义。它们默认支持。

    •所有主要的类型,boolean, int , double 等等。
    •包装类,Boolean, Integer 等等。
    •java.lang.String
    •java.util.Date 和 java.sql.Times,java.sql.Timestamp。
    •数组(存放以上类型的)
    •集合类型 (List, Set, Map, Iterator 等等) (存放以上类型的)
    •DOM 对象(来自于 DOM, XOM, JDOM 和 DOM4J)

================================================

<signatures>标签

  DWR 使用反射机制在转换过程中找到它应该使用的类型。有时候类型的信息无法获得,在这种情况下你要在此处用方法签名给予暗示。

  signatures 段使 DWR 能确定集合中存放的数据类型。例如下面的定义中我们无法知道 list 中存放的是什么类型。

 public class Check {
public void setLotteryResults(List nos)
{
...
}
}

  signatures 段允许我们暗示 DWR 应该用什么类型去处理。格式对以了解 JDK5 的泛型的人来说很容易理解。

 <signatures>
<![CDATA[
import java.util.List;
import com.example.Check;
Check.setLotteryResults(List<Integer> nos);
]]>
</signatures>

  

dwr.xml 配置的更多相关文章

  1. DWR+Spring配置使用

    一.DWR介绍 DWR(Direct Web Remoting)是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,利用这个框架可以让AJAX开发变得很简单.利用DWR可以在客户端 ...

  2. java web.xml配置详解

    1.启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<context-param>两个结点. 2.紧急着,容创建一个Servl ...

  3. DWR基本配置

    DWR——Direct Web Remoter Servlet 供给那些想要以一种简单的方式使用Ajax和XMLHttpRequest的开发者.它具有一套JavaScript功能集,它们把从HTML页 ...

  4. web.xml 配置介绍

    这个不是原创,有点早了,具体从哪里来的已经记不得了.但是东西是实实在在的. 1.启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<c ...

  5. web.xml配置以及一些详解

    web.xml的根元素定义如下所示(代表当前使用哪个模版): <?xml version="1.0" encoding="UTF-8"?> < ...

  6. 160329(二)、web.xml配置详解

    1.启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<context-param>两个结点. 2.紧急着,容创建一个Servl ...

  7. Java Web学习总结(19)——web.xml配置详解

    1.启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<context-param>两个结点. 2.紧急着,容创建一个Servl ...

  8. Maven系列--web.xml 配置详解

    一 .web.xml介绍 启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<context-param>两个结点. 紧接着,容 ...

  9. Mybatis XML配置

    Mybatis常用带有禁用缓存的XML配置 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ...

随机推荐

  1. ASP.NET 读数据库绑定到 TreeView 递归方式

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs& ...

  2. svn“Previous operation has not finished; run 'cleanup' if it was interrupted

    今天碰到了个郁闷的问题,svn执行clean up命令时报错“Previous operation has not finished; run 'cleanup' if it was interrup ...

  3. 5.如果第4题中在DOS命令下输入:java Hello 出现以下结果:Bad command or the file name 可能是什么原因?请说明理由。

    1.没有输入javac指定路径,而是直接输入java Hello. 2.前面已经用过一次指令,没有重新输入路径.

  4. python--windows下安装BeautifulSoup

    python有很多内置的模块可以不安装使用,用起来非常方便,但是也有一些挺有用的非内置的模块不能直接使用,需要话费点力气手动安装. 进入python安装目录下的Scripts目录,查看是否有pip工具 ...

  5. Inno Setup入门(六)——在程序目录下创建文件

    创建文件夹可以使用[dirs]段实现,代码如下: [setup] ;全局设置,本段必须 AppName=Test AppVerName=TEST DefaultDirName="E:\TES ...

  6. SQLServer在多个表中都增加一个字段的方法

    1.使用游标 declare @sql varchar(), @name varchar() declare my_cursor scroll cursor for select name from ...

  7. SQL Server 分页语句

      表中主键必须为标识列,[ID] int IDENTITY (1,1) 1.分页方案一:(利用Not In和SELECT TOP分页) SELECT TOP 页大小 * FROM TestTable ...

  8. Objective-C对象模型及应用

    引言 简介 与Runtime交互 Runtime术语 消息 动态方法解析 消息转发 健壮的实例变量(Non Fragile ivars) Objective-C Associated Objects ...

  9. Object调用控件的办法

    <OBJECT id="pwdpad" style="LEFT: 0px; WIDTH: 35px; TOP: 0px; HEIGHT: 16px" cl ...

  10. 【jsp exception】如何处理jsp页面的错误

    根据jsp对错误的处理方式不同可以将其分为局部异常处理和全局异常处理.局部异常处理适用于个别jsp页面,当这些页面发生错误后,采取特殊的处理方式:全局异常处理适用于所有jsp页面,当所有页面发生某些指 ...