


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、基于AJAX的高级Web应用程序开发技术研究1AJAX简介1.1AJAX 定义异步 java script禾口 XML(Asynchronousjava scriptand,XML,AJAX) 是多种技术的综合,包括 java script,XHTML 禾口 CSS,DOM,XML和 XSTL,XMLHttpRequest。其特点是:使用XHTML和CSS标准化呈现;使用DOM实 现动态显示和交互;使用XML和XSTL进行数据交换与处理;使用 XMLHttpRequest进行异步数据读取;最后用java script绑定和处理所有数据。1.2AJAX的工作原理与传统的Web应用不同,AJAX采
2、用异步交互过程。AJAX在用户与效劳器之 间引入一个中间媒介,从而消除了网络交互过程中的处理一等待一处理一等待的 缺点。用户的浏览器在执行任务时即装载了AJAX引擎。AJAX引擎主要用javascript 语言编写,通常藏在一个隐藏的框架中。它负责编译用户界面及与效劳器 之间的交互。AJAX引擎允许用户与应用软件之间的交互过程异步进行,独立于用户与网络效劳器间的交流。现在,可以用java script 调用AJAX引擎来代替产 生一个直接的HTTP请求的用户动作,内存中的数据编辑、数据校验这些不需要 重新载入整个页面的需求可以交给AJAX执行。AJAX最核心的理念是,传统应用中的浏览器直接与效
3、劳器交互,现在中间夹了一层Script。也就是说,原来的 Browser Server架构,现在是Browser Ajax引擎Server。假设是纯粹的 AJAX应用,浏览器只向AJAX引擎发送消息,AJAX引擎使用XmlHttpRequest向效劳 器发送请求,然后效劳器在XmlHttpRequest的回复中带上相关消息,最后AJAX 引擎分析这些消息,用HTMLDOM模型处理界面。如此,理论上可以完全消除按页 刷新的需要。由于存在这样一个在后台的通信机制,原有开发Web程序时碰到的 问题自然内部迎刃而解。最重要的是,使用了 AJAX框架不会与原有开发模型相 冲突,如果处理得当AJAX的优势
4、将显而易见,加上兼容性,一定会使它有时机在 Web领域中占一席之地。1.3 AJAX的优点与传统的Web效劳相比,AJAX具有明显的优势:减轻了效劳器的负担。因为AJAX的根本理念是“按需取数据,所以最大可能在减少了冗余请求和响应对服 务器造成的负担;非整页地刷新、更新页面,减少用户实际和心理等待时间;更好 的用户体验;也可以把以前的一些效劳器负担的工作转嫁到客户端,利于客户端闲置的处理能力来处理,减轻效劳器和带宽的负担,节约空间和带宽租用本钱;可 以异步调用外部数据;其是基于标准化的并被广泛支持的技术,并且不需要插件 或下载小程序;AJAX使Web中的界面与应用别离,也可以说是数据与呈现别离
5、;对于用户和ISP来说是双赢的。2AJAX技术的高级应用研究2.1 AJAX语言对象面向的java script由定义来看,java script 是典型的 AJAX语言。不同于 Java,java script并不强调OC风格的编码。然而,java script居然全面支持所有OC语言的主要 属性,即封装、继承和多态性。数据类型:在Java中,一个类定义了一个数据及与它相关行为的组合。尽 管java script保存了 class关键字,但是它不支持与常规 OOP吾言一样的语义。 在java script中,对象是用函数来定义的。事实上,通过在下面的例如中定义 一个函数,就定义了一个简单的空
6、类Calculator :function Calculator。一个新实例的创立与在Java中相同使用new操作符:var myCalculator = new Calculator。;上面函数不仅定义一个类,而且还担当一个构造器。在此,操作符new实现了实例化一个类Calculator的对象,并且返回一个对象参考而不是只调用该函 数。创立这样的空类在实际中并没有多大用处。下面,使用一个Java-脚本原型结构填充类定义。java script使用原型当作创立对象的模板。所有的原型属性和方法都被参考引用复制到一个类的每个对象中,所以它们都具有相同的值。 使用者可以改变一个对象中原型属性的值,并
7、且该新值会覆盖从原型中复制过来的缺省值,但是这仅对于在一个实例中。以下语句将把一个新属性添加到Calculator 对象的原型上:Ctotype._prop = 0;既然java script并没有提供一个方法来从句法上表示一个类定义,故将使 用with语句来标记该类的定义边界。这也将使得例如代码更为短小,因为该with 语句被允许在一个指定对象上执行一系列的语句而不需要限制属性。with (Calculator) prototype._prop = 0;prototype.setProp = fun cti on(p) _prop = p;prototype.get
8、Prop = fun cti on() return _prop;到目前为止,定义并初始化了公共变量_prop,并且为它提供了 getter和setter 方法。是否需要定义一个静态变量。其中可以把静态变量当作是为类所拥有的一个 变量。因为在java script中的类用函数对象来描述,所以只需要把一个新属性 添加到该函数上:Calculator.iCo un t=0;现在,既然iCount变量是一个Calculator对象的属性,那么它将会被类Calculator的所有实例所共享。function Calculator() Calculator.iCo un t+;用上面的代码可计算类Cal
9、culator的所有实例的个数。封装:通过使用上面所定义的“ Calculator ,可以存取所有的“ class 数据;然而,它增加了派生类中命名冲突的危险性。明显地需要封装来把对象看 作自包含的实体。数据封装的一种标准语言机制是使用私有变量,并且一个常用的、仿效一个私有变量的java script技术是在构造器中定义一个局部变量;这样,该局部变 量的存取只能经由getter和setter来实现,它们是该构造器中的内部函数。在其中有两个匿名的内部函数(分别被赋予setProp和getProp属性)存取“私有 变量。另外,需要注意,这里this的使用十分相似于它在 Java中的用法:fun c
10、tio n Calculator。var _prop = 0;this.setProp = fun cti on (p)_prop = p;this.getProp = fun cti on() return _prop;常被无视的是在java script中作如此封装所付出的代价。须知,这种代价 可能是巨大的,因为内部函数对象对于该“ class 的每一个实例被不断地重复 创立。既然基于原型构建对象速度更快,并且消费更少些的内存,那么在最强调性能的场所特别支持使用公共的变量。请注意,可以使用命名惯例来防止名称冲突, 例如在公共的变量前面加上该类名。继承在外表看来,java script缺乏对
11、类层次的支持,这很相似于面向对象语言的程序员对于现代语言的期盼。然而,尽管java script句法没有象Java 一样支持类继承,但是仍然能够在java script中实现继承,通过把已定义类的一个实例拷贝到其派生类的原型当中。在提供例子之前,需要介绍一个constructor 属性。java script保证每一个原型中都包含constructor ,它拥有到该构造器函数的一个参考。换句话说, Ctotype.constructor包含一个至U Calculator()的参考。下面的代码显示了怎样从基类Calculator 派生类ArithmeticCalcula
12、tor 。constructor 的值恢复成 ArithmeticCalculatorfun ctio n ArithmeticCalculator() ;with (Arithmeticcalculator) ArithmeticCtotype = new Calculator。;/第一行prototype.c on structor = ArithmeticCalculator;/第二行上面的实例看起来像一个合成体而不是继承,但是java script引擎还是清楚这个原型链的。特别是,in sta nceof操作符会正确地适用于基类和派生类。 假定创立类Arith
13、meticCalculator的一个新实例为:var c = new ArithmeticCalculator;那么表达式 c instanceof Calculator 和 c instanceof ArithmeticCalculator都会成立。注意:在上面例如中基类的 constructor是在初始化 ArithmeticCalculator原型时被调用的,而在创立派生类的实例时并不被调用。这可能会带来不想要的负面影响,而且为了实现初始化应该考虑创立一个独立的函数。由于该构造器并不是一个成员函数,所以它无法通过this参考引用调用。因此需要一个能调用超类的“ Calculator 成员
14、函数:function Calculator(ops) ;with (Calculator) prototype.Calculator二Calculator;现在,可以写一个继承类,它显示地调用基类的构造器:fun ctio n ArithmeticCalculator(ops) this.Calculator(ops);ArithmeticCtotype = new Calculator;prototype.c on structor = Arithmeticcalculator;prototype.ArithmeticCalculator = Arithmetic
15、calculator;多态性:java script是一种非类型化的语言。在此,一切都是对象。因此,如果有2个类A和B,它们都定义一个foo(),那么java script将允许在A和B的实例上多态地调用foo(),即使不存在层次关系(虽然是可实现的)。从这一角 度来看,java script提供一个比Java更宽的多态性。这种灵活性,也要付出代价。在这种情况中,代价是把类型检查工作代理到应用程序代码。具体地说, 如果需要检查一个参考确实指向一个所希望的基类,那么可以通过in sta nceof操作符来实现。另一方面,java script并不检查函数调用中的参数:这可以防止用一样的命名和不同
16、的参数来定义多态函数(并且让编译器选择正确的签名)。代之的是, java script 提供了一个Java 5风格的函数范围内的argument对象;它允许你 根据参数的类型和数量的不同实现一个不同的行为。2.2AJAX组件授权所有的AJAX组件授权方案在现在被逻辑地分成两组。具体地说,第一组用于与基于HTM啲UI定义的无缝集成。第二组把HTML当作一个UI定义语言以支 持某种XML在此,从第一组中来展示一种方法;虽然它存在于浏览器之中却是 类似于JSP标签。这些浏览器特定的组件授权扩展在IE情形下称作元素行为,而在最近版本的Firefox , Mozilla和Netscape 8情形下称作可扩展的绑定。2.3定制标签script授权。不象JS
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 纺织品色彩搭配的重要性试题及答案
- 诗词解读考试题及答案
- 织物抗污性能检测技巧试题及答案
- 2024年轨道交通空气过滤器项目资金需求报告代可行性研究报告
- 解除合同协议书
- 《加拿大的制度创新》课件
- 2024年存包柜项目资金筹措计划书代可行性研究报告
- 合同协议书合同段符号
- 雨水管道施工合同协议书
- 采购协议合同协议书
- (广东二模)2025年广东省高三高考模拟测试(二)历史试卷(含答案)
- 餐具消毒记录表
- 2022山东历史高考答题卡word版
- 中医医院儿科建设与管理指南(试行)
- 空军发展历程课件
- Q∕SY 1143-2008 三维地质建模技术要求
- 1812年序曲 (5)
- 化工企业安全风险辨识分级管控清单
- DB11_T1833-2021 建筑工程施工安全操作规程(高清最新版)
- 大地构造学派及其构造单元汇总
- 丽声北极星分级绘本第二级上Dinner for a Dragon 课件
评论
0/150
提交评论