dwr学习笔记之dwr.xml

xiaoxiao2026-05-20  2

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     2.0//EN" "http://www.getahead.ltd.uk/dwr/dwr20.dtd">     <dwr>    <!-- 仅当需要扩展DWR时才需要 -->    <init>        <creator id="..." class="..." />        <converter id="..." class="..." />    </init>    <!-- 没有它DWR什么也做不了 -->    <allow>        <create creator="..." javascript="..." />        <convert converter="..." match="..." />    </allow>    <!-- 有必要告诉DWR方法签名 -->    <signatures>...</signatures>    </dwr>

每一个在类中被调用的方法需要一个<create …>有若干类型的creator,使用“new”关键字或者Spring 框架等。create元素是如下的结构     <allow>         <create creator="..." javascript="..." scope="...">             <param name="..." value="..." />             <auth method="..." role="..." />             <exclude method="..." />             <include method="..." />         </create>         ...     </allow>2).none: 它不创建对象,看下面的原因。 (v1.1+)none创建器不创建任何对象,它会假设你不须要创建对象。有2个使用的原因:?  你可能在使用的scope不是"page"(看上面),并在在前面已经把这个对象创建到这个scope中了,   这时你就不需要再创建对象了。?  还有一种情况是要调用的方法是静态的,这时也不需要创建对象。DWR会在调用创建器之前先检   查一下这个方法是不是静态的。对于上诉两种情况,你仍然需要class参数,用来告诉DWR它是在操作的对象类型是什么。

     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)两个没有默认打开的转换器是Bean 和 Object 转换器。Bean转换器可以把POJO转换成Javascript的接合数组(类似与Java中的Map),或者反向转换。这个转换器默认情况下是没打开的,因为DWR要获得你的允许才能动你的代码。Object转换器很相似,不同的是它直接应用于对象的成员,而不是通过getter和setter方法。下面的例子都是可以用object来替换bean的来直接访问对象成员。如果你有一个在 <create ...> 中声明的远程调用Bean。它有个一参数也是一个bean,并且这个bean有一个setter存在一些安全隐患,那么攻击者就可能利用这一点。你可以为某一个单独的类打开转换器:    <convert converter="bean" match="your.full.package.BeanName"/>就像你可以在creator的定义中剔出一些方法一样,converter也有类似的定义。限制属性转换仅仅对于Bean有意义,很明显原生类型是不要需要这个功能的,所以只有BeanConverter及其子类型(HibernateBeanConverter))有这个功能。语法是这样的:<convert converter="bean" match="com.example.Fred">    <param name="exclude" value="property1, property2" /></convert>这就保证了DWR不会调用 fred.getProperty1() 和fred.getProperty2两个方法。

 

转载请注明原文地址: https://www.6miu.com/read-5049070.html

最新回复(0)