(计算机科学与技术专业论文)ajaxrest架构的研究与开发框架的实现.pdf_第1页
(计算机科学与技术专业论文)ajaxrest架构的研究与开发框架的实现.pdf_第2页
(计算机科学与技术专业论文)ajaxrest架构的研究与开发框架的实现.pdf_第3页
(计算机科学与技术专业论文)ajaxrest架构的研究与开发框架的实现.pdf_第4页
(计算机科学与技术专业论文)ajaxrest架构的研究与开发框架的实现.pdf_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

a j a x r e s t 架构的研究与开发框架的实现 摘要 i n t e r n e t 的使用带来了一次又一次的技术革命,而这场革命从来 就没有停止过。近几年来,w e b2 0 逐渐成为了这场革命的核心。在 w e b2 0 背后的诸多技术中,a j a x 技术是被用户和开发人员广为接受 的技术之一。 a j a x 是一种w e b 客户端技术,它在组合了一些传统技术的基础 上,增强了与服务端通信的能力。应该说a j a x 本质上是一种智能的 w e b 客户端,它增强了客户端的通信能力,使得客户端可以异步地与 服务端交互,避免了w e b 页面的整体刷新,提升了w e b 应用的用户 友好性;它增强了客户端的处理能力,从而使得w r e b 服务器在一定 程度上得到解放,提升了w r e b 应用的可伸缩性。 a j a x 技术的这些特点,使得a j a x 应用在诸多方面不同于传统的 w e b 应用。但是在a j a x 应用的开发上,许多开发人员,还是习惯于 使用传统的w e b 应用架构和开发方法,结果是,付出的成本较高, 而获得的回报却不很理想。 本文正是基于a j a x 应用开发过程中存在的问题,从分析a j a x 技 术和应用的特点入手,为a j a x 应用寻找一种较为适用的架构模式。 在实践过程中,我们研究了现有的软件架构,使用软件架构的推导方 法得出了a j a x r e s t 架构风格。a j a x r e s t 架构风格遵守了r e s t 的 主要架构约束,并且较好地适应了a j a x 应用的特点。结合实际的项 目,实现了一个基于a j a x r e s t 架构风格的a j a x 应用开发框架。使 用该框架,可以以较小的成本开发a j a x 应用。最后,通过使用该框 架开发了a j a x 应用,验证了开发框架的有效性和a j a x r e s t 架构风 格的有效性。 关键词软件架构a j a xr e s t 开发框架 r e s e a r c ho n a j a x r e s ta r c h i t e c t u r e a n di m p l e m e n t a t i o no f d e v e l o p i n gf r a m e w o r k a b s t r a c t m a n yr o u n d so fr e v o l u t i o nh a v ee m e r g e ds i n c et h eb o r no fi n t e r n e ta n da n e w r o u n di ss t i l lg o i n go n i nr e c e n ty e a r s r e b2 0s t a n d sf o rt h ec o r eo fn e wr o u n d r e v o l u t i o n a n db e h i n dt h ew e b2 0 ,an e wt e c h n o l o g yn a m e da j a xb e c o m e s m o r ea n d m o r ep o p u l a r a j a xi sat e c h n o l o g yu s e di nb r o w s e r a j a xi s t h ec o m b i n a t i o no fs e v e r a l t r a d i t i o n a lt e c h n o l o g i e sa n di ti m p r o v e st h ea b i l i t yo fc o m m u n i c a t i o nb e t w e e ns e r v e r a n db r o w s e r a c t u a l l ya j a xi sa ni n t e l l i g e n tw e bc l i e n t i te n a b l e st h a tt h eb r o w s e rc a n c o m m u n i c a t i o nw i t ht h es e r v e ra s y n c h r o n o u s l ya n da v o i dt h er e f r e s ho fw h o l ew e b p a g e t h e nt h ea j a xa p p l i c a t i o nh a saf r i e n d l yu s e ri n t e r f a c e a j a xi m p r o v e s t h e c o m p u t i n ga b i l i t yo f b r o w s e ra n dd e c r e a s et h eb u r d e no fs e r v e r t h e n 恸a p p l i c a t i o n b e c o m e sm o r es c a l a b l e t h o s ec h a r a c t e r i s t i co fa ja xm a k ei td i f f e r e n tf r o mt r a d i t i o n a lw e ba p p l i c a t i o n s b u tw h e ni tc o m e st od e v e l o p i n gn a xa p p l i c a t i o n ,m a n yd e v e l o p e r sh a v eu s e dt o s o f t w a r ea r c h i t e c t u r e sa n dd e v e l o p i n gm e t h o d sw h i c hi si n v e n tf o rt r a d i t i o n a lw e b a p p l i c a t i o n s a sar e s u l t ,o u r i n t e r e s ta l w a y si sn o tp r o p o r t i o n a lw i t ho u rc o s t b a s e do nt h e s ep r o b l e m se x i s t i n gi na j a xd e v e l o p i n g ,w eh a v ea n a l y z e da j a x t e c h n o l o g ya n da j a xa p p l i c a t i o n ,a n dt r i e dt o f i n das u i t a b l ea r c h i t e c t u r ef o ra j a x a p p l i c a t i o n i np r a c t i c e w eh a v es t u d i e de x i s t i n g a r c h i t e c t u r ea n di n d u c e dt l l e a j a x re s ta r c h i t e c t u r es t y l e t h es t y l ei sf o l l o w e dt h em a i nc o n s t r a i no fr e s t a n d t h em a i nc h a r a c t e r i s t i co fa j a xa p p l i c a t i o n s a tt h ee n d ,c o m b i n e dw i t has o f t w a r e p r o j e c t ,w ed e v e l o pa na j a xd e v e l o p i n gf r a m e w o r kw h i c hi sb a s e do na j a x r e s t a r c h i t e c t u r es t y l e a n dt h ef r a m e w o r kc a nb eu s e dt od e v e l o pa j a ) 【a p p l i c a t i o nb y p a y i n gl i t t l ee f f o r t f i n a l l yw eu s ef r a m e w o r kt od e v e l o pa j a xa p p l i c a t i o n sa n dt h e e f f e c t i v e n e s so ff r a m e w o r ka n da ja x r e s ta r c h i t e c t u r es t y l eh a v e b e e np r o v e n k e y w o r d ss o f t w a r ea r c h i t e c t u r ea j a x r e s t d e v e l o p i n gf r a m e w o r k 独创性( 或创新性) 声明 本人声明所呈交的论文是本人在导师指导下进行的研究工作及取得的研究 成果。尽我所知,除了文中特别加以标注和致谢中所罗列的内容以外,论文中不 包含其他人已经发表或撰写过的研究成果,也不包含为获得北京邮电大学或其他 教育机构的学位或证书而使用过的材料。与我一同工作的同志对本研究所做的任 何贡献均己在论文中作了明确的说明并表示了谢意。 申请学位论文与资料若有不实之处,本人承担一切相关责任。 本人签名: 墨为 日期:2 盟墨:2 :狻 关于论文使用授权的说明 学位论文作者完全了解北京邮电大学有关保留和使用学位论文的规定,即: 研究生在校攻读学位期间论文工作的知识产权单位属北京邮电大学。学校有权保 留并向国家有关部门或机构送交论文的复印件和磁盘,允许学位论文被查阅和借 阅;学校可以公布学位论文的全部或部分内容,可以允许采用影印、缩印或其它 复制手段保存、汇编学位论文。( 保密的学位论文在解密后遵守此规定) 保密论文注释:本学位论文属于保密在一年解密后适用本授权书。非保密论 文注释:本学位论文不属于保密范围,适用本授权书。 本人签名: 导师签名: 日期:迎登:2 :塑 日期:4 塑爱五:丛 1 1 课题背景 第一章绪论 毫无疑问,w e b 是当今世界中规模最大的应用。近几年来,伴随着w 曲应 用领域的扩展和应用规模的扩大,w e b 领域正在发生着一场革命。一些新的概念, 比如w e b2 0 ,变得异常活跃。一些新的技术,比如a j a x ,应用的领域变得越来 越广。 目前,越来越多的商业w e b 站点和商业w 曲应用选择基于a j a x 技术来实现。 a j a x 是一种新的w 曲客户端技术,它在组合了一些传统的客户端技术的基础上, 增加了与服务端异步交互的能力。这一技术上的小小改进,增强了w 曲应用的 交互能力和用户的使用体验。a j a x 正在推动w e b 的进一步广泛发展。 a i a x 技术具有其自身的特点。新技术为我们带来了新的机遇,同时也带来 了新的挑战。使用a j a x 技术,客户端的处理能力得到加强,从而可以减轻服务 端的负担,相应地提高了w e b 应用的可扩展能力,但是客户端的编程逻辑变的 较为复杂。使用a j a x 技术,w e b 应用的组成内容也发生了改变,客户端可以轻 松地与不同的服务端交互,把得到的响应内容组合成新的应用,但是w e b 服务 的接口设计必须遵守一定的规范。 技术上的小小改进,将引发我们对w e b 应用架构设计的重新思考。在如何 有效开发a j a x 应用方面,许多开发者还习惯于传统的开发思路和架构模式,结 果在a j a x 应用的开发上,付出的成本较高,而获得的回报却不很理想。这是因 为:一方面,传统的w e b 架构本身就存在着许多问题,另一方面,h j a x 是一种 新的应用形式,把传统方法应用于a j a x ,这两者之间存在着不匹配。 在一个新的w e b 应用中是否应该采用a j a x 技术,对于开发人员来说,面临 着许多挑战。a j a x 应用有哪些技术特点? 传统w 曲应用和a j a x 应用在软件架构 上有哪些相同和不同之处? 现有a j a x 库是否已经完全支持a j a x 应用的开发? 这 些库背后隐藏了什么? 为我们提供了什么? 在开发过程中有哪些问题应该引起 特别注意? 与传统w 曲应用相比,哪些架构元素没有变化,而哪些必须被新的 解决方案替换? 要解决以上问题,需要从软件架构的层次上对a j a x 应用进行研究。尽管a j a x 技术本身已经得到了广泛的关注,在h t t p :a j a x p a t t e m s o r g f r a m e w o r k s 站点上, 截至目前有1 5 0 多个a j a x 库,但是目前仍然缺少一个关于a j a x 应用的一致的、 精确的架构描述。 在本课题的研究过程中,我们分析了现有软件架构中的一些概念和原则,并 试图把这些概念和原则用于解决a j a x 应用中的问题,为当前广泛使用的a j a x 应 用推导出了一种较为适用的架构模式a j a x r e s t ,并对这一架构能解决的问题进 行了阐述。此外,结合实际项目,实现一个基于a j a x r e s t 架构的a j a x 应用的 开发框架。使用该框架可以方便快捷地开发a j a x 应用。最后使用该开发框架, 开发了a j a x 应用,验证了架构模式和开发框架的有效性。 1 2 本论文的主要工作 为a j a x 这种新的应用形式寻找与其相适应的软件架构模式和开发方法是本 论文的主要工作。在开展本课题的研究过程中,我们结合实际的软件开发项目, 通过对a j a x 技术特点的分析,r e s t 架构风格的分析,以及两者相结合的可能 性的分析,得出了a j a x r e s t 架构。 并实现了一个基于这一架构的开发框架,最终把开发框架用于我们的项目 中,论证了a j a x r e s t 架构和开发框架的有效性。 本论文主要由以下几部分组成: 1 a j a x 技术特点研究,以及a j a x 应用特点研究。作为新兴的客户端技术, a j a x 具有异步通信,动态构造w e b 页面,事件驱动,与多服务端交互等一系列 特点,这些特性在传统的w e b 应用中都不存在,从而决定了不能简单的使用传 统方法开发a j a x 应用。 2 现有架构风格的特性研究。重点讨论了r e s t 架构风格,r e s t 架构风 格作为一种基于网络的分布式超媒体应用的指导架构风格,已经成功的指导了一 系列w e b 标准的开发和w e b 应用的构建。r e s t 架构风格具有一系列特性,正 是这些特性,保证了r e s t 架构风格的广泛适用性。 3 把r e s t 架构风格用于a j a x 应用的可行性研究,在分析了两者结合可行 的基础上,得出了a j a x r e s t 架构。主要使用软件架构中的架构属性、架构元 素、架构视图、架构约束等概念,详细地从不同角度分析了a j a x 应用应该具备 的架构特性。 4 实现了基于a j a x r e s t 架构的a j a x 应用的开发框架。对服务端组件和客 户端组件,分别基于a j a x r e s t 架构风格,给出了相应的实现方案,体现了把 软件理论应用于软件实践的方法。其中我主要参与了客户端组件的开发,并独立 完成了客户端组件相关模块的开发。 5 使用开发框架开发了a j a x 应用,对开发框架的有效性进行了验证。同时 也总结了使用该框架的经验教训。 第二章a j a x 技术研究 本章首先讨论a j a ) 【技术的特点。包括a j a 】【技术的几个相关组件,以及他们 之间是如何相互配合工作的;并对a j a x 技术的主要特性作相关讨论。其次,讨 论了a j a x 应用的特点,并将它与传统的w 曲应用进行了对比,突出强调了a j a ) 【 应用的新特性,以及面临的主要问题。 2 1 a j a x 的相关技术 a j a 】【( a s y n c h r o n o u sj a v a s c r i p ta n dx m l ) 技术代表异步j a v a s c r i p t 与x m l , 是一种新兴的w e b 客户端技术。它的出现引发了一场新的w e b 革命。 a j a x 不是单一的技术,而是几种技术的集合。表2 - 1 简要介绍了这些技术以 及他们在a j a x 中所扮演的角色【。 表2 - 1a j a 】【的关键元素 j a v a s c r i p t d o 卜1 ( 文档对象模 型) c s s ( 层叠样式表) x m l h t t p r e q u e s t 对象 x m l 和】s o n j a v a s c r i p t 是通用的脚本语言,用来嵌入在某种应用之中。 w e b 浏览器中嵌入的j a v a s c r i p t 解释器允许通过 j a v a s c r i p t 程序与浏览器的很多内建的功能进行交互。 a j a x 应用程序是用j a v a s c r i p t 编写的。 d o m 以一组可以使用j a v a s c r i p t 操作的可编程对象展现 出w e b 页面的结构,通过使用脚本修改d o m ,a j a x 应用 程序可以在运行时改变用户界面,或者高效地重绘页面中 的某个部分。 c s s 是为w e b 页面元素提供一种可重用的可视化样式的 方法。它提供了简单而又强大的方法,以一致的方式定义 和使用可视化样式。在a j a x 应用中,用户界面样式可以通 过c s s 独立修改。 x 卜1 l h t t p r e q u e s t 对象允许w e b 程序员从w e b 服务器以 后台活动的方式获取数据。数据的格式通常是m l ,但是 也可以很好的支持任何基于文本的数据格式。 x 卜1 l 是客户端和服务端数据交换的格式。客户端在接收到 x m l 数据后,通过x s l t 转换x 卜1 l 数据到适当格式,用于 数据动态的展示。j s o n 是j a v a s c r i p t 对象的字符串化, 也可以作为一种数据交换的格式使用。 在a j a x 的应用程序中,j a v a s c r i p t 是关联其他几种技术的主要元素。在具体 的实现过程中,通过使用j a v a s c r i p t 绑定w e b 界面事件与事件处理程序,事件处 理程序通过x m l h t t p r e q u e s t 对象来与服务器进行异步通信,并把操作d o m 来 改变和刷新用户的界面作为与服务器进行异步通信的回调函数。最终伴随着用户 事件,不断地与服务器进行异步通信,从而不断地重绘和重新组织显示给用户的 数据。在此过程中通过使用c s s 为应用提供了一致的外观,通过使用d o m 动 态的构造w 曲页面。这些技术的使用,将a j a x 应用模型与传统的w 曲模型区分 开来,图2 - 1 显示了两者之间的区别。 传统) l o b 应用模型 a j a xw e b 应用模型 图2 - 1a j a x 应用模型与传统的w e b 模型 2 1 1x m l h t t p r e q u e s t 对象 x m l h t t p r e q u e s t 是a j a x 技术中最为重要的对象,正是这个对象使得a j a x 技术不同于其它的客户端技术。通过使用这个对象,a j a x 可以像桌面应用程序 一样只同服务器进行数据层面的交换,而不用每次都刷新界面,此外,也可以将 数据的处理和显示逻辑放在客户端处理,这样既减轻了服务器负担又加快了响应 速度、缩短了用户的等待时间。 i e 5 0 开始,开发人员可以在w e b 页面内部使用x m l h t t pa c t i v e x 组件扩 展自身的功能,不用从当前的w e b 页面导航就可以直接传输数据到服务器或者 从服务器接收数据。m o z i l l a l 0 以及n e t s c a p e 7 则是创建继承x m l 的代理类 4 x m l h t t p r e q u e s t ;对于大多数情况,x m l h t t p r e q u e s t 对象和x m l h t t p 组件很 相似,方法和属性类似,只是部分属性不同【2 1 。 x m l h t t p r e q u e s t 对象初始化: v a rh t t p r e q u e s t = f a l s e ; h i e 浏览器 h t t p r e q u e s t = n e wa c t i v e x o b j e c t ( “m s x m l 2 x m l h t t p ”) ; h t t p r e q u e s t = n e wa c t i v e x o b j e c t ( “m i c r o s o f t x m l h t t p ”) ; m o z i l l a 浏览器 h t t p r e q u e s t = n e wx m l h t t p r e q u e s t ( ) ; x m l h t t p r e q u e s t 对象的方法描述如下表2 - 2 : 表2 - 2x m l h t t p r e q u e s t 对象方法描述 方法描述 a b o r t ( ) 停止当前请求 g e t a i i r e s p o n s e h e a d e r s ( ) 作为字符串返回完整的 h e a d e r s g e t r e s p o n s e h e a d e r s ( “h e a d e r l a b e l ) 作为字符串返回单个的 h e a d e r 标签 o p e n ( 、m e t h o d , 设置请求的目标u r l , “u r l a s y n c f l a g i 、u s e r n a m e 【,n p a s s w o r d ”】) 方法,和其他参数 s e n d ( c o n t e n t ) 发送请求 s e t r e q u e s t h e a d e r ( ”l a b e l ;、v a l u e ”)设置h e a d e r 并和请求 一起发送 x m l h t t p r e q u e s t 对象的属性描述如下表2 - 3 : 表2 - 3x m l h t t p r e q u e s t 对象属性描述 属性 o nr e a d y s t a t e c h an g e 5 描述 状态改变的事件触发器 r e a d y s t a t e r e s p o n s e t e x t r e s p o n s e x m l s t a t u s s t a t u s t e x t 2 1 2j a v a s c r i p t 对象状态( i n t e g e r ) 0 = 未初始化 1 = 读取中 2 = 已读取 3 = 交互中 4 = 完成 服务器进程返回数据的文本版本 服务器进程返回数据的兼容d o m 的 x m l 文档对象 服务器返回的状态码,如:4 0 4 = “文 件未找到”、2 0 0 = “成功” 服务器返回的状态文本信息 j a v a s c r i p t 是一种基于对象( o b j e c t ) 和事件驱动( e v e n td r i v e n ) 并具有安 全性能的脚本语言。使用它可以把动态h t m l 超文本标记语言( d h t m l ) 、层 叠样式表( c s s ) 、x m l h t t p r e q u e s t 对象组合起来。从而可以开发客户端的应用 程序。它是通过嵌入在标准的h t m l 语言中实现的。它的出现弥补了h t m l 语 言的缺陷,增强了w e b 客户端的处理能力,具有以下几个基本特点【3 】【4 【5 】: 是一种脚本编写语言。j a v a s c r i p t 是一种脚本语言,它采用小程序段的 方式实现编程。像其它脚本语言,j a v a s c r i p t 同样也是一种解释性语言, 它提供了一个简易的开发过程。它的基本结构形式与c 、c + + 、v b 、d e l p h i 十分类似。但它不像这些语言一样,需要先编译,而是在程序运行过程 中被逐行地解释。它与h t m l 标识结合在一起,从而方便用户的使用操 作。 基于对象的语言。j a v a s c r i p t 是一种基于对象的语言,同时可以看作一 种面向对象的。这意味着它能运用自己已经创建的对象。因此,许多功 能可以来自于脚本环境中对象的方法与脚本的相互作用。 简单性。j a v a s c r i p t 的简单性主要体现在:首先它是一种基于j a v a 基本 语句和控制流之上的简单而紧凑的设计。其次它的变量类型是采用弱类 型,并未使用严格的数据类型。 安全性。j a v a s c r i p t 是一种安全性语言,它不允许访问本地的磁盘,并 不能将数据存入到服务器上,不允许对网络文档进行修改和删除,只能 通过浏览器实现信息浏览或动态互动。从而有效地防止数据的丢失。 6 动态性的。j a v a s c r i p t 是动态的,它可以直接对用户或客户输入做出响 应,无须经过w e b 服务程序。它对用户的反映响应,是采用以事件驱动 的形式进行的。所谓事件,就是指在w e b 页面中执行了某种操作所产生 的动作。比如按下鼠标、移动窗口、选择菜单等都可以视为事件。当事 件发生后,就会引起相应的事件处理程序对该事件进行响应。 跨平台性。j a v a s c r i p t 是依赖于浏览器本身,与操作环境无关,只要能 运行浏览器的计算机,并支持j a v a s c r i p t 的浏览器就可正确执行。从而 实现了“一次编写,到处运行 的特性。 j a v a s c r i p t 是一种描述语言,它可以被嵌入到h t m l 的文件之中。j a v a s c r i p t 语言可以做到回应使用者的需求事件,而不用任何的网络来回传输数据,所以当 用户做了某种操作后,它不用经过传给服务端处理,再传回来的过程,而直接可 以被客户端的应用逻辑所处理。 现在,可以通过j a v a s c r i p t 操作x m l h t t p r e q u e s t 来跟数据库打交道。 j a v a s c r i p t 在整个a j a x 中起到一个粘合剂的作用,将各种技术融合在一起,我们 可以通过它来操作d o m 和x m l ,与后台交互。 2 1 3d o m d o m ( d o c u m e n to b j e c tm o d e l ) 是提供给h t m l 和x m l 使用的一组a p i , 提供了文件的表述结构,并可以利用它改变其中的内容。脚本语言通过d o m 才 可以跟页面进行交互。w e b 开发人员可操作及建立文档的属性、方法以及事件都 以d o c u m e n t 对象来展现。其中,d o c u m e n t 就代表w e b 页面对象本身。 在传统的w e b 应用中,我们通常使用来自服务器的新的h t m l 流来刷新整 个页面,并通过提供新的h t m l 来重新定义用户界面;而在a j a x 应用中,用户 界面的更新主要是用d o m 来完成的。w e b 页面中的h t m l 标签被组织成一个 树状结构。树的根节点是 标签,它代表这个文档。在它的内部的 表现代表文档的主体部分,是可见的文档结构的根节点。在文档主体之内,有表 格、段落、列表以及其他的标签类型。 2 1 4c s s c s s 是w e b 设计沿用已久的部分,无论是在传统的w e b 应用还是在a j a x 应用中,c s s 都是一种频繁使用的技术。样式表提供了集中定义各种视觉样式的 方法,并且可以非常方便地设置在页面的元素上。样式表可以定义一些明显的样 7 式元素,例如颜色、边框、背景图片、透明度和大小等。此外,样式表还可以定 义元素相互之间的布局以及简单的用户交互功能【3 】【4 【5 1 。 在传统的w e b 应用中,样式表提供了一种很有用的方法,可以在某个地方 定义一些在很多其他页面中重用的样式。在a j a x 应用中,虽然我们不再把应用 思考为一些切换的页面,但是样式表可以用最少的代码动态地为元素设置预先定 义的外观。 2 1 5x m l 与j s o n x m l 是广为接受的w e b 数据交换格式。服务端根据客户请求的c o n t e n t t y p e 类型,决定返回相应的格式的数据。除了x m l 格式外,j s o n ( j a v a s c r i p to b j e c t n o t m i o n ) 也是一种被广泛使用的w e b 数据交换格式,特别是在a j a x 应用中, j s o n 和x m l 相比,更易于被j a v a s c r i p t 处理,而x m l 则具有更强的通用性。 两者各自适用于不同的场合。 2 2 与服务端交互的流程 在a j a x 应用中,客户端同服务器端的交互流程主要包括:初始化 x m l h t t p r e q u e s t 对象,绑定响应处理函数,发送请求,在响应处理函数中处理 服务端返回数据等步骤【1 】【2 】。 初始化x m l h t t p r e q u e s t 对象 为了让j a v a s c r i p t 可以向服务器发送h t t p 请求,必须使用x m l h t t p r e q u e s t 对象。使用之前,要先将x m l h t t p r e q u e s t 对象实例化。如前所述,各个浏览器 对这个实例化过程的实现不同,i e 以a c t i v e x 控件的形式提供,而m o z i l l a 等浏 览器则直接以x m l h t t p r e q u e s t 类的形式提供。为了使程序能够跨浏览器运行, 初始化x m l h t t p r e q u e s t 的方法如下: i f ( w i n d o w x m l h t t p r e q u e s t ) h t t p r e q u e s t = n e wx m l h t t p r e q u e s to ;m o z i l l a , s a f a r i ) e l s ei f ( w i n d o w a c t i v e x o b j e c t ) h t t p r e q u e s t = n e wa c t i v e x o b j e c t ( m i c r o s o f t x m l h t t p ”) ; i e ) 指定响应处理函数 接下来要指定当服务器返回信息时客户端的处理方式。只要将相应的处理函 数名称赋给x m l h t t p r e q u e s t 对象的o n r e a d y s t a t e c h a n g e 属性就可以了。比如: h t t p r e q u e s t o n r e a d y s t a t e c h a n g e = p r o c e s s r e q u e s t ; 需要指出的是,这个函数名称不加括号,不指定参数。也可以用j a v a s c r i p t 匿名定义函数的方式定义响应函数。比如: h t t p r e q u e s t o n r e a d y s t a t e c h a n g e = f u n c t i o n ( ) ) ; 发出h t t p 请求 指定响应处理函数之后,就可以向服务器发出h 盯曙请求了。这一步调用 x m l h t t p r e q u e s t 对象的o p e n 和s e n d 方法。 h t t p r e q u e s t o p e n ( g e t ,h t t p :w w w e x a m p l e o r g s o m e f i l e ,t r u e ) ; h t t p r e q u e s t s e n d ( n u l l ) ; o p e n 的第一个参数是h t t p 请求的方法,为g e t 、p o s t 或者h e a d 。 o p e n 的第二个参数是目标u r l 。这个u r l 可以是任何的u r l ,包括需要 服务器解释执行的页面,不仅仅是静态页面。目标u r l 处理请求x m l h t t p r e q u e s t 请求则跟处理普通的h t t p 请求一样,比如在服务端可以用r e q u e s t g e t p a r a m e t e r ( ) 或者r e q u e s t g e t a t t r i b u t e o 来取得u r l 参数值。 o p e n 的第三个参数只是指定在等待服务器返回信息的时间内是否继续执行 下面的代码。如果为t r u e ,则不会继续执行,直接到服务器返回信息。默认为 t r u e 。按照顺序,o p e n 调用完毕之后要调用s e n d 方法。s e n d 的参数如果是以p o s t 方式发出的话,可以是任何想传给服务器的内容。不过,跟f o r m 一样,如果要 传文件或者p o s t 内容给服务器,必须先调用s e t r e q u e s t h e a d e r 方法,修改m i m e 类别。如下: h t t p r e q u e s t s e t r e q u e s t h e a d e r ( “c o n t e n t t y p e , “a p p l i c a t i o n x 一、 w 惭r f o r m - u r l e n c o d e d ”) ; 处理服务器返回的信息 在第二步我们已经指定了响应处理函数,这一步,来看看这个响应处理函数 都应该做什么。 首先,它要检查x m l h t t p r e q u e s t 对象的r e a d y s t a t e 值,判断请求目前的状 态。参照前文的属性表( 表2 - 3 ) 可以知道,r e a d y s t a t e 值为4 的时候,代表服务 器已经传回所有的信息,可以开始处理信息并更新页面内容了。如下: i f ( h t t p r e q u e s t r e a d y s t a t e 一4 ) 9 信息已经返回,可以开始处理 ) e l s e 信息还没有返回,等待 ) 服务器返回信息后,还需要判断返回的h t t p 状态码,确定返回的页面没有 错误。h t t p 协议已经规定了每一个状态码的含义。其中,2 0 0 代表页面正常。 i f ( h t t p r e q u e s t s t a t u s w m - - 2 0 0 ) 服务端返回正常,可以丌始处理信息 ) e l s e 服务端返回异常 ) x m l h t t p r e q u e s t 对成功返回的信息有两种处理方式: r e s p o n s e t e x t 将传回的信息当字符串使用: r e s p o n s e x m l :将传回的信息当x m l 文档使用,可以用d o m 处理。 2 3a j a x 库一- - d o j o 上一节介绍了a j a x 与服务端交互的主要流程,在a j a x 应用中,可以自己编 写相应的a j a x 库,也可使用现有的开源的a j a x 库。 使用开源的a j a 】【库有利于加快项目的开发,易于系统的升级和维护等特点 而倍受开发人员的青睐。目前有数百个a j a x 库可供使用。一般来说,一个a j a x 库具有以下几个特点: 隐藏了开发a j a x 应用的复杂性。把一些重复性的、难于使用的、易于 发生错误的工作封装起来,对开发人员透明。减轻了开发a i a ) 【应用的 工作量。 提供了跨浏览器平台的支持。用同样的j a v a s c r i p t 代码,实现不同浏览 器之间的一致的行为。 隐藏了客户端和服务端通信的复杂性。客户端和服务端之间的h t t p 协 商、请求的发送、服务端返回状态码的语义解析、回调函数的执行等等, 都对开发人员透明。 1 0 在众多的开源库中,d o j o 是一个较为成熟的库,它提供了较多的j a v a s c r i p t 开发支持。 d o j o 是一个开源的j a v a s c r i p t - r 具g ,包括了j a v a s c r i p t 本身的语言扩展, 以及各个方面的工具类库,提供创建自定义j a v a s c r i p t 窗口组件的框架支持用来 实现进行快速的开发 6 1 。 图2 - 2d o j o 厍层次结构 从图2 - 2d o j o 的层次结构来看,d o j o 希望实现的功能不仅包括实现异步通 信的部分,还包括为了方便开发而封装的底层结构( 语法扩展,事件,轻量级的 数据结构) ,以及在页面上的组件用来实现各种交互效果。下面简单的介绍各层 次的功能。 包加载机制:d o j o 的包加载机制可以实现动态加载所需模块,而且用户可 以编写自己的d o j o 扩展模块,使d o j o 具有更高的灵活性。 语言库:扩展j a v a s c r i p t 原有的语言类型,如s t r i n g 类、e v e n t 类等,对其 进行封装或增加功能,用来支持面向对象的丌发。 浏览器环境库:主要用来处理h t m l 页面和d o m 操作,并屏蔽不同浏览器 的区别,使开发人员方便的对页面进行各种灵活的开发。 应用支持库:拥有完成各种应用功能的模块,如异步通信、远程调用( r p c ) 、 页面的拖放操作、日志等。 w i d g e t 组件库:是d o j o 最庞大的库,包括各种动态的页面元素和可视化效 果,可以将其直接当作h t m l 页面的元素来使用,而且可使用底层提供的方法 继承已有的w i d g e t 用来开发新的w i d g e t 或扩展其功能。 2 4a j a x 的四个基本特点 总结前几节对a j a x 技术的分析,可以看出一个a j a x 应用具备以下四个特点 【2 】: 浏览器中展示的是应用而不是内容 在传统的基于页面的w e b 应用中,浏览器只是一个显示文档的媒介,有人 称其为哑终端( d u m bt e r m i n a l ) 。其对用户的操作流程进行到哪一个阶段一无所 知,这些信息在服务器上以用户会话的形式保存。 当用户登录或者是以其他方式初始化一个会话时,系统会在服务器端创建几 个服务器端对象,同时将浏览器站点的首页面呈现给用户,这个h t m l 标记的 数据流由模板文件以及特定于该用户的数据和内容组成。用户每次和服务器交 互,都会获得另一个文档。在这个文档中,除了特定于该用户的数据以外,包含 其他模版文件和数据都是相同的。但是浏览器并不对文档内容做任何的选择,它 只是忠实的丢弃老的文档,显示新的文档。 a j a x 则不同,它是将一部分应用逻辑从服务器端移到浏览器端。在用户登 录的时候,服务器交付给浏览器一个复杂的文档,其中包含大量的j a v a s c r i p t 代 码,这个文档将在整个会话的生命期内与用户相伴。在这一个过程中,随着用户 交互,它的外观可能会发生相当大的变化,但是它知道如何响应用户的输入,能 够决定对于这些请求,是自行处理还是传递给w 曲服务器( w 曲服务器再去访 问数据库或者其他的资源) 。 服务器交付的是数据而不是内容 在传统的w e b 应用中,服务器在每一个步骤都需要把模版文件、内容和数 据混合发给浏览器,但在实际应用中,服务器中真正需要响应的只是这个文档中 的一部分而已。a j a x 的应用可以通过返回一段j a v a s c r i p t 代码、一段纯文本或者 是一段x m l 文档来响应用户的请求,服务器交付给用户的信息也不再含有重复 的代码,而是用户需要更新的数据。 在a j a x 应用中,网络的通信流量主要集中在加载的前期,在用户登录的时 候是需要一次性将一个大而复杂的客户端交付给服务器。而此后的在与服务器通 信的时候其运行效率会高得多。对于应用来说积累起来的通信流量要比以前的基 于页面w e b 应用少很多。整体而言,a j a x 应用的带宽消耗比传统的w e b 应用低。 流畅而连续的用户交互 浏览器提供了两种输入机制:超链接和h t m l 表单。传统的w e b 应用超链 接和表单可以指向j a v a s c r i p t 函数,但是这些j a v a s c r i p t 函数通常用在将数据提 交给服务器之前对表单的输入进行简单的校验,其生存周期和页面是一致的,当 页面提交之后,这些函数也就不存在了。 当一个页面已经提交而下一个页面还没有显示出来的时候,用户实际上是处 于无所事事的状态。新的页面没有刷新,老的页面还要显示一会儿,浏览器甚至 还会允许用户点击一些链接,但这些点击可能会导致一些不可预料的结果,甚至 会破坏服务器端的会话状态。 a j a x 则可以避免这样的问题存在,由于a j a 】【是通过异步方式发送数据,在 发送过程中页面不刷新,只要客户端的代码足够健壮,就可以轻松处理用户的请 求,使得与用户之间的交互变得流畅。 规范的编程实现 在a j a ) 【的应用编程中,j a v a s c r i p t 不再是传统w 曲应用中页面添加一些花 哨东西的工具,a j a x

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论