一、引言
隨著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的缺陷。
二、基于JSON 的數(shù)據(jù)傳輸技術(shù)
隨著智能手機(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 基于JSON的系統(tǒng)框架設(shè)計(jì)
在發(fā)送HTTP 請(qǐng)求的過(guò)程中,使用JSON 作為數(shù)據(jù)傳輸?shù)倪^(guò)程如下:
HttpPost request = new HttpPost(url) ;
//封裝一個(gè)JSON 對(duì)象
JSONObject param = new JSONObject() ;
param .put("username","20091213701") ;
param .put("password","12345") ;
......
//綁定到請(qǐng)求Entry
StringEntity stren = new
StringEntity(param.toString()) ;
request.setEntity(stren) ;
//發(fā)送請(qǐng)求
HttpResponse httpResponse = new
DefaultHttpClient().execute(request) ;
//得到應(yīng)答的字符串,數(shù)據(jù)使用JSON 格式保存
String retSrc = EntityUtils.toString(httpResponse.getEntity()) ;
//生成JSON 對(duì)象
JSONObject result = new JSONObject(retSrc) ;
String token = result .get("token") ;
......
當(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 和XML 格式數(shù)據(jù)傳輸對(duì)比的實(shí)際應(yīng)用
(一)JSON 和XML 數(shù)據(jù)傳輸時(shí)間對(duì)比
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ù)傳輸格式如下:
"student" :[
{"name" :"zhangsan" ,
"no" :"20091213" ,
"class" :"rj091" ,
"sex" :"male" ,
"age" :"21" ,
"prof" :"rjgc"} ,
{"name" :"lisi" ,
"no" :"20091214" ,
"class" :"rj093" ,
"sex" :"female" ,
"age" :"20" ,
"prof" :"rjgc"} ,
{"name" :"wangwu" ,
"no" :"20091215" ,
"class" :"w1091" ,
"sex" :"male" ,
"age" :"22" ,
"prof" :"wlgc"} ,
......]
2.XML 的數(shù)據(jù)傳輸格式如下:
< ? xml version= "1.0"encoding = "UTF-8"? >
< statuses type = "array" >
< status >
< time > 2009 < /time>
< no > 15221439 < /no >
< name> fableson < /name >
< sex > female< /sex >
< age > 22 < /age >
< /status >
<status >
< time > 2010 < /time>
< no > 15221438 < /no >
< name > jonk </name >
< sex > male< /sex >
< age > 20 </age >
< /status >
......
< /statuses >
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)。
(二)JSON 和XML 數(shù)據(jù)傳輸安全性對(duì)比
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é)生信息代碼:
Window.location = "< a
href = " http ://badsite.com" > http ://badsite.com </a> ?" +document.cookie ;
student :{
"no" :"20091213" ,
"name" :"aaa" ,
"math" :"86"
"english" :"90"
....
}
上面的代碼會(huì)導(dǎo)致瀏覽器把用戶的Cookie 數(shù)據(jù)提交到一個(gè)流氓網(wǎng)站,其中一種防止不安全代碼出現(xiàn)的解決辦法,是通過(guò)瀏覽器原生支持的JSON.parse(str)方法讀取JSON 數(shù)據(jù),目前已經(jīng)得到大部分主流瀏覽器的支持(IE8 +,F(xiàn)irefox 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 對(duì)比
(一)可讀性
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 一樣具有可讀性。
(二)可擴(kuò)展性
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)的。
(三)數(shù)據(jù)交換格式的分析
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)單性和靈活性。
五、結(jié)束語(yǔ)
通過(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)越性。
核心關(guān)注:拓步ERP系統(tǒng)平臺(tái)是覆蓋了眾多的業(yè)務(wù)領(lǐng)域、行業(yè)應(yīng)用,蘊(yùn)涵了豐富的ERP管理思想,集成了ERP軟件業(yè)務(wù)管理理念,功能涉及供應(yīng)鏈、成本、制造、CRM、HR等眾多業(yè)務(wù)領(lǐng)域的管理,全面涵蓋了企業(yè)關(guān)注ERP管理系統(tǒng)的核心領(lǐng)域,是眾多中小企業(yè)信息化建設(shè)首選的ERP管理軟件信賴品牌。
轉(zhuǎn)載請(qǐng)注明出處:拓步ERP資訊網(wǎng)http://www.ezxoed.cn/
本文標(biāo)題:Android移動(dòng)終端與服務(wù)器數(shù)據(jù)傳輸?shù)难芯?/a>
本文網(wǎng)址:http://www.ezxoed.cn/html/consultation/10839712255.html