JSON转换器

引言

由最初的Applet,到后来一系列JSP/Servlet相关规范的发布,Java语言在Web应用开发领域得到了广泛的应用。因特网缔造了Web世界,Web的基本协议是HTTP。

本章将讨论Web应用系统中的一个强大组件:JSON转换器。

8.1.1  传统Web应用

一个传统的Web应用,如图8‑1所示。

 

图8-1  传统Web应用

图8-1中,用户使用浏览器访问Web网页时,典型交互序列为:

(1)用户点击Web页面的链接;

(2)浏览器向目标Web Server 发送HTTP请求;

(3)Web Server 对HTTP请求进行解析和业务处理;

(4)Web Server 将处理后的结果,形成一个新的Web页面,发送给浏览器;

(5)浏览器接收到WebServer 返回的结果页面,进行解析,向用户展示一个新的页面。

从用户点击开始,到第(5)步新页面显示之前,浏览器的页面内容变成空白,用户无法进行其他任何操作,只能苦苦等待浏览器的响应。

因此,可以看出,传统的Web应用有如下不足:

(1)页面全部刷新,造成浏览器和服务器的处理负载太重,处理时间变长。实际应用中,我们往往只是需要改变页面的一小部分内容,而大部分内容保持不变,不需要在浏览器和服务器之间来回传递。

(2)交互过程是同步阻塞方式,浏览器的响应时长,依赖于服务器的响应时间。用户必须等待前一个操作完成,才可以进行下一个操作,前一个操作未完成时用户只能等待,用户体验很差。

而我们使用的桌面软件,如Word,Excel,PowerPoint等,用户体验就很好,不会出现屏幕变白、用户必须等待的情况。根本的原因在于,这些桌面软件,没有与远程服务器交互的过程,所有操作都是在本地进行的,因此就没有对服务器响应时间的依赖性。那么,有没有可能,让Web应用,也像桌面软件那样,不依赖服务器的响应时间,改善用户体验呢?

8.1.2  Ajax应用

1998年前后,一种新的技术开始出现,那就是:Ajax。Ajax英文全称为“Asynchronous JavaScript and XML”(异步JavaScript和XML),是一种创建交互式网页应用的网页开发技术,正确读音应该为“ei zhai ke si”,国际音标为【'eidзeks】。

使用Ajax技术,Web应用的交互序列如图8-2所示。

 

图8-2  基于Ajax 技术的Web应用交互序列

使用Ajax技术构建Web应用后,用户使用浏览器访问Web页面时的交互序列为:

(1)用户点击Web页面的链接;

(2)Web页面向Ajax引擎提交异步调用请求;

(3)Ajax引擎向目标Web Server 异步发送HTTP请求;

(4)Web Server 对HTTP请求进行解析和业务处理;

(5)Web Server 将处理后的业务结果,回送给Ajax引擎;

(6)Ajax引擎用Web Server 回送的结果,回调Web页面指定的函数;

(7)Web页面指定的函数对Web Server回送的结果进行解析,局部刷新页面。

与传统的Web应用相比,使用Ajax技术带来了如下改变:

(1)用户点击页面后,操作请求被异步处理,屏幕内容不会变白,用户不必等待,就可以进行下一个操作;

(2)用户的操作请求被Web Server处理完毕后,浏览器仅更新页面的局部部分,不需要更新整个页面。因此,刷新速度非常快,改善了用户体验;

(3)页面通过Ajax引擎仅向Web Server 提交业务必需的数据,供Web Server处理,而不是提交整个页面。而Web Server也仅仅回送Web页面需要更新的数据,而不是回送整个页面。这样大大减少了网络通信量,加快 了浏览器和Web Server 的处理速度,提高了客户机和服务器双方面的性能。

第一个允许浏览器客户端脚本发送HTTP请求(XMLHTTP)的Ajax引擎由Outlook Web Access小组编写。该引擎原属于微软Exchange Server,并迅速成为了Internet Explorer 4.0[3]的一部分。部分观察家认为,Outlook Web Access是第一个应用了Ajax技术的成功商业应用程序,并成为包括Oddpost的网络邮件产品在内的许多产品的领头羊。但是,直到2005年初,许多事件才使得Ajax被大众所接受。Google在它著名的交互应用程序中使用了异步通讯,如Google讨论组、Google地图、Google搜索建议、Gmail等。Ajax这个词由《Ajax: A New Approach to Web Applications》一文所创,该文的迅速流传提高了人们使用该项技术的意识。另外,对Mozilla/Gecko的支持使得该技术走向成熟,变得更为易用。

Ajax并不是一种全新的技术,实际上它是多种已有技术的综合,包括Javascript、XHTML和CSS、DOM、XML和XSTL、XMLHttpRequest,核心内容为:

l         使用XHTML和CSS标准化呈现;

l         使用DOM实现动态显示和交互;

l         使用XML和XSTL进行数据交换与处理;

l         使用XMLHttpRequest对象进行异步数据读取;

l         使用Javascript绑定和处理所有数据。

Ajax前景非常乐观,可以提高系统性能,优化用户界面,极大改善用户体验。目前在开源项目和商业产品上,都涌现了大量Ajax 框架、类库、开发工具,Ajax的商业应用,也越来越多。

8.1.3  数据规则

如果使用Ajax技术,从开发的角度来看,相比传统的Web开发,有如下方面需要改动:

(1)Web页面客户端程序需要大量使用JavaScript,实现Ajax 异步请求的提交、服务器回送结果的解析和呈现;

(2)Web服务端程序需要改动,仅回送需要的数据,而不是整个页面;

(3)需要定义客户端程序和服务端程序之间传送数据的规则。客户端程序和服务端程序是使用不同开发语言编写的,因此必须定义数据规则,才能使客户端和服务端程序能够对数据进行正确解析。

本章主要讨论第三点:Ajax客户端和服务端之间的数据规则定义、编码和解码。数据规则定义,目前业界主要有三种:

(1)XML方式;

(2)JSON方式;

(3)自定义方式。

第一种方式,使用XML,可以精确表示任意复杂的数据。Ajax中的x,就是指XML。另外,XML有非常多的国际标准、规范、类库、开发工具支持,因此XML曾经一度被认为是Web客户机和服务器通信的标准方式。但随着开发的不断深入,技术人员发现,使用XML表示数据比较笨拙,编码后产生的数据量很大,网络负载增大很多。另外,使用Ajax的客户端程序,大量使用JavaScript 代码,而JavaScript 语言本身没有对XML的内置支持,必须依赖第三方的类库才能进行解析。因此,使用XML作为Ajax应用的客户端和服务端之间的数据规则,不是非常理想。

而第三种方式,是各个开发框架、类库等由开发者自行定义的规则,是私有规则,不是国际标准、规范,因此不推荐使用。

第二种方式,JSON,全称是“JavaScript Object Notation”,是一种轻量级的数据交换格式。它基于JavaScript Programming Language, Standard ECMA- 262 3rd Edition - December 1999的一个子集,是JavaScript面向对象语法的一个子集,在 JavaScript 中处理 JSON 数据不需要任何特殊的 API 或工具包。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, Javascript, Perl, Python等),因此易于人阅读和编写,同时也易于机器解析和生成。这些特性使JSON成为理想的数据交换语言。

JSON 的语法非常简洁直观,主要支持两种语法结构:

l         “名/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object)、记录(record)、结构(struct)、字典(dictionary)、哈希表(hash table)、有键列表(keyed list),或者关联数组 (associative array)。

l         值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。

比如,一个用户信息的数据,用JSON 表示如下:

{   

         username : "andy",  

         age : 20,  

         info : { tel: "123456", cellphone : "98765"},  

         address :  

                           [  

                                     {city : "beijing", postcode : "222333"},  

                                     {city : "newyork", postcode : "555666"}  

                           ]  

}  

确实比XML 表示方式简洁了许多。因此,在Ajax 应用中,JSON 越来越流行,应用日益广泛。

本书读者使用Java 语言进行Web 服务端程序的开发。纵观各种Ajax类库或者框架,都没有提供在Java 服务端进行JSON编码和解码的独立组件,从这些框架中提取也非常困难。而对于Ajax Web应用的开发,Ajax引擎已经由浏览器提供,如果我们再有一个独立的JSON转换组件,实现客户端JavaScript数据和服务端Java数据之间的双向转换,那么Web客户端程序与Web服务端程序之间交互所需要的通路已经完全畅通,开发Ajax应用将变得非常容易,并且我们也不受限于现有的各种Ajax框架,完全可以使用JSON转换组件,与其他组件集成,搭建满足自己需要的Web应用框架。

因此,决定设计一个通用的JSON转换组件,在Java服务器端,实现Java数据和JavaScript数据之间的双向转换。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值