• DWR组件——基于远程过程调用实现Ajax


    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6686115.html 

    一:DWR的用途

        DWR(Direct Web Remoting)是一个Web远程调用框架,会根据java类动态生成javascript代码。

    二:DWR实现Ajax的原理

        DWR是基于远程过程调用的组件,可以在浏览器端远程调用服务端的业务函数,并获取返回结果。而我们知道,浏览器端是不能直接运行Java代码的,但是可以运行JavaScript代码。DWR的作用就是:把服务端的业务函数转化成JS函数,然后在页面导入js文件,像使用普通JS函数一样调用。而页面在触发该函数时,就向服务端发出请求,服务器根据转换映射关系调用相应业务函数,并把结果返回个页面端的JS函数调用处。这样没有引发页面跳转,所以也是Ajax。

    三:DWR使用步骤

    1)下载dwr.jar(核心包)、commons-logging-1.0.4.jar(依赖包),并放置在web项目WEB-INF/lib下面。

    下载地址:http://download.csdn.net/detail/qq_28745795/9847205

    2)在web.xml中配置DWR组件,DWR相当于是一个servlet

         <servlet>
                  <servlet-name>MyDWR</servlet-name>
                  <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
                  <init-param>
                         <param-name>debug</param-name>
                         <param-value>true</param-value>
                  </init-param>
    
           </servlet>
           <servlet-mapping>
                  <servlet-name>MyDWR</servlet-name>
                  <url-pattern>/dwr/*</url-pattern>
           </servlet-mapping>

    3)定义异步处理函数类AjaxService,在其中定义一系列函数进行业务处理并返回结果

    4)在与web.xml同目录下创建dwr.xml,配置AjaxService类的哪些方法、哪个DTO通过DWR“转换”成JS函数、JS对象给前端使用;

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr/dwr20.dtd">
    <dwr>
        <allow>
            <filter class="org.directwebremoting.filter.AuditLogAjaxFilter" />
            
            <!-- AjaxService类的转换 -->
            <create creator="new" javascript="_AjaxService_js">//转换得到的JS对象名,供前端调用方法时使用
                <param name="class" value="demo.AjaxService" />
                <include method="ajax1"/>//把哪些函数进行转换,配置方法名即可
                <include method="ajax2"/>
                <include method="ajax3"/>
            </create>
            (上面的内容,我们只需写 javascript、value、include三者内容即可,其他照抄)
            <!-- 实体类的转换:把一个DTO转换成JS对象供前端使用,一般很少用 -->
            <convert converter="bean" match="model.AjaxDTO">
                <param name="include" value="username,name" />//把DTO的哪些属性提取出来转换成一个JS对象
            </convert>         
        </allow>
    </dwr>

    <create>标签中指定javascript中可以访问的java类,并定义DWR应当如何获得要进行远程的类的实例。

    creator="new"属性指定java类实例的生成方式,new意味着DWR应当调用类的默认构造函数来获得实例。

    javascript=""属性指定javascript代码进行函数调用时使用的对象名称。
    <param>标签指定要公开给javascript的java类名。
    <include>标签指定要公开给javascript的方法。不指定的话就公开所有方法。

    <convertor>标签负责配置方法的参数和返回类型。告诉DWR在服务器端Java 对象表示和序列化的JavaScript对象之间如何转换。

    converter="bean"属性指定转换的方式采用JavaBean命名规范

    match=""属性指定要转换的javabean相对路径下名称

    <param>标签指定要转换的JavaBean的属性,可以不把所有属性都转换,自己定制。

    (5)最最关键的一步:在WebRoot下,新建一个文件夹叫dwr,然后从dwr.jar中找到engine.js和util.js 或 从 http://download.csdn.net/detail/qq_28745795/984719 下载这两个js文件,放入dwr文件夹中。

    (6)在前端页面代码中导入DWRJS引擎以及上面dwr.xml中AjaxService转换得到的JS函数文件,就可在js中通过转换后的函数名直接调用方法了。

        <!-- 导入dwr的JS引擎与工具 -->
        <script type="text/javascript" src="/项目名/dwr/engine.js"></script>
        <script type="text/javascript" src="/项目名/dwr/util.js"></script>
        <script type="text/javascript" src="/项目名/dwr/interface/_AjaxService_js.js"></script>//这个只是这样写,实际上是运行期间服务器通过dwr动态生成的

    四:页面中调用转换后方法:传参与回调

    1:传参调用:通过  转换后对象名.方法名(参数列表,回调函数名)   的格式进行函数调用

    AjaxService_js.ajaxMethodName(parameters,callback);

    2:回调接收结果:定义回调函数,回调函数的形参接收上面函数调用的返回值

    function callback(data){

    //data就是函数调用返回值,进行处理。在JS中,函数的形参变量是根据实际值来决定类型的,所以这里的data可以接收返回的普通类型、JavaBean、集合类等 }

        

  • 相关阅读:
    《mysql必知必会》学习_第23章_20180809
    禁止电脑自动乱装流氓软件
    网络地址转换技术NAT
    闲置手机作电脑无线音箱
    TransMac工具制作MacOS启动U盘
    制作MacOS启动U盘
    解决centos7启动后出现Warning: dracut-initqueue timeout‘ at startup进入emergency mode的问题
    思科 锐捷命令行简介
    VRRP 虚拟网关冗余协议
    STP 生成树协议
  • 原文地址:https://www.cnblogs.com/ygj0930/p/6686115.html
Copyright © 2020-2023  润新知