標籤: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