【軟件工程】DWR入門教程_第1頁
【軟件工程】DWR入門教程_第2頁
【軟件工程】DWR入門教程_第3頁
【軟件工程】DWR入門教程_第4頁
【軟件工程】DWR入門教程_第5頁
已閱讀5頁,還剩58頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、如何開始用用DWR有兩種方法法開始DWWR,簡單單的方式是是下載WAAR文件然然后看看。但是這不不能幫你知知道如何輕輕松的把DDWR整合合到你的wweb應(yīng)用用中,所以以還是推薦薦你按照下下面的3個(gè)個(gè)步驟做:1. 安裝裝DWR的的Jar包包下載dwrr.jarr文件。把把它放到你你的webbapp的的WEB-INF/lib目目錄下。那那里可能已已經(jīng)有很多多其他的jjar文件件了。2. 編輯輯配置文件件需要把下面面的代碼加加到WEBB-INFF/webb.xmll文件中。那部分分需要和其其他的在在一起,部分也一一樣。 ddwr-iinvokker DDWR SServllet uk.lltd.gg

2、etahhead.dwr.DWRSServllet debuug truue ddwr-iinvokker /ddwr/*在WEB-INF目目錄下的wweb.xxml旁邊邊創(chuàng)建一個(gè)個(gè)dwr.xml文文件。可以以從最簡單單的配置開開始: DWR配置置文件定義義了那些DDWR會(huì)創(chuàng)創(chuàng)建提供遠(yuǎn)遠(yuǎn)程調(diào)用的的Javaascriipt類。在上面的的例子中我我們定義了了兩個(gè)類來來提供遠(yuǎn)程程調(diào)用,并并為其提供供的Javvascrript類類的名字。在上面我們們使用了nnew創(chuàng)建建器,它會(huì)會(huì)調(diào)用沒有有參數(shù)的構(gòu)構(gòu)造函數(shù)來來創(chuàng)建實(shí)例例,但是所所有JavvaBeaan必須有有這一構(gòu)造造函數(shù)。還還要注意DDWR有一一些限

3、制:不要出現(xiàn)JJavasscrippt保留關(guān)關(guān)鍵字;和和保留關(guān)鍵鍵字同名的的函數(shù)指定定被排除。多數(shù)Jaavasccriptt的關(guān)鍵字字和Javva是相同同的。所以以你不可能能有一個(gè)方方法叫做try()。但但是該死deleete()對(duì)與JJavasscrippt有著特特殊意義,而而對(duì)Javva則不是是。 Javasscrippt方法重重載是不支支持的,所所以盡量不不要再Jaava中使使用。 3. 訪問問下面的UURLhttp:/loocalhhost:80800/YOOUR-WWEBAPPP/ddwr/你可以看見見一個(gè)頁面面,里面有有第二步中中的類。接接著往里點(diǎn)點(diǎn),你會(huì)看看到所有可可以調(diào)用的的方

4、法列表表。這個(gè)頁頁面是動(dòng)態(tài)態(tài)生成用來來測(cè)試的例例子。自己動(dòng)手試試一下!怎么在你的的web應(yīng)應(yīng)用中使用用在文檔中有有很多例子子演示如何何動(dòng)態(tài)更改改頁面中的的文字、更更新列表、操作表單單,還有直直接更改ttablee中的內(nèi)容容。每一個(gè)個(gè)都有如何何實(shí)現(xiàn)的介介紹。另一種方式式是看剛才才的頁面中中提供的代代碼:到 htttp:/locaalhosst:80080/YOUUR-WEEBAPPP/ddwr/ 頁面,點(diǎn)點(diǎn)擊你的類類。查看源源碼,找到到執(zhí)行方法法的那幾行行,把那些些文字粘貼貼到你的HHTML或或JSP中中。要包括下面面這些能產(chǎn)產(chǎn)生神奇效效果的Jaavasccriptt文件的鏈鏈接。你也可以把把其

5、中/YOURR-WEBBAPP/替換成成你的weeb頁面的的相對(duì)路徑徑。DWR根據(jù)據(jù)dwr.xml生生成和Jaava代碼碼類似的JJavasscrippt代碼。相對(duì)而言JJava同同步調(diào)用,創(chuàng)創(chuàng)建與Jaava代碼碼匹配的AAjax遠(yuǎn)遠(yuǎn)程調(diào)用接接口的最大大挑戰(zhàn)來至至與實(shí)現(xiàn)AAjax的的異步調(diào)用用特性。DWR通過過引入回調(diào)調(diào)函數(shù)來解解決這個(gè)問問題,當(dāng)結(jié)結(jié)果被返回回時(shí),DWWR會(huì)調(diào)用用這個(gè)函數(shù)數(shù)。有兩種推薦薦的方式來來使用DWWR實(shí)現(xiàn)遠(yuǎn)遠(yuǎn)程方法調(diào)調(diào)用??梢砸酝ㄟ^把回回調(diào)函數(shù)放放在參數(shù)列列表里,也也可以把回回調(diào)函數(shù)放放到元數(shù)據(jù)據(jù)對(duì)象里。當(dāng)然也可以以把回調(diào)函函數(shù)做為第第一個(gè)參數(shù)數(shù),但是不不建議使用用這種

6、方法法。因?yàn)檫@這種方法在在處理 HYPERLINK /display/dwrcn/Accessing+Servlet+Objects o Accessing Servlet Objects 自動(dòng)動(dòng)處理htttp對(duì)象象時(shí)(查看看Altternaativee Metthod)上會(huì)有有問題。這這個(gè)方法主主要是為向向下兼容而而存在的。簡單的回調(diào)調(diào)函數(shù)假設(shè)你有一一個(gè)這樣的的Javaa方法:publiic cllass Remoote ppubliic Striing ggetDaata(iint iindexx) . 我們可以在在Javaascriipt中這這樣使用: .functtion handdl

7、eGeetDatta(sttr) aleert(sstr);Remotte.geetDatta(422, haandleeGetDData);42是Jaava方法法getDData()的一個(gè)個(gè)參數(shù)。此外你也可可以使用這這種減縮格格式:Remotte.geetDatta(422, fuunctiion(sstr) allert(str); );調(diào)用元數(shù)據(jù)據(jù)對(duì)象(MMeta-Dataa)另外一種語語法時(shí)使用用調(diào)用元元數(shù)據(jù)對(duì)象象來指定定回調(diào)函數(shù)數(shù)和其他的的選項(xiàng)。上上面的例子子可以寫成成這樣:Remotte.geetDatta(422, calllbacck:fuunctiion(sstr) alle

8、rt(str); );這種方法有有很多優(yōu)點(diǎn)點(diǎn):易于閱閱讀,更重重要的指定定額外的調(diào)調(diào)用選項(xiàng)。超時(shí)和錯(cuò)誤誤處理在回調(diào)函數(shù)數(shù)的元數(shù)據(jù)據(jù)中你可以以指定超時(shí)時(shí)和錯(cuò)誤的的處理方式式。例如:Remotte.geetDatta(422, calllbacck:fuunctiion(sstr) allert(str); , timmeoutt:50000, errrorHaandleer:fuunctiion(mmessaage) allert(Oopps: + mmessaage); );查找回調(diào)函函數(shù)有些情況下下我們很難難區(qū)分各種種回調(diào)選項(xiàng)項(xiàng)(記住,JJavasscrippt是不支支持函數(shù)重重載的)。例如

9、:Remotte.meethodd( ttimeoout:33 , errrorHHandller:ssomeffunc );這兩個(gè)參數(shù)數(shù)之一是bbean的的參數(shù),另另一個(gè)是元元數(shù)據(jù)對(duì)象象,但是我我們不能清清楚的告訴訴DWR哪哪個(gè)是哪個(gè)個(gè)。為了可可以跨瀏覽覽器,我們們假定nuull = unndefiined。 所以當(dāng)當(dāng)前的情況況,規(guī)則是是:如果第一個(gè)個(gè)或最后一一個(gè)是一個(gè)個(gè)函數(shù),那那么它就是是回調(diào)函數(shù)數(shù),沒有元元數(shù)據(jù)對(duì)象象,并且其其他參數(shù)都都是Javva的方法法參數(shù)。 另外,如果果最后一個(gè)個(gè)參數(shù)是一一個(gè)對(duì)象,這這個(gè)對(duì)象中中有一個(gè)ccallbback成成員,并且且它是個(gè)函函數(shù),那么么這個(gè)對(duì)象象就

10、是元數(shù)數(shù)據(jù)對(duì)象,其其他的都是是Javaa方法參數(shù)數(shù)。 另外,如果果第一個(gè)參參數(shù)是 nnull ,我們就就假設(shè)沒有有回調(diào)函數(shù)數(shù),并且其其他的都是是Javaa方法參數(shù)數(shù)。盡管如如此,我們們會(huì)檢查最最后一個(gè)參參數(shù)是不是是nulll,如果是是就發(fā)出警警告。 最后如果最最后一個(gè)參參數(shù)是nuull,那那么就沒有有calllbackk函數(shù)。 另外,發(fā)出出錯(cuò)誤信號(hào)號(hào)是個(gè)糟糕糕的請(qǐng)求格格式。 創(chuàng)造一個(gè)與與Javaa對(duì)象匹配配的Javvascrript對(duì)對(duì)象假設(shè)你有這這樣的Jaava方法法:publiic cllass Remoote pubblic voidd settPersson(PPersoon p) t

11、this.persson = p; Persoon對(duì)象的的結(jié)構(gòu)是這這樣的:publiic Peersonn priivatee Striing nname; priivatee int aage; priivatee Datte appoointmmentss; / gettters and settters .那么你可以以在Javvascrript中中這樣寫:var pp = namme:FFred Blogggs, agee:42, apppointtmentts: new DDate(), nnew DDate(1 JJan 22008) ;Remotte.seetPerrson(p);

12、在Javaascriipt沒有有出現(xiàn)的字字段,在JJava中中就不會(huì)被被設(shè)置。因?yàn)閟ettter都都是返回voidd,我們們就不需要要使用caallbaack函數(shù)數(shù)了。如果果你想要一一個(gè)返回vvoid的的服務(wù)端方方法的完整整版,你也也可以加上上calllbackk函數(shù)。很很明顯DWWR不會(huì)向向它傳遞任任何參數(shù)。TranssformmerFaactorryConnfiguuratiionErrror這個(gè)問題的的現(xiàn)象是在在啟動(dòng)有DDWR的WWeb應(yīng)用用時(shí)出現(xiàn)如如下staack ttracee:root caussejavaxx.xmll.traansfoorm.TTranssformmerFaac

13、torryConnfiguuratiionErrror: Proovideer orrg.appachee.xallan.pproceessorr.TraansfoormerrFacttoryIImpl not founnd jaavax.xml.trannsforrm.TrransfformeerFacctoryy.newwInsttancee(Unkknownn Souurce)這個(gè)問題和和DWR沒沒有什么關(guān)關(guān)系,那是是因?yàn)門oomcatt沒有配置置好。比較較簡單的解解決辦法是是下載Xaalan替替換掉$TTOMCAAT-HOOME/ccommoon/liib目錄下下的xallan.jja

14、r文件件。DWRR2.0能能更好的處處理這個(gè)問問題,但是是本質(zhì)的問問題還是因因?yàn)镈WRR的XMLL序列化需需要有XSSLT解析析器的支持持。如果你用JJDK5還還是有這個(gè)個(gè)問題的話話,你可以以增加以下下VM參數(shù)數(shù)來使Toomcatt正常工作作。-Djavvax.xxml.ttranssformm.TraansfoormerrFacttory= coom.suun.orrg.appachee.xallan.iinterrnal.xslttc.trrax.TTranssformmerFaactorryImpplXML解析析錯(cuò)誤在剛開始用用DWR的的時(shí)候經(jīng)常常遇到的一一個(gè)錯(cuò)誤就就是XMLL解析錯(cuò)誤誤

15、。其實(shí)這這和DWRR沒有多大大關(guān)系,主主要是因?yàn)闉門omccat里面面自帶的XXercees的問題題,要不是是該有的時(shí)時(shí)候沒有,要要不是不該該有的時(shí)候候有了。JDK 11.3自身身沒有XMML解析器器,所以你你需要xeercessImpll.jarr和xmll-apiis.jaar. JDK 11.4.00 和 JJDK 11.4.11 雖然有有了XMLL解析器,但但是有很多多bug,所所以你還是是需要把xxerceesImppl.jaar放到ttomcaatcoommonnenddorseed目錄下下。 JDK 11.4.22和JDKK 5自帶帶的XMLL解析器工工作的很好好,你就不不需要再

16、加加其他的了了。另外要要提的一點(diǎn)點(diǎn)是,不同同版本的TTomcaat需要的的XML解解析器不一一樣。所以以要注意檢檢查它和JJDK的版版本兼容性性。 用BEA Webllogicc的Claasspaath問題題Webloogic 8.1(有可能其其他版本同同樣)可能能找不到DDWR的類類。這大多出現(xiàn)現(xiàn)在dwrr.jarr放在APPP-INNF目錄下下(APPP_INFF/libb)的情況況。在這種種情況下DDWR依然然可以工作作,例如ddebugg頁面可以以看見,但但是DWRR找不到你你的類。解決辦法是是把dwrr.jarr放到WEEB-INNF/liib目錄下下。沒有coookiess的情況下

17、下用DWRR當(dāng)不能用ccookiies時(shí),sservllet規(guī)范范通過URRL重寫來來支持HtttpSeessioon。DWWR 2.x通過它它生成的UURL來支支持這項(xiàng)功功能。但是是DWR 1.x沒沒有這個(gè)功功能。你可可以通過以以下辦法讓讓DWR 1.x 也支持ccookiies:從dwr.jar中中提取ennginee.js,保保存到你的的文件系統(tǒng)統(tǒng)中,就像像jsp文文件一樣. 修改DWWREnggine._senndDatta = funcctionn(battch) 方法, 加入一一行: statssInfoo += ;jssessiionidd= + 這樣就可以以讓DWRR 1.xx

18、支持urrl重寫了了。DWRR 2+默默認(rèn)支持。傳遞額外的的數(shù)據(jù)到ccallbback函函數(shù) 通常我們需需要傳遞額額外的數(shù)據(jù)據(jù)到calllbacck函數(shù),但但是因?yàn)樗械幕卣{(diào)調(diào)函數(shù)都只只有一個(gè)參參數(shù)(遠(yuǎn)程程方法的返返回結(jié)果),這就需需要一些小小技巧了。 解決方案就就是使用JJavasscrippt的閉包包特性。 例如,你的的回調(diào)函數(shù)數(shù)原本需要要像這個(gè)樣樣子: functtion calllbackkFuncc(dattaFroomSerrver, dattaFroomBroowserr) / 用ddataFFromSServeer和daataFrromBrrowseer做些事事情 那么你可以

19、以像這個(gè)組組織你的函函數(shù): var ddataFFromBBrowsser = ; / 定義義一個(gè)閉包包函數(shù)來存存儲(chǔ)dattaFroomBroowserr的引用,并并調(diào)用daataFrromSeerverr var ccallbbackPProxyy = ffuncttion(dataaFrommServver) callbbackFFunc(dataaFrommServver, dataaFrommBrowwser); ; var ccallMMetaDData = calllbackk:calllbacckProoxy ; Remotte.meethodd(parrams, calllMe

20、ttaDatta);(調(diào)用元數(shù)數(shù)據(jù)在 HYPERLINK /display/dwrcn/Scripting+Introduction o Scripting Introduction 腳本本介紹中有有解釋) 換句話說,現(xiàn)現(xiàn)在你作為為calllbackk函數(shù)傳遞遞過來的不不是一個(gè)真真正的caallbaack,他他只是一個(gè)個(gè)做為代理理的閉包,用用來傳遞客客戶端的數(shù)數(shù)據(jù)。 你可以用更更簡介的形形式: var ddataFFromBBrowsser = ; Remotte.meethodd(parrams, callbback:funcctionn(dattaFroomSerrver) callbba

21、ckFFunc(dataaFrommServver, dataaFrommBrowwser); );服務(wù)器性能能優(yōu)化CPU瓶頸頸:經(jīng)過嚴(yán)嚴(yán)格的測(cè)試試DWR的的性能沒什什么問題。DWR上上性能消耗耗同webb服務(wù)器和和網(wǎng)絡(luò)比起起來可以忽忽略不計(jì)。如果你真真的需要提提升DWRR的性能的的話,可以以把logg級(jí)別設(shè)置置ERROOR或FAATAL,但但是主要還還是要看你你的編碼情情況。Netwoork瓶頸頸: DWWR沒有管管理你的瀏瀏覽器緩存存的功能,所所以它會(huì)不不斷的重復(fù)復(fù)讀取DWWR的jaavasccriptt文件。這這里有一個(gè)個(gè)簡單的解解決辦法,把把javaascriipt文件件復(fù)制到你你的w

22、ebb-appp中,這樣樣web服服務(wù)器就可可以更好的的利用它了了。你也可可以考慮把把所有的jjavasscrippt文件合合并成一個(gè)個(gè)文件,然然后用DOOJO的壓壓縮程序處處理一個(gè)來來節(jié)省流量量。我們可以做做一個(gè)補(bǔ)丁丁,讓DWWR在weeb-appp啟動(dòng)的的時(shí)候用時(shí)時(shí)間做為jjavasscrippt文件的的時(shí)間戳,但但是這個(gè)并并不十分重重要,因?yàn)闉樯厦娴难a(bǔ)補(bǔ)丁太簡單單了而且可可以壓縮合合并Javvascrript文文件。WEB-IINF/wweb.xxml 參參考手冊(cè)在web.xml中中最簡單的的配置就是是簡單加入入DWR的的servvlet,沒沒有這個(gè)配配置DWRR就不會(huì)起起作用: ddw

23、r-iinvokker uk.lltd.ggetahhead.dwr.DWRSServllet ddwr-iinvokker /ddwr/*此外還可以以加入一些些重要和有有用的參數(shù)數(shù)。Loggiing DWR可以以工作在JJDK1.3上,而而JDK11.3不支支持javva.uttil.lloggiing,但但是我們想想強(qiáng)迫任何何人使用ccommoons-lloggiing或者者log44j,所以以當(dāng)沒有l(wèi)loggiing類的的時(shí)候DWWR就使用用HttppServvlet.log()方法。盡管如此此,如果DDWR發(fā)現(xiàn)現(xiàn)了commmonss-logggingg,就是使使用它。 Commoons

24、-LLoggiing 幾乎每一個(gè)個(gè)人都在使使用commmonss-logggingg,因?yàn)榇蟠蠖鄶?shù)的sservllet容器器在使用它它。所以如如果你的wweb應(yīng)用用中沒有明明顯的加入入commmons-loggging包包,它也會(huì)會(huì)默認(rèn)的配配置好。 在這種情況況下,loogginng是由jjava.utill.logggingg或者logg4j配置置文件控制制的。詳細(xì)細(xì)配置查看看文檔。 HttpSServllet.llog() 如果你用HHttpSServllet.llog(), 下面面的配置控控制logggingg: llogLeevel DEBUUG 可用的值有有:FATTAL, ERRO

25、OR, WWARN (默認(rèn)), INNFO 和和 DEBBUG。 多個(gè)dwrr.xmll文件 和和 J2EEE安全 一般來說,你你只需要一一個(gè)dwrr.xmll文件,并并且放置在在默認(rèn)的位位置:WEEB-INNF/dwwr.xmml。 如如果那樣的的話,你可可以不用了了解下面的的配置。 有三個(gè)原因因使你希望望指定不同同位置的ddwr.xxml文件件。 你希望讓ddwr.xxml文件件和它能訪訪問到的資資源在一起起。在這種種情況下你你需要一個(gè)個(gè)這樣的配配置: WEB-INF/classses/com/yourrco/ddwr/ddwr.xxml 。 你有大量的的遠(yuǎn)程調(diào)用用類,希望望把他們分分成多

26、個(gè)文文件。在這這種情況下下你需要重重復(fù)下面的的配置幾次次,每一個(gè)個(gè)中有不同同的 paaram-namee,并且以以 &appos;cconfiig&appos; 開頭。DDWR會(huì)依依次把他們們都讀進(jìn)來來。 DWR可以以使用Seervleet規(guī)范的的J2EEE的URLL安全機(jī)制制來給不同同的用戶不不同的訪問問權(quán)限。你你只需要簡簡單的定義義多個(gè)dwwr seervleet,并且且制定不同同的名字,uurl和訪訪問權(quán)限。 如果你希望望使用這一一功能,那那么語法是是這樣的: cconfiig* WEB-INF/dwr.xml Whatt connfig filee do we uuse? 在這里coo

27、nfigg*意思是是paraam-naame要以以字符串cconfiig開頭。這個(gè)參數(shù)數(shù)可以根據(jù)據(jù)需要使用用多次,但但是不能相相同。 一個(gè)使用JJ2EE的的安全機(jī)制制的例子: dwrr-useer-innvokeer ukk.ltdd.gettaheaad.dwwr.DWWRSerrvlett cconfiig-usser WEB-INF/dwr-userr.xmll dwrr-admmin-iinvokker ukk.ltdd.gettaheaad.dwwr.DWWRSerrvlett cconfiig-addmin WEB-INF/dwr-admiin.xmml dwrr-admmin-i

28、invokker /dwrradmiin/* dwrr-useer-innvokeer /dwrruserr/* dwrr-admmin dwwr-addmin-colllectiion /dwrradmiin/* addmin dwrr-useer dwwr-usser-ccolleectioon /dwrruserr/* usser 使用插件(Plugg-in) DWR里的的很多部件件都是可插插入的,所所以可以通通過替換掉掉DWR的的默認(rèn)實(shí)現(xiàn)現(xiàn)類來改變變其功能。你可以在在 中的的 parram-nname 中指定你你要替換的的接口,并并在 paaram-valuue 中指指定自己的的接口實(shí)

29、現(xiàn)現(xiàn)類。 可插入點(diǎn)是是: uk.lttd.geetaheead.ddwr.AAccesssConntroll uk.lttd.geetaheead.ddwr.CConfiiguraationn uk.lttd.geetaheead.ddwr.CConveerterrManaager uk.lttd.geetaheead.ddwr.CCreattorMaanageer uk.lttd.geetaheead.ddwr.PProceessorr uk.lttd.geetaheead.ddwr.EExecuutionnConttext 這些可插入入點(diǎn)默認(rèn)的的實(shí)現(xiàn)都在在uk.lltd.ggetahhea

30、d.dwr.impll中。 使用debbug/ttest模模式 你可以通過過下面的參參數(shù)讓DWWR進(jìn)入ddebugg/tesst模式: ddebugg truee 在debuug模式里里,DWRR會(huì)為每一一個(gè)遠(yuǎn)程調(diào)調(diào)用類生成成一個(gè)測(cè)試試頁面。這這對(duì)于檢查查DWR是是否工作和和工作的怎怎么樣是很很有用的。這個(gè)模式式還可以警警告你一些些存在的問問題:jaavasccriptt保留字問問題,或者者函數(shù)重載載問題。 盡管如此,這這個(gè)模式不不應(yīng)該使用用在實(shí)際部部署環(huán)境里里面,因?yàn)闉樗梢詾闉楣粽咛崽峁┠愕姆?wù)的大量量信息。如如果你的網(wǎng)網(wǎng)站設(shè)計(jì)的的好的話,這這些信息不不會(huì)幫助攻攻擊者窺視視你的網(wǎng)站站內(nèi)

31、容,但但是還是不不要給任何何人一個(gè)找找到你錯(cuò)誤誤的機(jī)會(huì)好好。 DWR就是是照上面的的樣子做的的,沒有任任何保證,所所以你的網(wǎng)網(wǎng)站的安全全是你的責(zé)責(zé)任。請(qǐng)小小心。配置DWRR - ddwr.xxmldwr.xxml是DDWR的配配置文件。默認(rèn)情況況下,應(yīng)該該把它放到到WEB-INF目目錄(weeb.xmml的目錄錄)下。DTD這里還有一一個(gè)dwrr.xmll對(duì)應(yīng)的DDTD文檔檔以及一個(gè)個(gè)用DTDDDoc生生成的參考考手冊(cè)。創(chuàng)建dwrr.xmll文件dwr.xxml文件件的結(jié)構(gòu)如如下: 術(shù)語這里是一些些必須理解解的術(shù)語 - 參數(shù)數(shù)會(huì)被coonverrted,遠(yuǎn)遠(yuǎn)程Beaan會(huì)被ccreatted。

32、所所以如果你你有一個(gè)叫叫A的beean,它它有一個(gè)方方法叫A.blahh(B) 那么你需需要一個(gè)AA的creeatorr和一個(gè)BB的connvertter。alloww段落里面面定義的試試DWR可可以創(chuàng)建和和轉(zhuǎn)換的類類。Creattors我們要調(diào)用用的每個(gè)類類都需要一一個(gè)定義。creaator有有幾種。比比較通用的的是neww關(guān)鍵字和和Spriing。更更多的信息息可以參見見Creeaterrs文檔檔。Conveerterrs我們必須保保證所有的的參數(shù)都可可以被轉(zhuǎn)換換。JDKK中的多數(shù)數(shù)類型已經(jīng)經(jīng)有轉(zhuǎn)換器器了,但是是你需要給給DWR轉(zhuǎn)轉(zhuǎn)換你的代代碼的權(quán)利利。一般來來說JavvaBeaan的參數(shù)

33、數(shù)需要一個(gè)個(gè)定義。默認(rèn)情況下下,如下類類型不需要要定義就可可以轉(zhuǎn)換:所有的原生生類型 bbooleean,iint,ddoublle, 等等等 原生類型的的對(duì)象類型型 Boooleann,Inttegerr,等等 java.langg.Strring java.utill.Datte 和SSQL中的的Datee 以上類型組組成的數(shù)組組 以上類型的的集合類型型 (Liists, Setts, MMaps, Iteeratoors, 等) 從DOM, XOMM, JDDOM 和和 DOMM4J中的的DOM對(duì)對(duì)象 (類類似 Ellemennt 和 Docuumentt) 要了解如何何轉(zhuǎn)換你的的Jav

34、aaBeann或者其他他類型的參參數(shù)請(qǐng)查看看 HYPERLINK /display/dwrcn/Converters o Converters Convverteers文檔檔。可選的innit部分分用來聲明明創(chuàng)造beean的類類和轉(zhuǎn)換bbean的的類。多數(shù)數(shù)情況下你你不需要用用到他們。如果你需需要定義一一個(gè)新的CCreattor JavaaDoc 和 CConveerterr JaavaDooc , 那么你就就需要在這這里定義他他們。但是是建議你現(xiàn)現(xiàn)檢查一下下DWR是是不是已經(jīng)經(jīng)支持了。在initt部分里有有了定義只只是告訴DDWR這些些擴(kuò)展類的的存在,給給出了如何何使用的信信息。這時(shí)時(shí)他們還

35、沒沒有被使用用。這中方方式很像JJava中中的impport語語句。多數(shù)數(shù)類需要在在使用前先先impoort一下下,但是只只有impport語語句并不表表明這個(gè)類類已經(jīng)被使使用了。每每一個(gè)crreatoor和coonverrter都都用id屬屬性,以便便后面使用用。DWR使用用反射來找找出在轉(zhuǎn)換換時(shí)應(yīng)該用用那種類型型。有時(shí)類類型信息并并不明確,這這時(shí)你可以以在這里寫寫下方法的的簽名來明明確類型。詳細(xì)信息息查看 HYPERLINK /display/dwrcn/Signatures o Signatures Siignatturess部分。多個(gè)dwrr.xmll文件可以有多個(gè)個(gè)dwr.xml文文

36、件(詳細(xì)細(xì)信息見 HYPERLINK /display/dwrcn/WEB-INF+Configuration o WEB-INF Configuration wweb.xxml文檔檔)。每個(gè)個(gè)文件中的的定義會(huì)被被加在一起起。DWRR用這個(gè)功功能來加載載基礎(chǔ)配置置文件。我我們可以看看看標(biāo)準(zhǔn)被被配置文件件來了解ddwr.xxml的內(nèi)內(nèi)容。轉(zhuǎn)換器轉(zhuǎn)換器在客客戶端和服服務(wù)器之間間轉(zhuǎn)換數(shù)據(jù)據(jù).下面這些轉(zhuǎn)轉(zhuǎn)換器有單單獨(dú)章節(jié)介介紹 HYPERLINK /display/dwrcn/Array+Converter o Array Converter Arrayy Connvertter HYPERLINK

37、/display/dwrcn/Bean+and+Object+Converters o Bean and Object Converters Bean and Objeect CConveerterrs HYPERLINK /display/dwrcn/Collection+Converter o Collection Converter Colleectioon Coonverrter HYPERLINK /display/dwrcn/Enum+Converter o Enum Converter Enum Convverteer HYPERLINK /display/dwrcn/DOM+O

38、bjects o DOM Objects DOM OObjeccts HYPERLINK /display/dwrcn/Hibernate+Integration o Hibernate Integration Hiberrnatee整合 HYPERLINK /display/dwrcn/Accessing+Servlet+Objects o Accessing Servlet Objects Servllet OObjeccts (HttppServvletRRequeest, HttppSesssion, etcc) 基礎(chǔ)的轉(zhuǎn)換換器原生類型,SStrinng,像BBigDeecimaal這

39、樣的的簡單對(duì)象象的轉(zhuǎn)換器器已經(jīng)有了了。你不需需要在dwwr.xmml中部分的的中定義義。它們默默認(rèn)支持。默認(rèn)支持的的類型包括括: boooleaan, bbyte, shoort, int, lonng, ffloatt, dooublee, chhar, javaa.lanng.Boooleaan, jjava.langg.Bytte, jjava.langg.Shoort, javaa.lanng.Inntegeer, jjava.langg.Lonng, jjava.langg.Flooat, javaa.lanng.Dooublee, jaava.llang.Charracteer,

40、jjava.mathh.BiggInteeger, javva.maath.BBigDeecimaal 和 javaa.lanng.SttringgDate轉(zhuǎn)轉(zhuǎn)換器Date轉(zhuǎn)轉(zhuǎn)換器負(fù)責(zé)責(zé)在Javvascrript的的Datee類型與JJava中中的Datte類型(javaa.utiil.Daate, javaa.sqll.Datte, jjava.sql.Timees orr javva.sqql.Tiimesttamp)之間進(jìn)行行轉(zhuǎn)換。同同基礎(chǔ)的轉(zhuǎn)轉(zhuǎn)換器一樣樣,DatteConnvertter默認(rèn)認(rèn)是支持的的。如果你有一一個(gè)Javvascrript的的字符串 (例如01 JJan 22010

41、) ,你你想把它轉(zhuǎn)轉(zhuǎn)換成Jaava的DDate類類型有兩個(gè)個(gè)辦法:在在javaascriipt中用用Datee.parrse()把它解析析成Datte類型,然然后用DWWR的DaateCoonverrter傳傳遞給服務(wù)務(wù)器;或者者把它作為為字符串傳傳遞給Seerverr,再用JJava中中的SimmpleDDateFFormaat(或者者類似的)來解析。同樣,如果果你有個(gè)JJava的的Datee類型并且且希望在HHTML使使用它。你你可以先用用SimppleDaateFoormatt把它轉(zhuǎn)換換成字符串串再使用。也可以直直接傳Daate給JJavasscrippt,然后后用Javvascrrip

42、t格格式化。第第一種方式式簡單一些些,盡管浪浪費(fèi)了你的的轉(zhuǎn)換器,而而且這樣做做也會(huì)是瀏瀏覽器上的的顯示邏輯輯受到限制制。其實(shí)后后面的方法法更好,也也有一些工工具可以幫幫你,例如如:The JJavasscrippt Tooolboox Daate fformaatterr Web DDevelloperrs Nootes on DDate formmattiing 其他對(duì)象其實(shí)創(chuàng)建自自己的轉(zhuǎn)換換器也很簡簡單。Coonverrter接接口的Jaavadooc包含了了信息。其其實(shí)這種需需要很少出出現(xiàn)。在你你寫自己的的Convverteer之前先先看看BeeanCoonverrter,它它有可能就就

43、是你要的的。The CCreattors 創(chuàng)造造器dwr.xxml文件件中的crreatee元素的結(jié)結(jié)構(gòu)如下: 這里的多數(shù)數(shù)元素都是是可選的 - 你真真正必須知知道的是指指定一個(gè)ccreattor和一一個(gè)javvascrript名名字。creattor屬性性 是必須須的 - 它用來指指定使用那那種創(chuàng)造器器。默認(rèn)情況下下DWR11.1有88種創(chuàng)造器器。它們是是: HYPERLINK /display/dwrcn/New+Creator o New Creator new: 用Javva的neew關(guān)鍵字字創(chuàng)造對(duì)象象。 HYPERLINK /display/dwrcn/Creators#Creato

44、rs-NoneCreator#Creators-NoneCreator l Creators-NoneCreator#Creators-NoneCreator o None Creator on Creators none: 它不創(chuàng)創(chuàng)建對(duì)象,看看下面的原原因。 (v1.11+) HYPERLINK /display/dwrcn/Scripted+Creator o Scripted Creator scrippted: 通過BBSF使用用腳本語言言創(chuàng)建對(duì)象象,例如BBeanSShelll或Grooovy。 HYPERLINK /display/dwrcn/Spring+Integration

45、o Spring Integration sprinng: 通通過Sprring框框架訪問BBean。 HYPERLINK /display/dwrcn/JSF+Integration o JSF Integration jsf: 使用JSSF的Beean。 (v1.1+) HYPERLINK /display/dwrcn/Struts+Integration o Struts Integration strutts: 使使用Strruts的的FormmBeann。 (vv1.1+) HYPERLINK /display/dwrcn/Beehive+Integration o Beehive

46、Integration pagefflow: 訪問BBeehiive或WWebloogic的的PageeFloww。 (vv1.1+) 如果你需要要寫自己的的創(chuàng)造器,你你必須在iinit部部分注冊(cè)它它。javasscrippt屬性 用于指定定瀏覽器中中這個(gè)被創(chuàng)創(chuàng)造出來的的對(duì)象的名名字。你不不能使用JJavasscrippt的關(guān)鍵鍵字。scopee屬性 非非常類似sservllet規(guī)范范中的sccope。 它允許許你指定這這個(gè)beaan在什么么生命范圍圍。選項(xiàng)有有appplicaationn, sesssion, rrequeest 和paage。這些值對(duì)對(duì)于Serrvlett和JSPP開發(fā)者來

47、來說應(yīng)該相相當(dāng)熟悉了了。scopee屬性是可可選的。默默認(rèn)是ppage。如果要要使用ssessiion需需要coookiess。當(dāng)前的的DWR不不支持ULLR重寫。paramm元素 被被用來指定定創(chuàng)造器的的其他參數(shù)數(shù),每種構(gòu)構(gòu)造器各有有不同。例例如,nnew創(chuàng)創(chuàng)造器需要要知道要?jiǎng)?chuàng)創(chuàng)建的對(duì)象象類型是什什么。每一一個(gè)創(chuàng)造器器的參數(shù)在在各自的文文檔中能找找到。請(qǐng)查查看上面的的鏈接。incluude和eexcluude元素素 允許創(chuàng)創(chuàng)造器來限限制類中方方法的訪問問。一個(gè)創(chuàng)創(chuàng)造器必須須指定inncludde列表或或excllude列列表之一。如果是iincluude列表表則暗示默默認(rèn)的訪問問策略是拒絕;

48、如果是eexcluude列表表則暗示默默認(rèn)的訪問問策略是允許。例如要拒絕絕防范除了了setWWibblle()以以外的所有有方法,你你應(yīng)該把如如下內(nèi)容添添加到dwwr.xmml中。 對(duì)于加入到到creaate元素素中的類的的所有方法法都是默認(rèn)認(rèn)可見的。auth元元素 允許許你指定一一個(gè)J2EEE的角色色作為將來來的訪問控控制檢查: nonee 創(chuàng)造造器nonee 創(chuàng)造造器不創(chuàng)建建任何對(duì)象象 - 它它會(huì)假設(shè)你你不需要?jiǎng)?chuàng)創(chuàng)建對(duì)象。這有可能能是對(duì)的,有有兩個(gè)原因因。你可能在使使用的sccope不不是paage(看上面),并在在在前面已經(jīng)經(jīng)把這個(gè)對(duì)對(duì)象創(chuàng)建到到這個(gè)sccope中中了,這時(shí)時(shí)你就不需需要

49、再創(chuàng)建建對(duì)象了。還有一種情情況是要調(diào)調(diào)用的方法法是靜態(tài)的的,這時(shí)也也不需要?jiǎng)?chuàng)創(chuàng)建對(duì)象。DWR會(huì)會(huì)在調(diào)用創(chuàng)創(chuàng)建器之前前先檢查一一下這個(gè)方方法是不是是靜態(tài)的。對(duì)于上訴兩兩種情況,你你仍然需要要classs參數(shù),用用來告訴DDWR它是是在操作的的對(duì)象類型型是什么。使用靜態(tài)方方法DWR會(huì)在在調(diào)用創(chuàng)建建器之前先先檢查一下下這個(gè)方法法是不是靜靜態(tài)的,如如果是那么么創(chuàng)造器不不會(huì)被調(diào)用用。很顯然然這個(gè)邏輯輯適用于所所有創(chuàng)造器器,盡管如如此nuull創(chuàng)創(chuàng)造器是最最容易配置置的。適用單例類類對(duì)于單例類類的創(chuàng)建,最最好適用BBeanSShelll和BSFF來實(shí)例化化對(duì)象。詳詳細(xì)信息參參見 HYPERLINK /di

50、splay/dwrcn/Scripted+Creator o Scripted Creator Sccriptted創(chuàng)創(chuàng)造器其他創(chuàng)造器器我么偶爾也也需要一些些新的創(chuàng)造造器,最常常見的是一一個(gè)EjbbCreaator。討論新的的創(chuàng)造器的的好地方是是在郵件列列表。DWR和HHttpSSessiionBiindinngLissteneersDWR1.x中存貯貯已經(jīng)創(chuàng)造造的Beaan的方法法需要注意意,它在每每次請(qǐng)求時(shí)時(shí)都會(huì)調(diào)用用相同的 setAAttriibutee() 方方法。就是是說,如果果一個(gè)Beean在ddwr.xxml中的的聲明周期期設(shè)置為ssessiion,再再每次調(diào)用用beann中的方

51、法法時(shí),DWWR都會(huì)執(zhí)執(zhí)行一次 sesssion.setAAttriibutee(youurBeaan) 。這看上去去沒有什么么危害,但但是如果你你要使用sservllet的事事件機(jī)制的的,就是說說用了HtttpSeessioonBinndinggListtenerr接口,你你就會(huì)發(fā)現(xiàn)現(xiàn)valuueBouund和vvalueeUnboound事事件在每次次調(diào)用時(shí)都都會(huì)發(fā)生,而而不是你想想像的在bbean被被創(chuàng)建時(shí)以以及sesssionn過期時(shí)。DWR2 只在第一一次創(chuàng)建對(duì)對(duì)象時(shí)調(diào)用用 settAttrributte() 。dwr.xxml中的的簽名(SSignaaturees)signaatu

52、rees段使DDWR能確確定集合中中存放的數(shù)數(shù)據(jù)類型。例如下面面的定義中中我們無法法知道liist中存存放的是什什么類型。publiic cllass Checck pubblic voidd settLottteryRResullts(LList nos) signaaturees段允許許我們暗示示DWR應(yīng)應(yīng)該用什么么類型去處處理。格式式對(duì)以了解解JDK55的泛型的的人來說很很容易理解解。 !CDATTA impport javaa.utiil.Liist; impport com.exammple.Checck; Cheeck.ssetLootterryRessultss(Lisst nn

53、os); DWR中又又一個(gè)解析析器專門來來做這件事事,所以即即便你的環(huán)環(huán)境時(shí)JDDK1.33 DWRR也能正常常工作。解析規(guī)則基基本上會(huì)和和你預(yù)想規(guī)規(guī)則的一樣樣(有兩個(gè)個(gè)例外),所所以javva.laang下面面的類型會(huì)會(huì)被默認(rèn)iimporrt。第一個(gè)是DDWR1.0中解析析器的buug,某些些環(huán)境下不不能返回正正確類型。所以你也也不用管它它了。第二個(gè)是這這個(gè)解析器器時(shí)陽光光(sunnny dday)解析器。就是說它它非常寬松松,不想編編譯器那樣樣嚴(yán)格的保保證你一定定正確。所所以有時(shí)它它也會(huì)允許許你丟失iimporrt: !CDATTA impport javaa.utiil.Liist; C

54、heeck.ssetLootterryRessultss(Lisst); 將來的DWWR版本會(huì)會(huì)使用一個(gè)個(gè)更正式的的解析器,這這個(gè)編譯器器會(huì)基于官官方Javva定義,所所以你最好好不要使用用太多這個(gè)個(gè)不嚴(yán)格的的東西。signaaturees段只是是用來確定定泛型參數(shù)數(shù)中的類型型參數(shù)。DDWR會(huì)自自己使用反反射機(jī)制或或者運(yùn)行時(shí)時(shí)類型確定定類型,或或者假設(shè)它它是一個(gè)SStrinng類型。所以:不需要siignatturess - 沒沒有泛型參參數(shù):publiic vooid mmethood(Sttringg p);publiic vooid mmethood(Sttringg pp);需要sig

55、gnatuures - DWWR不能通通過反射確確定:publiic vooid mmethood(Liist p);publiic vooid mmethood(Maap p);不需要siignatturess - DDWR能正正確的猜出出:publiic vooid mmethood(Liist pp);publiic vooid mmethood(Maap p);不需要siignatturess - DDWR可以以通過運(yùn)行行時(shí)類型確確定:publiic Liist metthod(Striing pp);沒有必要讓讓Javaascriipt中的的所有對(duì)象象的keyy都是Sttringg類

56、型 - 你可以以使用其他他類型作為為key。但是他們們?cè)谑褂弥皶?huì)被轉(zhuǎn)轉(zhuǎn)換成Sttringg類型。DDWR1.x用Jaavasccriptt的特性把把key轉(zhuǎn)轉(zhuǎn)換成Sttringg。DWRR2.0可可能會(huì)用ttoStrring()方法,在在服務(wù)段進(jìn)進(jìn)行這一轉(zhuǎn)轉(zhuǎn)換。enginne.jss Funnctioons enginne.jss對(duì)DWRR非常重要要,因?yàn)樗怯脕磙D(zhuǎn)轉(zhuǎn)換來至動(dòng)動(dòng)態(tài)生成的的接口的jjavasscrippt函數(shù)調(diào)調(diào)用的,所所以只要用用到DWRR的地方就就需要它。 The eenginne.jss fille 每一個(gè)頁面面都需要下下面這些語語句來引入入主DWRR引擎。 使用選項(xiàng)

57、 下面這些選選項(xiàng)可以通通過 DWWREnggine.setXX() 函函數(shù)來設(shè)置置全局屬性性。例如: DWREnnginee.settTimeeout(10000);或者在單次次調(diào)用級(jí)別別上(假設(shè)設(shè)Remoote被DDWR暴露露出來了): Remotte.siingleeMethhod(pparamms, callbback:funcctionn(datta) , timeoout:22000 );遠(yuǎn)程調(diào)用可可以 HYPERLINK /display/dwrcn/Call+Batching o Call Batching 批量執(zhí)執(zhí)行來減少少反應(yīng)時(shí)間間。enddBatcch 函數(shù)數(shù)中可以設(shè)設(shè)置選

58、項(xiàng)。 DWREnnginee.begginBaatch(); Remotte.meethoddInBaatch11(parrams, calllbacck1); Remotte.meethoddInBaatch22(parrams, calllbacck2); DWREnnginee.enddBatcch( timeoout:33000 );可以混合這這幾種方式式,那樣的的話單次調(diào)調(diào)用或者批批量調(diào)用級(jí)級(jí)別上的設(shè)設(shè)置可以復(fù)復(fù)寫全局設(shè)設(shè)置(就像像你希望的的那樣)。當(dāng)你在一一個(gè)批量處處理中多次次設(shè)置了某某個(gè)選項(xiàng),DDWR會(huì)保保留最后一一個(gè)。所以以如果 RRemotte.siingleeMethhod

59、() 例子在在batcch里面,DDWR會(huì)使使用30000ms做做為超時(shí)的的時(shí)間。 callbback和和exceeptioonHanndlerr兩個(gè)選項(xiàng)項(xiàng)只能在單單次調(diào)用中中使用,不不能用于批批量調(diào)用。 preHoook和ppostHHook選選項(xiàng)兩個(gè)選選項(xiàng)是可添添加的,就就是說你可可以為每一一次調(diào)用添添加多個(gè)hhook。全局的ppreHoook會(huì)在在批量調(diào)用用和單次調(diào)調(diào)用之前被被調(diào)用。同同樣全局的的posttHookk會(huì)在單次次調(diào)用和批批量調(diào)用之之后被調(diào)用用。 如果以上敘敘述讓你感感到混亂,不不用擔(dān)心。DWR的的的設(shè)計(jì)往往往和你想想象中的一一樣,所以以其實(shí)這些些并不復(fù)雜雜。 選項(xiàng)索引 下面

60、是可用用選項(xiàng)列表表。 OptioonGlobaalBatchhCallSummaary HYPERLINK /display/dwrcn/Remoting+Options o Remoting Options asyncc設(shè)置是否為為異步調(diào)用用,不推薦薦同步調(diào)用用headeers2.02.02.0在XHR調(diào)調(diào)用中加入入額外的頭頭信息parammeterrs2.02.02.0可以通過MMeta-dataarequuest.getPParammeterr()取得得的元數(shù)據(jù)據(jù) HYPERLINK /display/dwrcn/Remoting+Options o Remoting

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論