一、引言
随着3G时代的到来,为了让手机用户能够在任何时候,任何地方,以任何形式查询手机校园助手所提供的服务,一种高效的办法就是将应用系统的功能拓展到手机终端,在手机上通过移动网和互联网访问Web 网站并处理各项业务。从用户需求的角度来讲,将手机校园助手提供的服务通过现代的先进技术拓展到手机终端是一项具有极大潜在的用户需求,而基于Android 平台的手机应用已成为必然的发展趋势,它是一个开放的手机平台,从发布到推广,在短短的时间内以惊人的速度占据大量的智能手机市场,而且将继续扩大其用户量。通过对Android 提供的API 访问Web 服务器进行数据传输的研究,认为Android 提供的技术在框架上有很大的优势,但是Android 最常用的方式就是以XML 格式的文件作为信息交换的媒介,这使其存在许多不足。首先,XML 格式文件存储了大量的冗余信息,相对于JSON 格式的文件需要占用更多的带宽。其次,XML 的数据表示过于正规和繁琐,对移动和嵌入式应用程序尤其如此,这使其对XML 格式的文件进行解析相比JSON 格式的文件更复杂。因此,在具体提取数据和传输数据的细节上还需要增加新的技术来弥补,而JSON 是一种轻量级的数据传输格式,允许轻松地将JavaScript 对象转换成可以随请求发送的数据,在保障安全性的同时,解决了XML的缺陷。
二、基于JSON 的数据传输技术
随着智能手机的普遍使用,使用移动终端访问浏览器的需求量越来越大,人们获取信息的途径也越来越多,Servlet 技术由于具有可移植性,稳健性和易开发性而被广泛应用,它的主要功能在于交互式地浏览和修改数据生成动态Web 内容,其过程为:客户端发送请求至服务器端— → 服务器将请求信息发送至Servlet — → Servlet 生成响应内容并将其传给Server — → 服务器将响应返回给客户端。以实际项目中Android 客户端向学校教务系统的Web 服务器发送HTTP 的GET 和POST请求为例来进行说明,其系统框架设计如图1 。
图1 基于JSON的系统框架设计
在发送HTTP 请求的过程中,使用JSON 作为数据传输的过程如下:
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) ;
//发送请求
HttpResponse httpResponse = new
DefaultHttpClient().execute(request) ;
//得到应答的字符串,数据使用JSON 格式保存
String retSrc = EntityUtils.toString(httpResponse.getEntity()) ;
//生成JSON 对象
JSONObject result = new JSONObject(retSrc) ;
String token = result .get("token") ;
......
当网页由于频繁访问而使流量的消耗过大时,和XML 的数据传输格式相比,JSON 作为一种更轻、更友好的Web Services 客户端的格式,大大增强了用户体验。它不仅易于阅读和编写,同时也易于机器解析和生成,其工作原理如下:当学生通过手机客户端使用HTTP 协议发送已序列化的JSON 消息到服务器端,服务器端通过反序列化JSON 消息,根据客户端请求进行相应的操作后,把请求的结果序列化成JSON 消息返回给客户端,客户端获取到返回的JSON 消息后,反序列化成具体需要的数据,从而大大提高了数据传输效率,节省了时间。
三、基于JSON 和XML 格式数据传输对比的实际应用
(一)JSON 和XML 数据传输时间对比
JSON 相对于XML 来讲,数据的体积小,速度远远快于XML 。JSON 占用带宽小,浏览器解析速度快,数据格式较简单,都是压缩的,而XML 文件格式文件庞大,格式复杂,传输占用带宽大,服务器端和客户端都需要花费大量代码来解析XML 。为了更好地比较JSON 和XML 的传输效率,我们通过使用JSON 和XML 两种数据传输格式对同一个数据库文件的学生信息进行数据传输并记录传输时间。其中:
1.JSON 的数据传输格式如下:
"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 的数据传输格式如下:
< ? 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 解析结果
由于网络不稳定因素,实验数据存在一定的波动,统计结果如表1 :
表1 JSON 和XML 数据传输时间对比
实验数据表明,对于轻量级的数据,JSON 的传输效率明显高于XML 。这是因为在Android 开发框架中,数据持久层都是使用面向对象的对象关系映射框架开发的,使开发着必须完全遵守面向对象的开发方法,但采用以XML 格式文件作为信息交换媒介,需要将数据持久层查询的对象映射为XML 文件,然后传送给Android 客户端,再由Android 客户端进行解析并封装成对象,或者与上述对象相反的过程。而JSON 是利用JSON 对象将其直接转化为脚本,大大提高了其传输效率,提高了用户体验。
(二)JSON 和XML 数据传输安全性对比
1.JavaScript 的Eval()函数
在保障数据传输效率的同时,安全性的保障也是我们目前面临的重要问题,而JSON 本来是JavaScript 的一个安全的子集,不含有赋值和调用。因此在将JSON 数据转换成为JavaScript 对象的时候,我们包括许多JavaScript 库都使用Eval 函数。这意味着获取的JSON 数据将被解析并执行,尤其是当有些数据是来自用户输入的时候,可能会带来意想不到的安全性问题。攻击者可以利用这点发送畸形、恶意的JSON 数据,这样Evial 函数就会执行这些恶意代码。
如发送以下学生信息代码:
Window.location = "< a
href = " http ://badsite.com" > http ://badsite.com </a> ?" +document.cookie ;
student :{
"no" :"20091213" ,
"name" :"aaa" ,
"math" :"86"
"english" :"90"
....
}
上面的代码会导致浏览器把用户的Cookie 数据提交到一个流氓网站,其中一种防止不安全代码出现的解决办法,是通过浏览器原生支持的JSON.parse(str)方法读取JSON 数据,目前已经得到大部分主流浏览器的支持(IE8 +,Firefox 3.5+,Chrome4 +/Safari4 +,Opera10 +),而在不支持原生JSON 对象的浏览器上面可以使用parseJSON方法进行读取,parseJSON 采用解析器验证读入的代码是否真的是JSON 代码,这样就提供了较好的安全性,但由于这是用模拟的方式读取,速度上会比Eval()慢。因此,在使用JSON 作为数据交换格式的时候,我们可以使用正则表达式来检查JSON 数据是否包含有恶意代码关键字,以此来保障JSON 的安全性。
2.跨站访问问题
JSON 数据传输的另外一个安全性问题则是跨站请求伪造(Cross-site request forgery ,简称CSRF 或XSRF) ,增加了用户数据传输的安全性隐患。对于这个问题,由于JavaScript 采用了称为“沙盒”的机制,这种机制限制JavaScript 引擎仅能引入同一个站点的代码,因而某种程度上提高了JSON 的安全性,确保用户数据安全传输而不会使数据泄漏。
四、JSON 与XML 对比
(一)可读性
JSON 和XML 的可读性可谓不相上下,一边是简易的语法,一边是规范的标签形式,很难分出胜负。XML 和JSON 都是使用结构化方法来标记数据的,而JSON 也提供了一种具有嵌套数据元素的结构,就像XML 一样。与XML 相同,JSON 也是基于文本的,且它们都使用Unicode 编码,且其与XML 一样具有可读性。
(二)可扩展性
XML 天生有很好的扩展性,JSON 当然也有,没有什么是XML 能扩展,JSON 不能的,不过JSON可以存储复合对象,有着XML 不可比拟的优势。从主观上来看,JSON 更为清晰且冗余更少,而且JSON 网站提供了对JSON 语法的严格描述,只是描述较简短。从总体来看,XML 比较适合于标记文档,而JSON 却更适于进行数据交换处理,一个JSON 文档的每一个实例都负责描述一个对象,其具体的描述是通过使用嵌套的对象,数组,字符串,数字,布尔值或null 值来实现的。
(三)数据交换格式的分析
XML 是一种用于描述信息存储格式的语言,其优点是健壮性和描述性强,而且是新一代开放\可互操作的Web Service 选用的通信数据格式。在移动应用程序中,开放者通常自己创建数据交换格式或可扩展标记语言XML 。前者的优势是可针对特殊定情况进行调整,从而最大限度的提高性能,并最大限度的利用计算机资源。当在HTTP 上使用后者时,其优势在于它是事实上的数据交换标准。另外,在XML 中使用的基于文本的表示形式使其易于调试。这两种放放风各有其缺陷,前者本质是专用的\非标准的,并可能是不可互操作的,而后者数据表示过于正规和繁琐,对于移动和嵌入式应用程序,JSON 是一种轻量级的数据交换格式,是基于文本的,具有良好的可读性且易于调试,JSON 支持所有基本数据类型的表示法,并提供将这些数据类型相互解析为Java 类型的方法,对于轻量级应用,JSON 数据交换格式能够较好的节省手机的计算资源,减少网络传输时间,加快网络传输速度。
(四)编码难度
XML 有丰富的编码工具,比如Dom4j 、JDOM等,JSON 也有json .org 提供的工具。但是JSON 的编码难度相对XML 容易许多,即使不借助工具也能写出JSON 的代码,可是要写好XML 就比较复杂,JSON 可以将JavaScript 对象中表示的一组数据转换为字符串,然后就可以在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符串从Web 客户机传递给服务器端程序。
(五)解码难度
XML 的解析要考虑子节点和父节点,相对来说较复杂,而JSON 的解析难度几乎为零,这一点是XML 无法比拟的。JSON 和XML 同样拥有丰富的解析手段,XML 解析方式有两种:一是通过文档模型解析,也就是通过父标签索引出一组标记,但这样必须在预先知道文档结构的情况下使用,无法进行通用的封装。另外一种方法是遍历节点,这个可以通过递归来实现,不过解析出来的数据仍旧是形式各异,往往也不能满足预先的要求。
凡是这样可扩展的结构数据解析起来一定都很困难,JSON 也同样如此,但如果预先知道JSON 结构的情况下,使用JSON 进行数据传递就更加方便快捷,可以写出很实用美观可读性强的代码。
(六)交互性
JSON 和JavaScript 的交互更加方便,客户端JavaScript 可以简单的通过evil()进行JSON 数据的读取,但JSON 对数据的描述性和XML 相比较差。
(七)流行度
XML 已经被业界广泛的使用,而JSON 才刚刚开始,只是在Ajax 这个特定的领域。在普通的Web应用领域,开发者经常为XML 的解析伤脑筋,无论是服务器端生成处理XML,还是客户端用JavaScript 解析XML ,都常常导致复杂的代码,极低的开发效率。
实际上,对于大多数Web 应用来说,它们根本不需要复杂的XML 来传输数据,XML 宣称的扩展性在此就很少具有优势;许多Ajax 应用甚至直接返回HTML 片段来构建动态Web 页面。和返回XML 并解析它相比,返回HTML 片段大大降低了系统的复杂性,但同时缺少了一定的灵活性。同XML 或HTML 片段相比,数据交换格式JSON提供了更好的简单性和灵活性。
五、结束语
通过手机移动终端来访问Web 服务器已成为众多用户的选择,学生通过手机随时随地访问教务系统,在手机上和同学们进行学习交流等已成为广大高校学生的需求,但从另一方面来讲,流量的大量消耗也成为了学生们的负担。而JSON是一种轻量级的数据交换格式,能够生成更小的文档,且其在JavaScript 脚本中更易于使用。其基本思想是,把自己实现为JavaScript 开发中XML数据操作的主要替代者,利用其简单的数据格式,较小带宽的占用,代码开发量小,兼容性强,解析速度快,开发效率高,灵敏度高等优点有效地解决了XML 所造成的缺陷,大大减小了移动浏览时的网络流量,在确保数据安全传输的同时大大提高了数据传输效率,体现了其优越性。
核心关注:拓步ERP系统平台是覆盖了众多的业务领域、行业应用,蕴涵了丰富的ERP管理思想,集成了ERP软件业务管理理念,功能涉及供应链、成本、制造、CRM、HR等众多业务领域的管理,全面涵盖了企业关注ERP管理系统的核心领域,是众多中小企业信息化建设首选的ERP管理软件信赖品牌。
转载请注明出处:拓步ERP资讯网http://www.toberp.com/
本文网址:http://www.toberp.com/html/consultation/10839712255.html