小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

ajax之旅--dwr探密

 iversion 2007-11-14

[DWR(Ajax)]ajax之旅--dwr探密 
軟件技術(shù)

lhwork 發(fā)表于 2006-10-17 14:00:23

ajax是Asynchronous JavaScript and XML的簡稱,是一種由javascript通過XmlHttpRequest與服務(wù)器交互更新數(shù)據(jù)的一種異步請求的技術(shù),因為通過ajax你只需傳遞需要更新的數(shù)據(jù),而不是整個頁面,能有效的減少頁面和服務(wù)器端的數(shù)據(jù)傳輸,通過javascript更新頁面時可以做到頁面不刷新,所以ajax很適合用于局部頻繁更新的頁面。

我一直都對ajax提不起興趣,理由很簡單,也很偏激:我是一個java狂熱者,并固執(zhí)的認為java最好的用途就是在中間件上,還有java代碼能帶給系統(tǒng)很好的重用性和可維護性。而ajax處理的方面卻是在最不被我看上的表示層上,而表示層一般都不被我系統(tǒng)的考慮范圍之內(nèi),覺得這是系統(tǒng)的外衣,是有可能要經(jīng)常變換的。所以縱是很早之前就已經(jīng)知道有ajax,但一直沒有更深的去了解它。

事實上在ajax 這個概念提出來之前,我們已經(jīng)在項目中采用了相同的技術(shù),我們大多的做法是通過增加一個隱含的iFrame,通過iFrame向服務(wù)器提交請求獲取數(shù)據(jù)和頁面進行交互,這完全的實現(xiàn)了ajax的功能,但這種做法很繁瑣,實現(xiàn)起來工作量也很大,而且在代碼上也會相當?shù)娜哂?,不怎么?yōu)美。而ajax的java 框架dwr使這一過程變得簡單,在此特別感謝Getahead IT咨詢公司的Joe Walker和他的團隊開發(fā)出DWR這樣神奇的工具并與大家分享它!

現(xiàn)在我們來看看dwr是怎么處理相應(yīng)的關(guān)系的

ajax是通過javascript向服務(wù)器發(fā)出請求來獲取相應(yīng)的數(shù)據(jù)的,所以首先,dwr需要你在web部署了一個servlet--DWRServlet,DWRServlet在初始化的時候會去讀dwr的發(fā)布文件/WEB-INF/dwr.xml

在解釋dwr.xml文件之前我們先來看看兩個重要的概念,creator和converter這兩個從它們的字面意義就很容易看出它們的作用
creator在dwr中主要的職責就是把用戶發(fā)布在dwr.xml中的class進行實例化,
converter的職責是在接受請求時把客戶端的javascript對象轉(zhuǎn)換成服務(wù)器端的java對象,通過調(diào)用發(fā)布的java bean后,在把返回的java的對象轉(zhuǎn)化成javascript的對象給客戶端調(diào)用

dwr.xml有兩個主要的元素:init,arrow
init是用來定義你可以使用的converter和creator它們都有一個id和class的屬性:id是一個標志可以在arrow元素中被引用于配置create和convert的,class是具體的類,的其定義樣式如下:
    <creator id="new" class="uk.ltd.getahead.dwr.create.NewCreator"/>
    <converter id="bean" class="uk.ltd.getahead.dwr.convert.BeanConverter"/>
arrow是用于定義你允許dwr創(chuàng)建和轉(zhuǎn)換的java bean,包含兩種類型:create和convert。其標簽樣式如下:
    <create creator="new" javascript="planApp">
      <param name="class" value="com.ionglobal.erp.app.PlanApp" />
    </create>
    <convert converter="servlet" match="javax.servlet.ServletConfig"/>

create就是配置哪些類是可以由dwr創(chuàng)建的,其包含creator,javascript,creator也是通過init元素進行定義的,creator還有一個javascript的屬性,其定義的值就是在javascript中對應(yīng)的對象名稱
convert就是配置哪些java bean是可以通過dwr轉(zhuǎn)換的,其包含converter,match屬性,coverter就是選擇轉(zhuǎn)換的converter由init中配置,match就是可以轉(zhuǎn)換的java bean

dwr 已經(jīng)為你提供了大量的creator和converter如:jsf,none,new,pageflow,spring,script,struts這幾種creator,和null,enum,primitive,bignumber,string,array,map,collection, date,dom,dom4j,jdom,xom,servlet,bean,object,hibernate這幾種convertor
如果你覺得dwr提供的creator和converter還不能滿足你的需求時還可以定制自己的creator和converter把它們部署到dwr.xml中,并把要發(fā)布的bean和method放到creators中,

如果你使用dwr的測試頁面,你還可以得到一個以你配置的js文件,js文件對你配置的creator和method進行了映射,其中的planApp是你發(fā)布的scriptName,get是發(fā)布調(diào)用的class方法,p0是方法傳入的參數(shù),callback是處理判斷成功的標志。
planApp.get = function(p0, callback) {
    DWREngine._execute(planApp._path, 'planApp', 'get', p0, callback);
}


現(xiàn)在我們看看dwr在頁面上怎樣跟服務(wù)器交互,dwr為我們提供了一個叫engine.js文件中定義一個DWREngine的javascript對象,其主要功能是處理頁面和servlet之間的數(shù)據(jù)傳遞和轉(zhuǎn)換。當中有三個函數(shù)需要特別的留意

1、_execute由界面的javascript調(diào)用根據(jù)傳入的參數(shù)進行一系列的初始化,并調(diào)用調(diào)用endBatch調(diào)用_sendData與服務(wù)器的servlet進行交互
其傳入的參數(shù)主要有
path——在/WEB-INF/web.xml配置的url-pattern,
scriptName——/WEB-INF/dwr.xml中creator的javascript的名稱,
methodName——creator的方法名,
vararg_params——傳進的值和一些控制參數(shù)

2、 _sendData dwr通過這個方法對傳入的參數(shù)生成與servlet進行交互的javascript語句,它做了很多的工作以保證你的提交是真正的有效,比如判斷客戶的瀏覽器是支持XMLHttpRequest還是支持ActiveXObject,如果兩種方式都不行它還會采取iFrame提交的方式與服務(wù)器進行交互獲取數(shù)據(jù)

3、_stateChange DWREngine在判斷數(shù)據(jù)傳輸完成之后,會根據(jù)返回的字符串構(gòu)造成一個對象 

你可以通過修改下面的javascript語句獲取返回的javascript對象和你的頁面進行交互顯示

<script type='text/javascript'>
    
var reply0 = function(data)
    
{
      
if (data != null && typeof data == 'object') alert(DWRUtil.toDescriptiveString(data, 2));
      
else DWRUtil.setValue('d0', DWRUtil.toDescriptiveString(data, 1));
    }

  
</script>

 在util.js文件定義了一個DWRUtil對象,里面主要有對select的處理和table的處理的方法,具體的使用就不在這里說明。


    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多