朱小凡,梅 明,熊 婷,王 吉吉,張 凱
(武漢科技大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,湖北武漢 430065)
隨著3G時(shí)代的到來(lái),為了讓手機(jī)用戶能夠在任何時(shí)候,任何地方,以任何形式查詢手機(jī)校園助手所提供的服務(wù),一種高效的辦法就是將應(yīng)用系統(tǒng)的功能拓展到手機(jī)終端,在手機(jī)上通過(guò)移動(dòng)網(wǎng)和互聯(lián)網(wǎng)訪問(wèn)Web網(wǎng)站并處理各項(xiàng)業(yè)務(wù)。從用戶需求的角度來(lái)講,將手機(jī)校園助手提供的服務(wù)通過(guò)現(xiàn)代的先進(jìn)技術(shù)拓展到手機(jī)終端是一項(xiàng)具有極大潛在的用戶需求,而基于Android平臺(tái)的手機(jī)應(yīng)用已成為必然的發(fā)展趨勢(shì),它是一個(gè)開(kāi)放的手機(jī)平臺(tái),從發(fā)布到推廣,在短短的時(shí)間內(nèi)以驚人的速度占據(jù)大量的智能手機(jī)市場(chǎng),而且將繼續(xù)擴(kuò)大其用戶量。通過(guò)對(duì)Android提供的API訪問(wèn)Web服務(wù)器進(jìn)行數(shù)據(jù)傳輸?shù)难芯?認(rèn)為Android提供的技術(shù)在框架上有很大的優(yōu)勢(shì),但是Android最常用的方式就是以XML格式的文件作為信息交換的媒介,這使其存在許多不足。首先,XML格式文件存儲(chǔ)了大量的冗余信息,相對(duì)于JSON格式的文件需要占用更多的帶寬。其次,XML的數(shù)據(jù)表示過(guò)于正規(guī)和繁瑣,對(duì)移動(dòng)和嵌入式應(yīng)用程序尤其如此,這使其對(duì)XML格式的文件進(jìn)行解析相比JSON格式的文件更復(fù)雜。因此,在具體提取數(shù)據(jù)和傳輸數(shù)據(jù)的細(xì)節(jié)上還需要增加新的技術(shù)來(lái)彌補(bǔ),而JSON是一種輕量級(jí)的數(shù)據(jù)傳輸格式,允許輕松地將JavaScript對(duì)象轉(zhuǎn)換成可以隨請(qǐng)求發(fā)送的數(shù)據(jù),在保障安全性的同時(shí),解決了XML的缺陷。
隨著智能手機(jī)的普遍使用,使用移動(dòng)終端訪問(wèn)瀏覽器的需求量越來(lái)越大,人們獲取信息的途徑也越來(lái)越多,Servlet技術(shù)由于具有可移植性,穩(wěn)健性和易開(kāi)發(fā)性而被廣泛應(yīng)用,它的主要功能在于交互式地瀏覽和修改數(shù)據(jù)生成動(dòng)態(tài)Web內(nèi)容,其過(guò)程為:客戶端發(fā)送請(qǐng)求至服務(wù)器端—→服務(wù)器將請(qǐng)求信息發(fā)送至Servlet—→Servlet生成響應(yīng)內(nèi)容并將其傳給Server—→服務(wù)器將響應(yīng)返回給客戶端。以實(shí)際項(xiàng)目中Android客戶端向?qū)W校教務(wù)系統(tǒng)的Web服務(wù)器發(fā)送HTTP的GET和POST請(qǐng)求為例來(lái)進(jìn)行說(shuō)明,其系統(tǒng)框架設(shè)計(jì)如圖1。
圖1
在發(fā)送HTTP請(qǐng)求的過(guò)程中,使用JSON作為數(shù)據(jù)傳輸?shù)倪^(guò)程如下:
當(dāng)網(wǎng)頁(yè)由于頻繁訪問(wèn)而使流量的消耗過(guò)大時(shí),和XML的數(shù)據(jù)傳輸格式相比,JSON作為一種更輕、更友好的Web Services客戶端的格式,大大增強(qiáng)了用戶體驗(yàn)。它不僅易于閱讀和編寫(xiě),同時(shí)也易于機(jī)器解析和生成,其工作原理如下:當(dāng)學(xué)生通過(guò)手機(jī)客戶端使用HTTP協(xié)議發(fā)送已序列化的JSON消息到服務(wù)器端,服務(wù)器端通過(guò)反序列化JSON消息,根據(jù)客戶端請(qǐng)求進(jìn)行相應(yīng)的操作后,把請(qǐng)求的結(jié)果序列化成JSON消息返回給客戶端,客戶端獲取到返回的JSON消息后,反序列化成具體需要的數(shù)據(jù),從而大大提高了數(shù)據(jù)傳輸效率,節(jié)省了時(shí)間。
JSON相對(duì)于XML來(lái)講,數(shù)據(jù)的體積小,速度遠(yuǎn)遠(yuǎn)快于XML。JSON占用帶寬小,瀏覽器解析速度快,數(shù)據(jù)格式較簡(jiǎn)單,都是壓縮的,而XML文件格式文件龐大,格式復(fù)雜,傳輸占用帶寬大,服務(wù)器端和客戶端都需要花費(fèi)大量代碼來(lái)解析XML。為了更好地比較JSON和XML的傳輸效率,我們通過(guò)使用JSON和XML兩種數(shù)據(jù)傳輸格式對(duì)同一個(gè)數(shù)據(jù)庫(kù)文件的學(xué)生信息進(jìn)行數(shù)據(jù)傳輸并記錄傳輸時(shí)間。其中:
1.JSON的數(shù)據(jù)傳輸格式如下:
2.XML的數(shù)據(jù)傳輸格式如下:
3.解析結(jié)果如圖(2)圖(3)所示
圖2 JSON解析結(jié)果
圖3 XML解析結(jié)果
由于網(wǎng)絡(luò)不穩(wěn)定因素,實(shí)驗(yàn)數(shù)據(jù)存在一定的波動(dòng),統(tǒng)計(jì)結(jié)果如表1:
表1 JSON和XML數(shù)據(jù)傳輸時(shí)間對(duì)比
實(shí)驗(yàn)數(shù)據(jù)表明,對(duì)于輕量級(jí)的數(shù)據(jù),JSON的傳輸效率明顯高于XML。這是因?yàn)樵贏ndroid開(kāi)發(fā)框架中,數(shù)據(jù)持久層都是使用面向?qū)ο蟮膶?duì)象關(guān)系映射框架開(kāi)發(fā)的,使開(kāi)發(fā)著必須完全遵守面向?qū)ο蟮拈_(kāi)發(fā)方法,但采用以XML格式文件作為信息交換媒介,需要將數(shù)據(jù)持久層查詢的對(duì)象映射為XML文件,然后傳送給Android客戶端,再由Android客戶端進(jìn)行解析并封裝成對(duì)象,或者與上述對(duì)象相反的過(guò)程。而JSON是利用JSON對(duì)象將其直接轉(zhuǎn)化為腳本,大大提高了其傳輸效率,提高了用戶體驗(yàn)。
1.JavaScript的Eval()函數(shù)
在保障數(shù)據(jù)傳輸效率的同時(shí),安全性的保障也是我們目前面臨的重要問(wèn)題,而JSON本來(lái)是JavaScript的一個(gè)安全的子集,不含有賦值和調(diào)用。因此在將JSON數(shù)據(jù)轉(zhuǎn)換成為JavaScript對(duì)象的時(shí)候,我們包括許多JavaScript庫(kù)都使用Eval函數(shù)。這意味著獲取的JSON數(shù)據(jù)將被解析并執(zhí)行,尤其是當(dāng)有些數(shù)據(jù)是來(lái)自用戶輸入的時(shí)候,可能會(huì)帶來(lái)意想不到的安全性問(wèn)題。攻擊者可以利用這點(diǎn)發(fā)送畸形、惡意的JSON數(shù)據(jù),這樣Evial函數(shù)就會(huì)執(zhí)行這些惡意代碼。
如發(fā)送以下學(xué)生信息代碼:
上面的代碼會(huì)導(dǎo)致瀏覽器把用戶的Cookie數(shù)據(jù)提交到一個(gè)流氓網(wǎng)站,其中一種防止不安全代碼出現(xiàn)的解決辦法,是通過(guò)瀏覽器原生支持的JSON.parse(str)方法讀取JSON數(shù)據(jù),目前已經(jīng)得到大部分主流瀏覽器的支持(IE8+,Firefox 3.5+,Chrome4+/Safari4+,Opera10+),而在不支持原生JSON對(duì)象的瀏覽器上面可以使用parseJSON方法進(jìn)行讀取,parseJSON采用解析器驗(yàn)證讀入的代碼是否真的是JSON代碼,這樣就提供了較好的安全性,但由于這是用模擬的方式讀取,速度上會(huì)比Eval()慢。因此,在使用JSON作為數(shù)據(jù)交換格式的時(shí)候,我們可以使用正則表達(dá)式來(lái)檢查JSON數(shù)據(jù)是否包含有惡意代碼關(guān)鍵字,以此來(lái)保障JSON的安全性。
2.跨站訪問(wèn)問(wèn)題
JSON數(shù)據(jù)傳輸?shù)牧硗庖粋€(gè)安全性問(wèn)題則是跨站請(qǐng)求偽造(Cross-site request forgery,簡(jiǎn)稱(chēng)CSRF或XSRF),增加了用戶數(shù)據(jù)傳輸?shù)陌踩噪[患。對(duì)于這個(gè)問(wèn)題,由于 JavaScript采用了稱(chēng)為“沙盒”的機(jī)制,這種機(jī)制限制JavaScript引擎僅能引入同一個(gè)站點(diǎn)的代碼,因而某種程度上提高了JSON的安全性,確保用戶數(shù)據(jù)安全傳輸而不會(huì)使數(shù)據(jù)泄漏。
JSON和XML的可讀性可謂不相上下,一邊是簡(jiǎn)易的語(yǔ)法,一邊是規(guī)范的標(biāo)簽形式,很難分出勝負(fù)。XML和JSON都是使用結(jié)構(gòu)化方法來(lái)標(biāo)記數(shù)據(jù)的,而JSON也提供了一種具有嵌套數(shù)據(jù)元素的結(jié)構(gòu),就像XML一樣。與XML相同,JSON也是基于文本的,且它們都使用Unicode編碼,且其與XML一樣具有可讀性。
XML天生有很好的擴(kuò)展性,JSON當(dāng)然也有,沒(méi)有什么是XML能擴(kuò)展,JSON不能的,不過(guò)JSON可以存儲(chǔ)復(fù)合對(duì)象,有著XML不可比擬的優(yōu)勢(shì)。從主觀上來(lái)看,JSON更為清晰且冗余更少,而且JSON網(wǎng)站提供了對(duì)JSON語(yǔ)法的嚴(yán)格描述,只是描述較簡(jiǎn)短。從總體來(lái)看,XML比較適合于標(biāo)記文檔,而JSON卻更適于進(jìn)行數(shù)據(jù)交換處理,一個(gè)JSON文檔的每一個(gè)實(shí)例都負(fù)責(zé)描述一個(gè)對(duì)象,其具體的描述是通過(guò)使用嵌套的對(duì)象,數(shù)組,字符串,數(shù)字,布爾值或null值來(lái)實(shí)現(xiàn)的。
XML是一種用于描述信息存儲(chǔ)格式的語(yǔ)言,其優(yōu)點(diǎn)是健壯性和描述性強(qiáng),而且是新一代開(kāi)放可互操作的Web Service選用的通信數(shù)據(jù)格式。在移動(dòng)應(yīng)用程序中,開(kāi)放者通常自己創(chuàng)建數(shù)據(jù)交換格式或可擴(kuò)展標(biāo)記語(yǔ)言XML。前者的優(yōu)勢(shì)是可針對(duì)特殊定情況進(jìn)行調(diào)整,從而最大限度的提高性能,并最大限度的利用計(jì)算機(jī)資源。當(dāng)在HTTP上使用后者時(shí),其優(yōu)勢(shì)在于它是事實(shí)上的數(shù)據(jù)交換標(biāo)準(zhǔn)。另外,在XML中使用的基于文本的表示形式使其易于調(diào)試。這兩種放放風(fēng)各有其缺陷,前者本質(zhì)是專(zhuān)用的非標(biāo)準(zhǔn)的,并可能是不可互操作的,而后者數(shù)據(jù)表示過(guò)于正規(guī)和繁瑣,對(duì)于移動(dòng)和嵌入式應(yīng)用程序,JSON是一種輕量級(jí)的數(shù)據(jù)交換格式,是基于文本的,具有良好的可讀性且易于調(diào)試,JSON支持所有基本數(shù)據(jù)類(lèi)型的表示法,并提供將這些數(shù)據(jù)類(lèi)型相互解析為Java類(lèi)型的方法,對(duì)于輕量級(jí)應(yīng)用,JSON數(shù)據(jù)交換格式能夠較好的節(jié)省手機(jī)的計(jì)算資源,減少網(wǎng)絡(luò)傳輸時(shí)間,加快網(wǎng)絡(luò)傳輸速度。
XML有豐富的編碼工具,比如 Dom4j、JDOM等,JSON也有json.org提供的工具。但是JSON的編碼難度相對(duì)XML容易許多,即使不借助工具也能寫(xiě)出JSON的代碼,可是要寫(xiě)好XML就比較復(fù)雜,JSON可以將JavaScript對(duì)象中表示的一組數(shù)據(jù)轉(zhuǎn)換為字符串,然后就可以在函數(shù)之間輕松地傳遞這個(gè)字符串,或者在異步應(yīng)用程序中將字符串從Web客戶機(jī)傳遞給服務(wù)器端程序。
XML的解析要考慮子節(jié)點(diǎn)和父節(jié)點(diǎn),相對(duì)來(lái)說(shuō)較復(fù)雜,而JSON的解析難度幾乎為零,這一點(diǎn)是XML無(wú)法比擬的。JSON和XML同樣擁有豐富的解析手段,XML解析方式有兩種:一是通過(guò)文檔模型解析,也就是通過(guò)父標(biāo)簽索引出一組標(biāo)記,但這樣必須在預(yù)先知道文檔結(jié)構(gòu)的情況下使用,無(wú)法進(jìn)行通用的封裝。另外一種方法是遍歷節(jié)點(diǎn),這個(gè)可以通過(guò)遞歸來(lái)實(shí)現(xiàn),不過(guò)解析出來(lái)的數(shù)據(jù)仍舊是形式各異,往往也不能滿足預(yù)先的要求。凡是這樣可擴(kuò)展的結(jié)構(gòu)數(shù)據(jù)解析起來(lái)一定都很困難,JSON也同樣如此,但如果預(yù)先知道JSON結(jié)構(gòu)的情況下,使用JSON進(jìn)行數(shù)據(jù)傳遞就更加方便快捷,可以寫(xiě)出很實(shí)用美觀可讀性強(qiáng)的代碼。
JSON和JavaScript的交互更加方便,客戶端JavaScript可以簡(jiǎn)單的通過(guò)evil()進(jìn)行JSON數(shù)據(jù)的讀取,但JSON對(duì)數(shù)據(jù)的描述性和XML相比較差。
XML已經(jīng)被業(yè)界廣泛的使用,而JSON才剛剛開(kāi)始,只是在Ajax這個(gè)特定的領(lǐng)域。在普通的Web應(yīng)用領(lǐng)域,開(kāi)發(fā)者經(jīng)常為XML的解析傷腦筋,無(wú)論是服務(wù)器端生成處理XML,還是客戶端用JavaScript解析XML,都常常導(dǎo)致復(fù)雜的代碼,極低的開(kāi)發(fā)效率。
實(shí)際上,對(duì)于大多數(shù)Web應(yīng)用來(lái)說(shuō),它們根本不需要復(fù)雜的XML來(lái)傳輸數(shù)據(jù),XML宣稱(chēng)的擴(kuò)展性在此就很少具有優(yōu)勢(shì);許多Ajax應(yīng)用甚至直接返回HTML片段來(lái)構(gòu)建動(dòng)態(tài)Web頁(yè)面。和返回XML并解析它相比,返回HTML片段大大降低了系統(tǒng)的復(fù)雜性,但同時(shí)缺少了一定的靈活性。同XML或HTML片段相比,數(shù)據(jù)交換格式JSON提供了更好的簡(jiǎn)單性和靈活性。
通過(guò)手機(jī)移動(dòng)終端來(lái)訪問(wèn)Web服務(wù)器已成為眾多用戶的選擇,學(xué)生通過(guò)手機(jī)隨時(shí)隨地訪問(wèn)教務(wù)系統(tǒng),在手機(jī)上和同學(xué)們進(jìn)行學(xué)習(xí)交流等已成為廣大高校學(xué)生的需求,但從另一方面來(lái)講,流量的大量消耗也成為了學(xué)生們的負(fù)擔(dān)。而JSON是一種輕量級(jí)的數(shù)據(jù)交換格式,能夠生成更小的文檔,且其在JavaScript腳本中更易于使用。其基本思想是,把自己實(shí)現(xiàn)為JavaScript開(kāi)發(fā)中XML數(shù)據(jù)操作的主要替代者,利用其簡(jiǎn)單的數(shù)據(jù)格式,較小帶寬的占用,代碼開(kāi)發(fā)量小,兼容性強(qiáng),解析速度快,開(kāi)發(fā)效率高,靈敏度高等優(yōu)點(diǎn)有效地解決了XML所造成的缺陷,大大減小了移動(dòng)瀏覽時(shí)的網(wǎng)絡(luò)流量,在確保數(shù)據(jù)安全傳輸?shù)耐瑫r(shí)大大提高了數(shù)據(jù)傳輸效率,體現(xiàn)了其優(yōu)越性。
[1]欒詠紅.基于Android的X ML解析器的分析與比較[J].南京曉莊學(xué)院學(xué)報(bào),2011,(6):98-100.
[2]李瑞花.基于Android的XML解析技術(shù)的分析[J].計(jì)算機(jī)時(shí)代,2010,(12):31-33.
[3]劉平.Android手機(jī)訪問(wèn)服務(wù)器的一種數(shù)據(jù)交互方法[H].電子設(shè)計(jì)工程,2010,18(9):96-98,102.
[4]王曉禹,石麗.基于JSON實(shí)現(xiàn)Android智能終端與Web服務(wù)器“面向?qū)ο蟆钡男畔⒔粨Q[J].數(shù)字技術(shù)與應(yīng)用,2012,(04):224-225.
[5]肖鄧華.基于Ajax和JSON的高校信息發(fā)布的系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].軟件開(kāi)發(fā)與設(shè)計(jì),2010,(02):86.
[6]張濤,黃強(qiáng),毛磊雅等.一個(gè)基于JSON的對(duì)象序列化算法[J].計(jì)算機(jī)工程與應(yīng)用,2007,43(15):98-100.
[7]胡文發(fā),白中英.基于 J2ME/J2EE的JSON數(shù)據(jù)交換的探討[J].電子設(shè)計(jì)工程,2009,17(12):102-103.
[8]崔璨,倪宏.使用 JSON對(duì)AJAX技術(shù)中的XML性能的優(yōu)化仿真[J].通信技術(shù),2009,42(08):102-110,114.
[9]高靜,段會(huì)川.基于移動(dòng)設(shè)備的JSON數(shù)據(jù)傳輸效率研究[J].信息技術(shù)與信息化,2011,(1):13-15.
[10]胡集儀.使用JSON改進(jìn)WEB數(shù)據(jù)傳輸[J].科技信息,2008,(35):90,97.
武漢冶金管理干部學(xué)院學(xué)報(bào)2013年1期