資源描述:
《GWT開發(fā)AJAX應(yīng)用程序教程》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、-一、引言 如果你是一個(gè)Java軟件和Ajax開發(fā)者,那么,GoogleWebToolkit(GWT)應(yīng)該已經(jīng)引起你的關(guān)注?! oogle公司已經(jīng)于2006年5月在Apache許可協(xié)議下發(fā)布了這種免費(fèi)的開發(fā)工具包。GWT的設(shè)計(jì)目的是為了簡化用Java語言開發(fā)Ajax應(yīng)用程序。Google初始發(fā)行的beta版本可以適用于Windows和Linux平臺(tái),并許諾稍后要發(fā)行一個(gè)MacOSX版本。 本文將探討在MacOSX上使用GWT和熟悉的Java工具,例如ApacheAnt,Tomcat5.0servlet容器和IntelliJIDEA集成開發(fā)環(huán)境開發(fā)一個(gè)簡單的Ajax應(yīng)用程序的
2、完整過程?! ∽⒈疚募俣ㄗx者具有一定的Java和Ant使用基礎(chǔ)?! 《?、與GWT一起使用Ant 我下載的是GWT的Linuxbeta版本,并選用Java開發(fā)應(yīng)用程序,然后使用一個(gè)Ant構(gòu)建文件進(jìn)行編譯,最后在一個(gè)Tomcat5.0實(shí)例上發(fā)布該應(yīng)用程序。注意,這個(gè)Ant文件運(yùn)行的是GWTJava-to-JavaScript編譯器。其實(shí),這個(gè)“編譯器”只是一個(gè)執(zhí)行一個(gè)GWTJava類的命令行腳本,該Java類負(fù)責(zé)為應(yīng)用程序編寫JavaScript?! ∈褂肎WTbeta包括兩種開發(fā)方式:主機(jī)方式和web方式?! ≈鳈C(jī)方式是使用一個(gè)嵌入式的GWT瀏覽器和中間開發(fā)步驟;在這個(gè)方式中,你
3、的編譯代碼繼續(xù)運(yùn)行于一個(gè)Java虛擬機(jī)(JVM)中。然而,主機(jī)方式無法應(yīng)用于我們這些使用Linux版本操作系統(tǒng)的MacOSX用戶。只有Google發(fā)行了一個(gè)MacOSX版本,我們才可以使用主機(jī)方式。 三、不同風(fēng)格的Web開發(fā) 在創(chuàng)建遠(yuǎn)程過程調(diào)用(RPC)服務(wù)的同時(shí),本文將詳細(xì)討論一些典型的GWT開發(fā)者可能面對(duì)的web開發(fā)有關(guān)的任務(wù)。RPC是一個(gè)軟件模型的一部分,主要為使用面向服務(wù)的架構(gòu)(SOA)的應(yīng)用程序而設(shè)計(jì)。這些開發(fā)任務(wù)包括: ·使用一個(gè)構(gòu)建文件(構(gòu)建運(yùn)行GWT編譯器,然后發(fā)布編譯器的輸出,并且把你的服務(wù)器端的Java類文件發(fā)布到一個(gè)servlet容器,例如Tomcat
4、,Jetty或Resin)來自動(dòng)化開發(fā)和發(fā)布步驟?! な褂肍irefox的DOMInspector來觀察由該GWT應(yīng)用程序生成的HTML?! ぶ匦略O(shè)置頁面中的各部件而不必存取內(nèi)在的HTML(既然你在使用GWT的JavaAPI)?! ご_保HTML是有效的標(biāo)記,例如,你的組織可能需要基于一個(gè)特別的XHTML文檔類型?! ∷摹⒎?wù)功能 首先,我將簡短描述本文示例應(yīng)用程序要?jiǎng)?chuàng)建的服務(wù),設(shè)計(jì)這個(gè)示例是為了展示GWT使用的模型?! ≡搼?yīng)用程序在瀏覽器中顯示一個(gè)表單,要求用戶輸入他們的姓名、年齡和原籍國家。當(dāng)用戶通過點(diǎn)按按鈕提交表單時(shí),該應(yīng)用程序在一個(gè)文本域中顯示一個(gè)服務(wù)器響應(yīng),而不必
5、初始化一個(gè)頁面刷新。圖1顯示了在Safari瀏覽器中該應(yīng)用程序看上去的樣子。圖1.一個(gè)由GWT生成的簡單視圖 例如,當(dāng)用戶保留一個(gè)文本框?yàn)榭斩c(diǎn)擊OK,Submit按鈕時(shí)將顯示出圖2所示結(jié)果。圖2:該應(yīng)用程序用紅色顯示一條錯(cuò)誤消息 五、巧妙的服務(wù)機(jī)制 在Ajax應(yīng)用程序中使用RPC可以消除顯式地處理XMLHttpRequest和相關(guān)的服務(wù)器返回值的必要性,因?yàn)镚WT對(duì)象能夠?yàn)槟闾幚韽?fù)雜任務(wù)。 你的應(yīng)用程序定義的每個(gè)服務(wù)都要求實(shí)現(xiàn)兩個(gè)Java接口和一個(gè)Java類。為了編譯這些類,你必須確保gwt-user.jar庫位于你的classpath(由一個(gè)Ant文件入口負(fù)責(zé)實(shí)現(xiàn)這項(xiàng)
6、任務(wù))中。下列代碼示例展示了定義我們的服務(wù)的Java接口。packagecom.parkerriver.gwt.testapp.client;importcom.google.gwt.user.client.rpc.RemoteService;publicinterfaceShowRespServiceextendsRemoteService{StringdisplayResponse(Stringreq);} 這個(gè)服務(wù)接口要求擴(kuò)展GWT接口RemoteService。它定義了單個(gè)方法displayResponse()?! ×硗?,你還必須定義一個(gè)客戶端(或使用最終下載的Java
7、Script代碼)用于調(diào)用這個(gè)服務(wù)方法的接口。當(dāng)我顯示客戶端代碼時(shí)(請(qǐng)參考MyForm.java),該GWT使用一個(gè)我描述的回調(diào)設(shè)計(jì)模式。packagecom.parkerriver.gwt.testapp.client;importcom.google.gwt.user.client.rpc.AsyncCallback;publicinterfaceShowRespServiceAsync{publicvoiddisplayResponse(Strings,AsyncCallb