DWR組件——基於遠端程序呼叫實現Ajax

來源:互聯網
上載者:User

標籤:dwr.xml   oct   處理   跳轉   實現   函數   ice   js函數   傳回值   

轉載請註明原文地址: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(依賴包);

(2)在web.xml中配置DWR組件,DWR相當於是一個servlet;

 

    <servlet>        <servlet-name>dwr</servlet-name>        <servlet-class>            org.directwebremoting.servlet.DwrServlet        </servlet-class>     </servlet>        <servlet-mapping>        <servlet-name>dwr</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>                <!-- 實體類的轉換:把一個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)在前端頁面代碼中匯入DWR的JS引擎以及上面dwr.xml中AjaxService轉換得到的JS函數檔案,就可在js中通過轉換後的函數名直接調用方法了。

    <!-- 匯入dwr的JS引擎與JS檔案 -->    <script type="text/javascript" src="dwr/interface/_AjaxService_js.js"></script>    <script type="text/javascript" src="dwr/engine.js"></script>    <script type="text/javascript" src="dwr/util.js"></script>    

 

四:頁面中調用轉換後方法:傳參與回調

1:傳參調用:通過  轉換後對象名.方法名(參數列表,回呼函數名)   的格式進行函數調用

AjaxService_js.ajax(parameters,callback);

 

2:回調接收結果:定義回呼函數,回呼函數的形參接收上面函數調用的傳回值

function callback(data){

//data就是函數調用傳回值,進行處理。在JS中,函數的形參變數是根據實際值來決定類型的,所以這裡的data可以接收返回的普通類型、JavaBean、集合類等 }

 

 

    

DWR組件——基於遠端程序呼叫實現Ajax

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.