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