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、集合類等 }

 

 

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM