999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

GWT應(yīng)用程序與服務(wù)器間數(shù)據(jù)傳遞技術(shù)的研究

2010-04-29 00:00:00駱開(kāi)華
電腦知識(shí)與技術(shù) 2010年11期

摘要:GWT是Google公司發(fā)布的用于開(kāi)發(fā)Web應(yīng)用程序的產(chǎn)品。該文分析了Ajax應(yīng)用程序利用GWT的各種庫(kù)與基本的服務(wù)器、第三方服務(wù)器以及有狀態(tài)服務(wù)器和無(wú)狀態(tài)服務(wù)器等高級(jí)服務(wù)器進(jìn)行數(shù)據(jù)傳遞的方法和技術(shù)。

關(guān)鍵詞:GWT;Ajax;應(yīng)用程序;數(shù)據(jù)傳遞

中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2010)11-2645-02

The Study on the Data Transfer Technology Between GWT Application and Server

LUO Kai-hua

(Zengcheng College of South China Normal University, Guangzhou 513363, China)

Abstract: GWT is Google's announcement of an application for the development of Web products. The paper analyzes the Ajax applications that use a variety of library and basic GWT server, third-party servers, and stateful and stateless server, the server and other senior server data transmission methods and techniques.

Keywords: GWT; ajax; application; data transfer

GWT(Google Web Toolkit)是Google公司發(fā)布的開(kāi)發(fā)Web應(yīng)用程序的產(chǎn)品。通過(guò)GWT,開(kāi)發(fā)人員可以更容易、更方便地開(kāi)發(fā)出Ajax應(yīng)用程序,從而大大地降低了開(kāi)發(fā)的難度和成本,特別是結(jié)合Eclipse Google插件的使用,相對(duì)于其他Web開(kāi)發(fā)工具更具優(yōu)勢(shì),因而越來(lái)越受到Web開(kāi)發(fā)人員的歡迎和青睞。

Ajax(Asynchronous JavaScript and XML,異步JavaScript XML)是開(kāi)發(fā)Web應(yīng)用程序的新技術(shù),它的出現(xiàn)導(dǎo)致了Web應(yīng)用程序架構(gòu)的一次重大變革。Ajax應(yīng)用程序不但繼承了傳統(tǒng)Web應(yīng)用程序易于分發(fā)的優(yōu)點(diǎn),同時(shí),又具有桌面應(yīng)用程序靈活和易響應(yīng)性的界面,特別是對(duì)服務(wù)器端數(shù)據(jù)傳遞的良好支持,更是Ajax技術(shù)的一大亮點(diǎn)。GWT作為開(kāi)發(fā)Ajax應(yīng)用程序的利器,它的服務(wù)器整合技術(shù)同樣多樣和完善。下面,本文將對(duì)GWT應(yīng)用程序和服務(wù)器間數(shù)據(jù)傳遞的方法和技術(shù)進(jìn)行詳細(xì)地研究。

1 基本的服務(wù)器數(shù)據(jù)傳遞技術(shù)

傳統(tǒng)的Web應(yīng)用程序都是通過(guò)HTTP請(qǐng)求數(shù)據(jù)和表單與服務(wù)器進(jìn)行數(shù)據(jù)傳遞,GWT不但同樣支持這一基本的數(shù)據(jù)傳遞方法,并且使用更加簡(jiǎn)單。

1.1 通過(guò)異步HTTP請(qǐng)求傳遞

通過(guò)對(duì)服務(wù)器的異步調(diào)用進(jìn)行數(shù)據(jù)傳遞,從而避免刷新頁(yè)面是Ajax最核心的能力,而這種能力是通過(guò)JavaScript來(lái)實(shí)現(xiàn)的,這種方法的缺點(diǎn)是針對(duì)不同的瀏覽器需使用不同的JavaScript對(duì)象。而使用GWT開(kāi)發(fā),只需簡(jiǎn)單地調(diào)用HTTP庫(kù)和GWT中的類來(lái)實(shí)現(xiàn)即可。

使用HTTP庫(kù),必需先把庫(kù)文件導(dǎo)入GWT模塊文件中。HTTP庫(kù)位于com.google.gwt.http.client包內(nèi),在代碼中添加這個(gè)包的方法如下:

在應(yīng)用程序中使用這個(gè)庫(kù)方法比較簡(jiǎn)單。首先,創(chuàng)建一個(gè)RequestBuilder實(shí)例,用以設(shè)置請(qǐng)求的細(xì)節(jié);接著,通過(guò)sendRequest方法發(fā)送請(qǐng)求;最后,請(qǐng)求發(fā)送后,如果失敗,會(huì)調(diào)用RequestCallback實(shí)例的onError方法,如果成功則調(diào)用該實(shí)例的onResponseReceived方法。傳遞的數(shù)據(jù)可以是任何格式的,但最好使用JSON和XML這兩種格式,因?yàn)镚WT有JSON和XML庫(kù)。

1.2 利用傳統(tǒng)的服務(wù)器端腳本技術(shù)

目前,大部分的Web應(yīng)用程序都運(yùn)行在各種服務(wù)器端的腳本引擎上,通過(guò)這些腳步跟服務(wù)器進(jìn)行數(shù)據(jù)交換。GWT提供了工具使Ajax應(yīng)用程序與服務(wù)器端的腳本進(jìn)行交換。客戶端的腳本參數(shù)大都以GET或POST方式來(lái)發(fā)送,為此,GWT提供了URL.encodeComponent方法對(duì)任何可能妨礙解析URL及其參數(shù)的字符進(jìn)行編碼,提供URL.encode方法對(duì)URL的非參數(shù)部分進(jìn)行編碼。舉例如下:

RequestBuilder RequestBuilder=new RequestBuilder(

RequestBuilder.GET,

GWT.getModuleBaseURL()+”/useractive.php?name=”+

URL.encodeComponent( user.gerNme()));

以上代碼實(shí)現(xiàn)了客戶端請(qǐng)求修改URL使其指向useractive.php的腳本功能。

2 利用XML和JSON格式庫(kù)

傳統(tǒng)的Web應(yīng)用程序使用的是HTML或純文本進(jìn)行數(shù)據(jù)傳輸,但這些數(shù)據(jù)格式并不具有適合編程的結(jié)構(gòu)化形式。為此,GWT提供了XML和JSON庫(kù),利用這兩種結(jié)構(gòu)形式,客戶端就可以和服務(wù)器端進(jìn)行結(jié)構(gòu)化數(shù)據(jù)的傳遞。

XML是Ajax應(yīng)用程序中一個(gè)重要的組成部分,其語(yǔ)法與HTML相似,但使用方法卻大相徑庭。GWT的XML庫(kù)中包含了各種操作XML的類,使用XML庫(kù)來(lái)解釋數(shù)據(jù)時(shí),總是要從調(diào)用XMLParser類的靜態(tài)方法parse開(kāi)始。XML的結(jié)構(gòu)可以分成元素、屬性和文本,訪問(wèn)XML數(shù)據(jù)最常用的類是Document、Element和Text類。XML庫(kù)也支持相反的操作,即可以利用相關(guān)的類構(gòu)成一個(gè)XML對(duì)象模型。

JSON(JavaScript Object Notation ,JavaScript對(duì)象表示法 )數(shù)據(jù)的大小和語(yǔ)法與XML完全不同,JSON的結(jié)構(gòu)可以分成對(duì)象、數(shù)組和值。JSON也能像XML一樣表示數(shù)據(jù)的層次結(jié)構(gòu)和具有自我描述的能力,但它具有很多XML所沒(méi)有的優(yōu)點(diǎn)。JSON庫(kù)位于com.google.gwt.json.client中,要使用這個(gè)庫(kù)必須通過(guò)下面的語(yǔ)句把它導(dǎo)入:

與XML類似,也必須調(diào)用GWT的JSONParser類的parse方法來(lái)解釋JSON的數(shù)據(jù),此方法將JSON字符串轉(zhuǎn)換為JSONValue對(duì)象。接著,調(diào)用JSONObject.isObject(),此時(shí)返回一個(gè)實(shí)例。然后,接著調(diào)用JSONObject.keySet()取得對(duì)象的鍵值。最后,檢測(cè)該鍵值,如果符合,則利用JSONObject.get()取得該值,否則,顯示error信息。

3 與第三方服務(wù)器的數(shù)據(jù)傳遞

一般來(lái)說(shuō),Ajax應(yīng)用程序是不能與第三方服務(wù)器通信的,這樣的同源策略確保了不同域之間的JavaScript不會(huì)修改其他域的HTML,根據(jù)這個(gè)策略,用戶也能確定自己當(dāng)前查看的網(wǎng)頁(yè)是否來(lái)自正在使用的域。但同源策略限制了Ajax應(yīng)用程序從其他域下載數(shù)據(jù),限制了Ajax應(yīng)用程序的很多Web服務(wù),所以,這一策略有其的限制性。使用GWT,我們可以有多種方法突破這種限制。

3.1 使用JavaScript API

Google提供了能夠包含在Ajax應(yīng)用程序中的JavaScript庫(kù),這種庫(kù)在HTML中允許利用script標(biāo)簽被從第三方服務(wù)器中導(dǎo)入。Gadget Desktop應(yīng)用程序中使用Google Ajax Feed API從第三方站點(diǎn)站點(diǎn)加載RSS源就是一個(gè)很好的例子。

在GWT應(yīng)用程序中要使用JavaScript API則必須把API添加到主HTML頁(yè)面的head標(biāo)簽中。加載后,JavaScript API就可以在GWT應(yīng)用程序中使用了。但此時(shí)必須使用GWT的JSNI來(lái)訪問(wèn)加載到本地的JavaScript API所提供的函數(shù)。

3.2 使用JSONP

利用JSOP從第三方服務(wù)器上加載結(jié)構(gòu)化的數(shù)據(jù)也是一種很好的方式。這個(gè)過(guò)程比較簡(jiǎn)單,首先,GWT應(yīng)用程序在HTML文檔中添加一個(gè)script標(biāo)簽,瀏覽器根據(jù)這個(gè)標(biāo)簽提供的URL加載腳本。然后,第三方服務(wù)器根據(jù)URL請(qǐng)求生成由回調(diào)方法包裝的JSON輸出。最后,瀏覽器調(diào)用回調(diào)函數(shù)。

3.3 使用HTTP代理

所謂HTTP代理就是給Ajax應(yīng)用程序添加服務(wù)器組件,把當(dāng)前服務(wù)器當(dāng)做一個(gè)代理,將應(yīng)用程序的請(qǐng)求轉(zhuǎn)給第三方服務(wù)器。相對(duì)于前面兩種方式,使用HTTP代理更有利于應(yīng)用程序和服務(wù)器進(jìn)行復(fù)雜的交互。

4 與高級(jí)服務(wù)器的數(shù)據(jù)傳遞

對(duì)于基于HTTP的應(yīng)用程序,Web服務(wù)器會(huì)記住應(yīng)用程序的狀態(tài)。對(duì)于這種有狀態(tài)服務(wù)器,GWT應(yīng)用程序可以利用客戶端的有狀態(tài)信息來(lái)增強(qiáng)用戶體驗(yàn)。此時(shí),GWT應(yīng)用程序使用HTTP和XML庫(kù)來(lái)實(shí)現(xiàn)客戶端完成遠(yuǎn)程調(diào)用進(jìn)而操作服務(wù)器端的數(shù)據(jù)。

GWT在應(yīng)用程序與高級(jí)服務(wù)器進(jìn)行數(shù)據(jù)傳遞最大的優(yōu)勢(shì)和好處體現(xiàn)在與無(wú)狀態(tài)服務(wù)器的整合中。利用GWT-RPC庫(kù),開(kāi)發(fā)者可以像開(kāi)發(fā)本地接口那樣迅速地編寫(xiě)遠(yuǎn)程接口。此時(shí)的應(yīng)用程序可以把用戶的操作隔離在客戶端,較小的工作單元在客戶端完成,只有一次較大的事務(wù)完成后才向服務(wù)器提交請(qǐng)求。這種方式有利于提高應(yīng)用程序執(zhí)行效率和減少服務(wù)器的負(fù)擔(dān),擴(kuò)展了瀏覽器和服務(wù)器異步通信的能力。

GWT-RPC庫(kù)有兩個(gè)軟件包,分別是為客戶端和服務(wù)器端的RPC提供支持的com.google.gwt.user.client.rpc和com.google.gwt.user.server.rpc。其中,客戶端提供的接口用來(lái)對(duì)應(yīng)用程序中將要用于RPC的接口進(jìn)行標(biāo)記,當(dāng)GWT編譯客戶端項(xiàng)目時(shí),則把這個(gè)標(biāo)記了的接口生成出來(lái)RPC編組的必要代碼。服務(wù)器端的RPC包則為了在Tomcat和Jetty這類java servlet容器使用而創(chuàng)建的。如在Tomcat中要使用RPC包,部署如下:在Tomcat的安裝目錄下面的Webapps目錄中創(chuàng)建應(yīng)用程序,然后把GWT庫(kù)放在應(yīng)用程序目錄下面的WEB-INF文件夾下,把配置的servlet放在應(yīng)用程序目錄下面的lib文件夾下,并在該文件夾下建立Web.xml等類配置文件。

5 結(jié)束語(yǔ)

實(shí)踐證明,利用GWT的XML、JSON和RPC等庫(kù)使Ajax應(yīng)用程序與傳統(tǒng)的基本服務(wù)器、第三方服務(wù)器以及無(wú)狀態(tài)服務(wù)器和有狀態(tài)服務(wù)器等高級(jí)服務(wù)器的數(shù)據(jù)傳遞方式更多樣、使用更簡(jiǎn)單。可見(jiàn),GWT確實(shí)是開(kāi)發(fā)Ajax應(yīng)用程序的一把利器。

參考文獻(xiàn):

[1] Prabhakar Chaganti.Google Web Toolkit:GWT Java AJAX編程[M].北京:人民郵電出版社,2009.

[2] 吉融.GWT入門(mén)與經(jīng)典實(shí)例解析[M].北京:機(jī)械工業(yè)出版社,2008.

[3] Crane D,Bibeault B,Sonneveld J,et al.Ajax實(shí)戰(zhàn)實(shí)例詳解[M].北京:人民郵電出版社,2008.

主站蜘蛛池模板: 伊人婷婷色香五月综合缴缴情| 国产一区三区二区中文在线| 一区二区在线视频免费观看| 99re视频在线| 国产91丝袜在线播放动漫| 无码乱人伦一区二区亚洲一| 亚国产欧美在线人成| 国产无码精品在线播放| av一区二区人妻无码| 精品国产电影久久九九| 色综合天天综合中文网| 成人国产精品2021| 一级毛片网| 久久久久中文字幕精品视频| 日韩国产精品无码一区二区三区| 亚洲视频色图| 久久99国产综合精品女同| 亚洲成人黄色在线观看| 国产亚洲欧美在线人成aaaa | 午夜国产理论| 毛片a级毛片免费观看免下载| 拍国产真实乱人偷精品| 欧美精品啪啪一区二区三区| 亚洲男人天堂2020| av免费在线观看美女叉开腿| 亚洲天堂免费在线视频| 青青青国产免费线在| 国产二级毛片| 亚洲系列无码专区偷窥无码| 亚洲欧美国产视频| 亚洲网综合| 99久久精品免费看国产免费软件| 亚洲va欧美ⅴa国产va影院| 亚洲va在线∨a天堂va欧美va| 91在线一9|永久视频在线| 国产精品白浆在线播放| 毛片视频网| 国产成人精品第一区二区| 国产精品亚洲天堂| 国产人碰人摸人爱免费视频| 国产成人无码久久久久毛片| 国产在线观看人成激情视频| 最近最新中文字幕在线第一页| 国产偷倩视频| 国产色伊人| 国产成人亚洲精品无码电影| 中国国产高清免费AV片| 欧美一区二区啪啪| 超碰色了色| 欧美精品伊人久久| 熟女成人国产精品视频| 欧美日本激情| 欧美在线综合视频| 欧美全免费aaaaaa特黄在线| 久久久亚洲色| 国产精品大白天新婚身材| 久久精品国产免费观看频道| 黄色在线网| 久久6免费视频| 亚欧乱色视频网站大全| 国内精品视频| 99久久亚洲综合精品TS| www.av男人.com| 国产综合精品一区二区| 91亚洲免费| 国产精品久久久久久久伊一| 亚洲国产中文欧美在线人成大黄瓜| 国产欧美自拍视频| 亚洲另类国产欧美一区二区| 欧美日韩资源| 亚洲男人在线| 国产成人亚洲无吗淙合青草| 91口爆吞精国产对白第三集| 亚洲最新地址| 国产91精品久久| 国产产在线精品亚洲aavv| 色AV色 综合网站| 国产又爽又黄无遮挡免费观看 | 免费国产小视频在线观看| 久久久久中文字幕精品视频| 亚洲日韩精品伊甸| 亚洲成人精品在线|