一、引言
隨著3G時(shí)代的到來,為了讓手機(jī)用戶能夠在任何時(shí)候,任何地方,以任何形式查詢手機(jī)校園助手所提供的服務(wù),一種高效的辦法就是將應(yīng)用系統(tǒng)的功能拓展到手機(jī)終端,在手機(jī)上通過移動(dòng)網(wǎng)和互聯(lián)網(wǎng)訪問Web 網(wǎng)站并處理各項(xiàng)業(yè)務(wù)。從用戶需求的角度來講,將手機(jī)校園助手提供的服務(wù)通過現(xiàn)代的先進(jìn)技術(shù)拓展到手機(jī)終端是一項(xiàng)具有極大潛在的用戶需求,而基于Android 平臺(tái)的手機(jī)應(yīng)用已成為必然的發(fā)展趨勢,它是一個(gè)開放的手機(jī)平臺(tái),從發(fā)布到推廣,在短短的時(shí)間內(nèi)以驚人的速度占據(jù)大量的智能手機(jī)市場,而且將繼續(xù)擴(kuò)大其用戶量。通過對Android 提供的API 訪問Web 服務(wù)器進(jìn)行數(shù)據(jù)傳輸?shù)难芯,認(rèn)為Android 提供的技術(shù)在框架上有很大的優(yōu)勢,但是Android 最常用的方式就是以XML 格式的文件作為信息交換的媒介,這使其存在許多不足。首先,XML 格式文件存儲(chǔ)了大量的冗余信息,相對于JSON 格式的文件需要占用更多的帶寬。其次,XML 的數(shù)據(jù)表示過于正規(guī)和繁瑣,對移動(dòng)和嵌入式應(yīng)用程序尤其如此,這使其對XML 格式的文件進(jìn)行解析相比JSON 格式的文件更復(fù)雜。因此,在具體提取數(shù)據(jù)和傳輸數(shù)據(jù)的細(xì)節(jié)上還需要增加新的技術(shù)來彌補(bǔ),而JSON 是一種輕量級的數(shù)據(jù)傳輸格式,允許輕松地將JavaScript 對象轉(zhuǎn)換成可以隨請求發(fā)送的數(shù)據(jù),在保障安全性的同時(shí),解決了XML的缺陷。
二、基于JSON 的數(shù)據(jù)傳輸技術(shù)
隨著智能手機(jī)的普遍使用,使用移動(dòng)終端訪問瀏覽器的需求量越來越大,人們獲取信息的途徑也越來越多,Servlet 技術(shù)由于具有可移植性,穩(wěn)健性和易開發(fā)性而被廣泛應(yīng)用,它的主要功能在于交互式地瀏覽和修改數(shù)據(jù)生成動(dòng)態(tài)Web 內(nèi)容,其過程為:客戶端發(fā)送請求至服務(wù)器端— → 服務(wù)器將請求信息發(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請求為例來進(jìn)行說明,其系統(tǒng)框架設(shè)計(jì)如圖1 。
圖1 基于JSON的系統(tǒng)框架設(shè)計(jì)
在發(fā)送HTTP 請求的過程中,使用JSON 作為數(shù)據(jù)傳輸?shù)倪^程如下:
HttpPost request = new HttpPost(url) ;
//封裝一個(gè)JSON 對象
JSONObject param = new JSONObject() ;
param .put("username","20091213701") ;
param .put("password","12345") ;
......
//綁定到請求Entry
StringEntity stren = new
StringEntity(param.toString()) ;
request.setEntity(stren) ;
//發(fā)送請求
HttpResponse httpResponse = new
DefaultHttpClient().execute(request) ;
//得到應(yīng)答的字符串,數(shù)據(jù)使用JSON 格式保存
String retSrc = EntityUtils.toString(httpResponse.getEntity()) ;
//生成JSON 對象
JSONObject result = new JSONObject(retSrc) ;
String token = result .get("token") ;
......
當(dāng)網(wǎng)頁由于頻繁訪問而使流量的消耗過大時(shí),和XML 的數(shù)據(jù)傳輸格式相比,JSON 作為一種更輕、更友好的Web Services 客戶端的格式,大大增強(qiáng)了用戶體驗(yàn)。它不僅易于閱讀和編寫,同時(shí)也易于機(jī)器解析和生成,其工作原理如下:當(dāng)學(xué)生通過手機(jī)客戶端使用HTTP 協(xié)議發(fā)送已序列化的JSON 消息到服務(wù)器端,服務(wù)器端通過反序列化JSON 消息,根據(jù)客戶端請求進(jìn)行相應(yīng)的操作后,把請求的結(jié)果序列化成JSON 消息返回給客戶端,客戶端獲取到返回的JSON 消息后,反序列化成具體需要的數(shù)據(jù),從而大大提高了數(shù)據(jù)傳輸效率,節(jié)省了時(shí)間。
三、基于JSON 和XML 格式數(shù)據(jù)傳輸對比的實(shí)際應(yīng)用
(一)JSON 和XML 數(shù)據(jù)傳輸時(shí)間對比
JSON 相對于XML 來講,數(shù)據(jù)的體積小,速度遠(yuǎn)遠(yuǎn)快于XML 。JSON 占用帶寬小,瀏覽器解析速度快,數(shù)據(jù)格式較簡單,都是壓縮的,而XML 文件格式文件龐大,格式復(fù)雜,傳輸占用帶寬大,服務(wù)器端和客戶端都需要花費(fèi)大量代碼來解析XML 。為了更好地比較JSON 和XML 的傳輸效率,我們通過使用JSON 和XML 兩種數(shù)據(jù)傳輸格式對同一個(gè)數(shù)據(jù)庫文件的學(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í)間對比
實(shí)驗(yàn)數(shù)據(jù)表明,對于輕量級的數(shù)據(jù),JSON 的傳輸效率明顯高于XML 。這是因?yàn)樵贏ndroid 開發(fā)框架中,數(shù)據(jù)持久層都是使用面向?qū)ο蟮膶ο箨P(guān)系映射框架開發(fā)的,使開發(fā)著必須完全遵守面向?qū)ο蟮拈_發(fā)方法,但采用以XML 格式文件作為信息交換媒介,需要將數(shù)據(jù)持久層查詢的對象映射為XML 文件,然后傳送給Android 客戶端,再由Android 客戶端進(jìn)行解析并封裝成對象,或者與上述對象相反的過程。而JSON 是利用JSON 對象將其直接轉(zhuǎn)化為腳本,大大提高了其傳輸效率,提高了用戶體驗(yàn)。
(二)JSON 和XML 數(shù)據(jù)傳輸安全性對比
1.JavaScript 的Eval()函數(shù)
在保障數(shù)據(jù)傳輸效率的同時(shí),安全性的保障也是我們目前面臨的重要問題,而JSON 本來是JavaScript 的一個(gè)安全的子集,不含有賦值和調(diào)用。因此在將JSON 數(shù)據(jù)轉(zhuǎn)換成為JavaScript 對象的時(shí)候,我們包括許多JavaScript 庫都使用Eval 函數(shù)。這意味著獲取的JSON 數(shù)據(jù)將被解析并執(zhí)行,尤其是當(dāng)有些數(shù)據(jù)是來自用戶輸入的時(shí)候,可能會(huì)帶來意想不到的安全性問題。攻擊者可以利用這點(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)的解決辦法,是通過瀏覽器原生支持的JSON.parse(str)方法讀取JSON 數(shù)據(jù),目前已經(jīng)得到大部分主流瀏覽器的支持(IE8 +,F(xiàn)irefox 3.5+,Chrome4 +/Safari4 +,Opera10 +),而在不支持原生JSON 對象的瀏覽器上面可以使用parseJSON方法進(jìn)行讀取,parseJSON 采用解析器驗(yàn)證讀入的代碼是否真的是JSON 代碼,這樣就提供了較好的安全性,但由于這是用模擬的方式讀取,速度上會(huì)比Eval()慢。因此,在使用JSON 作為數(shù)據(jù)交換格式的時(shí)候,我們可以使用正則表達(dá)式來檢查JSON 數(shù)據(jù)是否包含有惡意代碼關(guān)鍵字,以此來保障JSON 的安全性。
2.跨站訪問問題
JSON 數(shù)據(jù)傳輸?shù)牧硗庖粋(gè)安全性問題則是跨站請求偽造(Cross-site request forgery ,簡稱CSRF 或XSRF) ,增加了用戶數(shù)據(jù)傳輸?shù)陌踩噪[患。對于這個(gè)問題,由于JavaScript 采用了稱為“沙盒”的機(jī)制,這種機(jī)制限制JavaScript 引擎僅能引入同一個(gè)站點(diǎn)的代碼,因而某種程度上提高了JSON 的安全性,確保用戶數(shù)據(jù)安全傳輸而不會(huì)使數(shù)據(jù)泄漏。
四、JSON 與XML 對比
(一)可讀性
JSON 和XML 的可讀性可謂不相上下,一邊是簡易的語法,一邊是規(guī)范的標(biāo)簽形式,很難分出勝負(fù)。XML 和JSON 都是使用結(jié)構(gòu)化方法來標(biāo)記數(shù)據(jù)的,而JSON 也提供了一種具有嵌套數(shù)據(jù)元素的結(jié)構(gòu),就像XML 一樣。與XML 相同,JSON 也是基于文本的,且它們都使用Unicode 編碼,且其與XML 一樣具有可讀性。
(二)可擴(kuò)展性
XML 天生有很好的擴(kuò)展性,JSON 當(dāng)然也有,沒有什么是XML 能擴(kuò)展,JSON 不能的,不過JSON可以存儲(chǔ)復(fù)合對象,有著XML 不可比擬的優(yōu)勢。從主觀上來看,JSON 更為清晰且冗余更少,而且JSON 網(wǎng)站提供了對JSON 語法的嚴(yán)格描述,只是描述較簡短。從總體來看,XML 比較適合于標(biāo)記文檔,而JSON 卻更適于進(jìn)行數(shù)據(jù)交換處理,一個(gè)JSON 文檔的每一個(gè)實(shí)例都負(fù)責(zé)描述一個(gè)對象,其具體的描述是通過使用嵌套的對象,數(shù)組,字符串,數(shù)字,布爾值或null 值來實(shí)現(xiàn)的。
(三)數(shù)據(jù)交換格式的分析
XML 是一種用于描述信息存儲(chǔ)格式的語言,其優(yōu)點(diǎn)是健壯性和描述性強(qiáng),而且是新一代開放\可互操作的Web Service 選用的通信數(shù)據(jù)格式。在移動(dòng)應(yīng)用程序中,開放者通常自己創(chuàng)建數(shù)據(jù)交換格式或可擴(kuò)展標(biāo)記語言XML 。前者的優(yōu)勢是可針對特殊定情況進(jìn)行調(diào)整,從而最大限度的提高性能,并最大限度的利用計(jì)算機(jī)資源。當(dāng)在HTTP 上使用后者時(shí),其優(yōu)勢在于它是事實(shí)上的數(shù)據(jù)交換標(biāo)準(zhǔn)。另外,在XML 中使用的基于文本的表示形式使其易于調(diào)試。這兩種放放風(fēng)各有其缺陷,前者本質(zhì)是專用的\非標(biāo)準(zhǔn)的,并可能是不可互操作的,而后者數(shù)據(jù)表示過于正規(guī)和繁瑣,對于移動(dòng)和嵌入式應(yīng)用程序,JSON 是一種輕量級的數(shù)據(jù)交換格式,是基于文本的,具有良好的可讀性且易于調(diào)試,JSON 支持所有基本數(shù)據(jù)類型的表示法,并提供將這些數(shù)據(jù)類型相互解析為Java 類型的方法,對于輕量級應(yīng)用,JSON 數(shù)據(jù)交換格式能夠較好的節(jié)省手機(jī)的計(jì)算資源,減少網(wǎng)絡(luò)傳輸時(shí)間,加快網(wǎng)絡(luò)傳輸速度。
(四)編碼難度
XML 有豐富的編碼工具,比如Dom4j 、JDOM等,JSON 也有json .org 提供的工具。但是JSON 的編碼難度相對XML 容易許多,即使不借助工具也能寫出JSON 的代碼,可是要寫好XML 就比較復(fù)雜,JSON 可以將JavaScript 對象中表示的一組數(shù)據(jù)轉(zhuǎn)換為字符串,然后就可以在函數(shù)之間輕松地傳遞這個(gè)字符串,或者在異步應(yīng)用程序中將字符串從Web 客戶機(jī)傳遞給服務(wù)器端程序。
(五)解碼難度
XML 的解析要考慮子節(jié)點(diǎn)和父節(jié)點(diǎn),相對來說較復(fù)雜,而JSON 的解析難度幾乎為零,這一點(diǎn)是XML 無法比擬的。JSON 和XML 同樣擁有豐富的解析手段,XML 解析方式有兩種:一是通過文檔模型解析,也就是通過父標(biāo)簽索引出一組標(biāo)記,但這樣必須在預(yù)先知道文檔結(jié)構(gòu)的情況下使用,無法進(jìn)行通用的封裝。另外一種方法是遍歷節(jié)點(diǎn),這個(gè)可以通過遞歸來實(shí)現(xiàn),不過解析出來的數(shù)據(jù)仍舊是形式各異,往往也不能滿足預(yù)先的要求。
凡是這樣可擴(kuò)展的結(jié)構(gòu)數(shù)據(jù)解析起來一定都很困難,JSON 也同樣如此,但如果預(yù)先知道JSON 結(jié)構(gòu)的情況下,使用JSON 進(jìn)行數(shù)據(jù)傳遞就更加方便快捷,可以寫出很實(shí)用美觀可讀性強(qiáng)的代碼。
(六)交互性
JSON 和JavaScript 的交互更加方便,客戶端JavaScript 可以簡單的通過evil()進(jìn)行JSON 數(shù)據(jù)的讀取,但JSON 對數(shù)據(jù)的描述性和XML 相比較差。
(七)流行度
XML 已經(jīng)被業(yè)界廣泛的使用,而JSON 才剛剛開始,只是在Ajax 這個(gè)特定的領(lǐng)域。在普通的Web應(yīng)用領(lǐng)域,開發(fā)者經(jīng)常為XML 的解析傷腦筋,無論是服務(wù)器端生成處理XML,還是客戶端用JavaScript 解析XML ,都常常導(dǎo)致復(fù)雜的代碼,極低的開發(fā)效率。
實(shí)際上,對于大多數(shù)Web 應(yīng)用來說,它們根本不需要復(fù)雜的XML 來傳輸數(shù)據(jù),XML 宣稱的擴(kuò)展性在此就很少具有優(yōu)勢;許多Ajax 應(yīng)用甚至直接返回HTML 片段來構(gòu)建動(dòng)態(tài)Web 頁面。和返回XML 并解析它相比,返回HTML 片段大大降低了系統(tǒng)的復(fù)雜性,但同時(shí)缺少了一定的靈活性。同XML 或HTML 片段相比,數(shù)據(jù)交換格式JSON提供了更好的簡單性和靈活性。
五、結(jié)束語
通過手機(jī)移動(dòng)終端來訪問Web 服務(wù)器已成為眾多用戶的選擇,學(xué)生通過手機(jī)隨時(shí)隨地訪問教務(wù)系統(tǒng),在手機(jī)上和同學(xué)們進(jìn)行學(xué)習(xí)交流等已成為廣大高校學(xué)生的需求,但從另一方面來講,流量的大量消耗也成為了學(xué)生們的負(fù)擔(dān)。而JSON是一種輕量級的數(shù)據(jù)交換格式,能夠生成更小的文檔,且其在JavaScript 腳本中更易于使用。其基本思想是,把自己實(shí)現(xiàn)為JavaScript 開發(fā)中XML數(shù)據(jù)操作的主要替代者,利用其簡單的數(shù)據(jù)格式,較小帶寬的占用,代碼開發(fā)量小,兼容性強(qiáng),解析速度快,開發(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)載請注明出處:拓步ERP資訊網(wǎng)http://www.hanmeixuan.com/
本文標(biāo)題:Android移動(dòng)終端與服務(wù)器數(shù)據(jù)傳輸?shù)难芯?/a>
本文網(wǎng)址:http://www.hanmeixuan.com/html/consultation/10839712255.html