zoukankan      html  css  js  c++  java
  • DWR学习详解【转】

    在这种情况下,我们可以根据J2EE security来控制权限,针对不同url,加不同的角色。

    5、dwr的几个扩展点(Plug-ins)

    DWR对以下接口提供的默认的实现,用户可以继承DWR的默认实现类来达到我们想要的效果。但这至少需要我们读了DWR源码才能做这些工作(dwr源码很是清晰,有兴趣可以学习一下),以后可能补存这部分。

     

    uk.ltd.getahead.dwr.AccessControl    

    uk.ltd.getahead.dwr.Configuration

    uk.ltd.getahead.dwr.ConverterManager

    uk.ltd.getahead.dwr.CreatorManager

    uk.ltd.getahead.dwr.Processor

    uk.ltd.getahead.dwr.ExecutionContext

    一点感想:

    1、java的方法避免用 java 和 javascript的关键字。 如 try()方法 或 delete()方法。

    2、在你的java类中不要出现重载 avoid overloaded methods.

    3、在生产环境下,你可以把deprecated.js engine.js util.js 合并成一个,并放到web容器内,直接在htm,jsp中引用。 (对于java代码转换成的javascript代码也可以这么做,免得每次生成javascript代码浪费时间)

    4、研究一下Bean Converters。POJOjava对象必须严格按照 getProperty() setProperty()定义。Bean Converters是按照 java对象的 get set方法工作的。DWR1.1加了Object Converters,是按private int property;这类属性工作的。

    <convert converter="bean" match="example.Fred"/>
    
    <param name="exclude" value="property1, property2"/>
    
    </convert>

    当你这样配置时,java对象转化成的javascript对象不包括property1和property2。

    <convert converter="bean" match="example.Fred"/>
    
    <param name="include" value="property1, property2"/>
    
    </convert>

    反过来java对象转化成的javascript对象直包括property1和property2。

    5、

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

    这也是容易出问题的地方.

    package example;
    
    public class Person{
    
    private String name;
    
    get ... set
    
    private List relationPerson;
    
    public List setRelationPerson(List relationPerson){
    
    this.relationPerson=relationPerson;
    
    }
    
    }
    <convert converter="bean" match="example.Person"/>
    
    </convert>
    <signatures>
    
    <![CDATA[
    
    import java.util.Set;
    
    import example.Person;
    
    Person.setRelationPerson(List<Person>);
    
    ]]>
    
    </signatures>

    在jdk1.5泛型中有写法区别

    6、另外在Set,List等做为方法参数时也会出现混淆。返回集合类型不会出现问题,想想就知道了。

    如 在Test类中有 public Set testBeanSetParam(Set test) 这个方法,客户端得到的javascript方法可能是Test.testBeanSetParam(p0,callback);当我们 javascript调用这个方法时,鬼才知道怎么确定p0的类型,也不可能知道Set集合中该放什么类型的java对象,所以dwr的 special signatures syntax 确定这些集合和内容的类型

    <signatures>
    
    <![CDATA[
    
    import java.util.Set;
    
    import example.Test;
    
    Test.testBeanSetParam(Set<TestBean>);
    
    <!--Test.stringStringMapParam(Map<String, String>);-->
    
    ]]>
    
    </signatures>

    7、Creators

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

    为了更少的暴露业务方法,最好配置include属性。

    dwr支持new ,script,struts....几种集成方法,也支持static方法的调用,我觉得最好的是spring,其他感觉是处理遗留问题处理。

    8、engine_js 作为dwr框架客户端核心,主要完成xmlHttp或iframe的构造,我们没必要关心它如何实现。有几点创新的我们可以学习下。

    Call Batching 我们可以把几个客户端请求一起放送到服务器端,减少了网络交互,但要注意依存关系和他们处理的顺序。

    Call Ordering 同步异步调整。一般用默认的就好了。注意依存关系。

    Remoting Hooks 钩子,"small AOP"

    依存关系解释。 如果 request1() request2()两个业务逻辑方法,request2方法需要用到request1方法从服务器端返回的结果。如果调用request2时,request1还没处理或还没请求。 下拉框连动可能有这个问题。

    9、util.js propotype.js有些重复,这让我很难受。只能改代码了,可别坏了开元协议。

    10、如果你的回调方法想加其他参数

    var dataFromBrowser = ...;
    
    var callbackProxy = function(dataFromServer) {
    
    callbackFunc(dataFromServer, dataFromBrowser);
    
    };
    
    var callMetaData = { callback:callbackProxy };
    
    Remote.method(params, callMetaData);

    11、dwr1.1

    1.1只能算一个bug消除版本,没有什么大的功能调整。源代码结构做了些调整。2.0有新的特征加入。

    It has a far broader scope; the major new features are accessibility enhancements, and what now appears to be called 'Comet'. 在文档中提到了“Comet”,估计与DWR2.0作者想法类似。

  • 相关阅读:
    es6-14 Promise
    微信公众号支付 出现的问题
    RedisDesktopManager 打开报0xc000007b程序错误
    easyui 下对radio的选中操作
    谷歌浏览器(Chrome)禁止浏览器缓存 设置
    oracle 中start with 的用法
    Spring JdbcTemplate 调用存储过程
    Object 转化为String时的一个问题 null->"null"
    android/ios js 启动apk
    nexus2.1.2的配置
  • 原文地址:https://www.cnblogs.com/macula/p/2881018.html
Copyright © 2011-2022 走看看