11dwr - dwr.xml配置(allow标签-Creator属性)

简介: 11dwr - dwr.xml配置(allow标签-Creator属性)

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

Creator

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

create 元素是如下的结构:

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

creator 属性

1).new:Java 用“new”关键字创造对象

是 DWR 默认的 creator,如下所示:

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

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

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

  • 安全:DWR 创造的对象生存的时间越短,多次调用中间的值不一致的错误机会越少。
  • 内存消耗低: 如果你的站点用户量非常大,这个创造器可以减少 VM 的内存溢出。
2).none: 它不创建对象,看下面的原因。 (v1.1+)

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

  • 你可能在使用的 scope 不是"page"(看上面),并在在前面已经把这个对象创建到这个 scope 中了,
    这时你就不需要再创建对象了。
  • 还有一种情况是要调用的方法是静态的,这时也不需要创建对象。DWR 会在调用创建器之前先检
    查一下这个方法是不是静态的。

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

3). 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>

script 创造器有如下参数:

注意:

当一个类是用 script 创造出来的,并且 scope 是 session 或 application,如果你的脚本改变,session 中的

类和 script 中的类就不一致了。这样会出现错误。虽然 web 容器不用重启,但是用户需要先登出(或以某种

方式清空 session),然后再登录。

当 clazz 参数不为空,并且用来创造新实例,DWR 简单的调用 class.newInstance() 方法。这种方法是没

问题的,除非脚本正在用某个参数创建一个类,或者调用某个函数来配置这个类。 不幸的是,每次请求都

要重新运行 script 并造成上面的问题。

javascript 属性

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

dwr.xml:

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

html / jsp:

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

scope 属性

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

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

param 元素

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

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 方法。

auth 元素

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

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

使用静态方法

DWR 会在调用创建器之前先检查一下这个方法是不是静态的,如果是那么创造器不会被调用。很显然这个

逻辑适用于所有创造器,尽管如此"null"创造器是最容易配置的。

使用单例类

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

DWR 与 HttpSessionBindingListeners

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

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

目录
相关文章
|
2月前
|
XML JavaScript 前端开发
XML DOM - 属性和方法
XML DOM通过属性(如nodeName、nodeValue、parentNode、childNodes和attributes)和方法提供编程接口,让开发者用JavaScript等语言以节点方式交互XML。属性描述节点信息,方法执行操作,如删除节点。
|
2月前
|
XML JavaScript 前端开发
属性和方法向 XML DOM 定义了编程接口
XML DOM 提供编程接口,通过属性和方法操作XML结构。使用JavaScript等语言,可访问和修改节点。属性如nodeName、nodeValue揭示节点信息,方法如getElementsByTagName、appendChild、removeChild实现查找、添加和删除节点功能。节点对象x的应用示例贯穿其中。
|
1天前
|
XML Java 数据库
配置applicationContext.xml文件
配置applicationContext.xml文件
|
3天前
|
XML 数据格式
XML配置Servlet文件,不使用注解配置路径的方法
XML配置Servlet文件,不使用注解配置路径的方法
|
2月前
|
XML Java 数据格式
Spring高手之路18——从XML配置角度理解Spring AOP
本文是全面解析面向切面编程的实践指南。通过深入讲解切面、连接点、通知等关键概念,以及通过XML配置实现Spring AOP的步骤。
39 6
Spring高手之路18——从XML配置角度理解Spring AOP
|
3天前
|
XML Java 数据格式
SpringMVC的XML配置解析-spring18
SpringMVC的XML配置解析-spring18
|
2月前
|
XML JavaScript 前端开发
XML DOM - 属性和方法
**XML DOM 提供编程接口,将XML转换为节点对象,便于通过JS等语言操作。属性如 nodeName、nodeValue、parentNode、childNodes 和 attributes 描述节点详情。方法用于执行操作,如删除节点。**
|
29天前
|
XML JavaScript 前端开发
属性和方法向 XML DOM 定义了编程接口
XML DOM 是一个编程接口,它将XML表示为节点对象集合,可通过JavaScript等语言访问。接口通过属性和方法定义,属性如nodeName、nodeValue显示节点信息,方法如getElementsByTagName、appendChild、removeChild执行操作。例如,x.nodeName返回节点名称,x.appendChild(node)添加子节点。
|
2月前
|
XML 数据格式 Python
python挑出训练集里图片对应的xml文件,方便统计标签框的类别与数目_python 统计voc2007xml中某一类别框个数(1)
python挑出训练集里图片对应的xml文件,方便统计标签框的类别与数目_python 统计voc2007xml中某一类别框个数(1)
|
2月前
|
XML JavaScript 前端开发
XML DOM - 属性和方法
XML DOM 提供编程接口,让开发者用JavaScript等语言操作XML文档。接口包含属性和方法,属性如nodeName、nodeValue、parentNode和childNodes,用于查询节点信息;方法如getElementsByTagName、appendChild和removeChild,执行增删操作。示例中,JavaScript代码`txt=xmlDoc.getElementsByTagName(&quot;title&quot;)[0].childNodes[0].nodeValue`从books.xml获取第一个&lt;title&gt;元素的文本内容,赋值给变量txt。