级别: 初级 Martin Brown, Developer and writer, 独立咨询顾问
2007 年 8 月 20 日 现在,mashup 和 Ajax 在 Web 领域确立了牢固的地位。结合使用二者您就可以开发 Rich Web 应用程序。本文解释了 Rich Web Application Backplane(目前是 W3C Note),其设计目的是实现该领域的标准化,提供这些应用程序所要用到的一组通用构建块或组件。
现有 Web 站点的部署方法
多年来,Web 站点技术不断的得到改进和扩展。传统的 Web 站点基于简单、静态的 HTML 页面,并结合图形和其他元素以构成单个的 Web 页面。大量的内容都是完全静态的,或者是由数据库作为 HTML 页面生成,并通过 Web 服务器静态地服务。
Web 环境的下一发展阶段是使用 Common Gateway Interface 之类技术的动态 Web 站点,或使用 PHP 和 JavaServer Pages™ 技术的服务器端动态环境。虽然这些解决方案很普通,但是它们完全依赖重建 Web 页面并将其送回客户机。这样,通过在每个步骤中定制内容以重建页面,实现了对动态元素的支持。图 1 展示了传统解决方案的基本概要。
图 1. 传统解决方案
此类标准动态 Web 站点运作正常,但是有很多各种各样的操作问题:
- 数据的提交和接收依赖于交换请求和重写加载整个页面 — 即使只需更新页面的一个很小部分时也是如此。
- Web 应用程序中关于用户访问的状态信息通过某种方式存储在服务器中,而不是客户机层。通常使用一个惟一的会话 ID 和客户机浏览器中保存信息的 cookie 进行处理。为支持此功能,要求大量的服务器端缓存和会话解决方案,包括代理技术和专用的会话服务器。
- 服务器处理全部的请求,因而负载增加。这可能意味着为构建新页面需要更多的数据库查询或甚至更多的数据库会话和模板解决方案。
- 如果处理的是多个页面和复杂表单,尤其是这些表单和数据条目需要选择其他表单的信息,那么处理起来会异常困难,因为必须在每个页面视图之间存储数据。
- 要解决这些问题,需要另外一种不同的方法加载页面及其上的组件。
Ajax、mashup 和动态页面组件
Dynamic HTML (DHTML)、CSS、XHTML 和 JavaScript 等 Web 浏览器技术的使用改变了构建 Web 页面的方式。它们不再需要提交整个表单并加载整个页面以便在浏览器中显示新信息。
具体说来,Asynchronous JavaScript with XML (Ajax) 技术支持动态提交 Web 页面中的信息,在浏览器中重新呈现该信息的响应数据时不需要重新加载页面。
在 Ajax 中,JavaScript 用于(通过 XmlHttpRequest 系统)提交对远端服务器的请求、解析内容并选择如何显示在屏幕上。可以使用 Ajax 解决方案显示基于当前查看的 Web 页面内容的任何数据或信息。可以重建表单元素 — 例如填充弹出列表的内容 — 并且甚至可以添加和扩展完整的表单。
结果是,您可以完全改变提交和加载页面和信息的方式。图 2 给出了过程和执行顺序的大致概览。
图 2. Ajax 解决方案
从 图 2 中的图表可以看出,加载整个页面的解决方案已经变化。相反,您获得一个包含所需信息的初始页面。后续请求将加载页面的不同部分进行显示。
Rich Web Application Backplane
前一个示例中的 Ajax 解决方案并不是交换和动态生成 Web 页面的惟一解决方案。对于向服务器提交信息及接收和显示该信息的方法,存在着大量各种各样的解决方案。
Rich Web Application Backplane 的目标是:结合使用各种提供了作为现代 Web 应用程序基础的构建块的技术。因此,Rich Web Application Backplane 的角色是定义这些不同的元素并提供一个标准化方法,使这些不同的组件协同工作。
该标准还旨在生成一些其他标准,让 Web 开发人员能够使用这些技术构建 Web 应用程序,而不会受到强制使用某个特定解决方案的限制或要求。
这样,开发人员能够使用自己所偏好的技术 — 比如 Ajax、XForms 或 SVG — 构建 Web 应用程序,同时仍然允许他们在认可标准的开发环境中工作。
为了实现这个级别的标准化,Rich Web Application Backplane 将定义大量不同的标准系统,描述典型 Web 应用程序的不同元素。该标准目前定义了三个领域:
- 提交系统:一种提交信息的标准方法。提交区域将定义处理提交过程的事件(对任何语言和环境都有效)的生命周期。
- 数据模型:作为用户与提供信息的服务器之间交换信息的格式的模型。XML 与当前交换的信息不同,因为 XML 表示了数据和显示信息。
- 事件和生命周期:这些机制作用于数据和提交,并在用户和服务器系统之间转换信息。这包括了如何将事件 — 包括用户级事件,如单击按钮 — 转换成操作和过程。事件驱动的模型旨在替代更为传统的 JavaScript 或应用程序服务器端返回的 XML 的手工编码转换,从而使特定的 XML 事件处理特定信息的显示。
实际上,Rich Web Application Backplane 是各种工具和技术的标准化,这些工具和技术已经频繁应用于一套构建基于 Web 的应用程序的标准。
图 3 展示了 Rich Web Application Backplane 以传统(图 1)概览和 Ajax(图 2)概览的格式运作。
图 3. Rich Web Application Backplane 运作
从 图 3 中的图表可以看出,提交系统用作服务器和原始页面之间的最后接口。真正的力量源于 XML 数据模型和绑定,使事件分析器能够在原始页面和新元素之间进行转换。绑定用于响应用户界面查询并交换提交模型和服务器之间的选择。在响应中,同样是绑定将响应转换回 XHTML、SVG 或原始文档中的其他可视元素。事件和数据绑定系统提供了不同组件之间的联系并提供了 Rich Web Application Backplane 的强大功能。
详细考察一下这些不同的领域。
提交
提交系统是用户界面的元素,并支持在 Web 浏览器和 Web 应用程序服务器组件之间交换信息的逻辑。
传统模型使用表单提交中的 POST 或 GET 重加载系统提供信息。对于更大的交互,使用 JavaScript 处理表单元素并提交组件。
其他现有的动态元素包括 REST 和一些类似的接口,这些接口结合了 JavaScript 中的 XMLHttpRequest 对象,提交请求并返回纯 XML 或任何其他可以进行后续处理和显示的数据类型。
Rich Web Application Backplane 希望标准化这些元素,并做出很多改进:
- 改进提交对象和 Document Object Model (DOM)
API 之间的映射。这包含对数据和请求的交换方式以及如何与页面的其余部分和应用程序共同运作的一些基本改进。当前讨论的是使用标准化工具包(如 Dojo)提供一种更简单的请求信息的方法、页面组件之间的更优的关联、加载和更新数据的方法,以及这些组件所使用的结构。
- 改进通知事件。在提交过程中,典型的提交交换将集合提交(序列化)、传输请求、等待响应、接收响应并反序列化响应至一个本地对象中。例如,使用 XmlHttpRequest 时,您根据状态变化函数调用和请求的就绪状态,确定请求到达某个点时所执行的操作。这些状态需要展开并更加透明、可访问,以改进应用程序的体验和响应性,并且在处理提交本身时改进页面的通信和可更新状态。
- 事件同步允许提交系统独立工作,以及跨越多个事件进行事件通知。例如,应用程序在接收原始请求的数据进行处理时可能发出事件。但是,只有在接收(由事件 a 完成)并处理(由事件 b 完成)完所有数据后,系统才更新该信息的视觉显示。
总体说来,总的目标是标准化提交模型、展开事件以处理提交过程,以及提供更广泛的事件模型以支持复杂交互。
数据模型
Rich Web Application Backplane 中的数据形成了用户和后端应用程序之间的连接。数据的角色既是信息源又是触发特定操作的事件的关键。
数据模型主要遵循标准应用程序开发环境中所使用的典型对象模型。数据模型将指定用于操作数据的信息和规则。结果对象既可以表示用户数据,又可以与后端应用程序通信以更新数据内容。
这可以很简单地进行表示,如图 4 所示。
图 4. Rich Web Application Backplane 中的数据模型
对于 Rich Web Application Backplane,您将使用 XML 数据模型,其中模型包括核心数据、验证系统、约束和动作:
- 数据实例:这些实例存储了真实信息,并且您应该能够将数据存储在特殊的模型实例中。
- 验证:在数据模型中,包含验证数据对象实例的数据的例程。模型将验证置于数据实例中以实现自我验证,而不是依赖服务器验证信息。
- 约束:因为在您使用的数据所在的环境中,对服务器的访问可能受到控制、限制或根本不可用,所以数据模型应该包含定义对象约束的规则。例如,可能包含限制特定元素的大小和作用域的业务规则,或防止对同一实例中元素的不同组合的指定。与数据模型的验证组件类似,这将在交换对象和通过系统中的其他组件使用对象(不论是在内部根据用户界面,还是在外部通过其他对象的提交系统进行交换)之前强制系统中的对象为有效。另外,记住数据模型可以定义应用程序中使用的很多用户界面(UI)元素。验证和约束信息将帮助驱动 UI 并使应用程序更易于使用,因为应用程序可能根据用户输入更改可用的选择和 UI 元素。
- 动作:这些处理程序处理对象相关的事件。对于 UI,动作指定了选择模型的某个特殊组件、提交或动作按钮后发生的动作。
声明性语言编程人员对作为对象实例的数据模型的大部分结构会感到熟悉,虽然在整个应用程序模型中有非常具体的规则和角色。
因为数据模型提供了用户交互,所以您可以使用它在交互时验证数据输入。数据模型将定义对象结构、布局和有效值。这就消除了传统模型需要在服务器端进行验证的问题。
事件和生命周期
针对核心 XML 数据的事件生命周期和数据绑定提供了在 Rich Web Application Backplane 中处理不同元素的主要方法。
事件和事件处理程序已经是很多 Web 应用程序的一个常见组成部分,包括处理 XML 的一些现有方法,以及 JavaScript 中的事件系统和 CSS 事件,所有这些提供了作用于现有事件并做出响应的方法。
作为标准化这些不同技术的一部分,Rich Web
Application Backplane 将统一用于指定和响应系统中不同事件的方法。
该标准的当前草案已经确认了事件系统的主要主题,您必须将这些主题作为标准化过程的一部分来处理,包括:
- 设备无关性:在一定范围的设备中保持事件系统、触发器和响应的独立运作。从用户角度看,这意味着分离由用户操作导致的特殊操作。现有的这类示例包括:向下滚动是一个操作,向下滚动的动作是一个用户操作。前一个示例可能是由应用程序导致的操作,而后一个示例则是用户请求的操作,而用户请求将导致应用程序操作。
- 可访问事件:不要隐藏事件系统,或将其设计得太过复杂而无法使用。
- 标准事件:让事件系统指定很多针对频繁执行的行为和需求而发生的标准事件。
- 处理程序的 XML 类标记:使事件处理程序易于定义 XML,即使在对于如何定义和应用这些处理程序有严格标准的不同基本架构中也是如此。目前,不同的 XML 标准(XHTML、DOM)拥有不同的系统。
- 脚本化的声明性处理程序:Rich Web Application Backplane 的设计目的是可以在任何语言中使用和应用。不要限制系统以指定语言类型和环境。这将有助于防止编程人员由于个人偏好而放弃对标准的使用。
- 绑定事件和处理程序的方法:向现有结构中动态地添加事件和处理程序。
- 跨文档进行绑定的安全问题:当前的动态/Ajax
解决方案中的限制防止跨站点脚本编制。处理同一站点中跨文档事件的安全问题比较困难。
- 复合文档中的跨越名称空间问题:应该能够处理同一显示文档中跨越不同 XML 名称空间的各种组件。
- 集成事件方法:确保各系统之间的 eEvent 解决方案兼容。
类比 Rich Web Application Backplane 和独立应用程序
Rich Application Backplane 的最有趣方面可能是它的主要设计目的是为了改进当前的 Web 应用程序基础设施,以便更好地匹配传统的独立应用程序环境。
XML 数据绑定和事件的角色,以及向 Web 应用程序的执行和部署添加生命周期方法的过程与面向对象的方法和模型-视图-控制器 (MVC) 模式非常类似。MVC 组件的设计目的是在显示大量的用户界面元素的环境中使用,可以在其中开发数据处理接口和信息的可视接口,而不需要彼此依赖。控制器组件则负责查看模型更新,并根据模型数据更新视图。
图 5 展示了典型的 MVC 图表。
图 5. MVC 图表
在 Rich Web Application Backplane 中,视图是 XHTML、SVG 或其他显示组件;数据是 XML 数据模型,而控制器则是处理信息的数据绑定/事件处理程序。此系统中的提交对象的作用是提供 MVC 组件以及系统用户端和服务器组件之间的接口。
在很多情况下,这些工具和功能在独立环境中都可用。Rich Web Application Backplane 的创建者希望生成的标准能够使此功能在 Web 应用程序中可用。
虽然 图 5 展示了类似 MVC 的模型示例,但是您可以将 Rich Web Application Backplane 的基本原理应用于任何模型和页面设计方法中。目标是标准化用于构建页面的方法,而不是应用程序的工作方式。
结束语
Rich Web Application Backplane 的目的是提供并支持一些标准,这些标准使您能够更容易地以一种与开发现有的独立本地应用程序类似的方式开发 Web 应用程序。它将提供一种更兼容、更有用的方法以便在组件之间交换信息。
当您定义以下角色时:
- 提交系统(用于控制 Web 客户机和 Web 服务器之间的交互)
- 数据模型(保存信息并提供显示方法)
- 事件(控制 UI 组件、数据模型组件以及提交系统之间的交互)
您应该能够在所选的任何语言和环境中开发 Web 应用程序,并支持不同组件之间的信息就绪交换,并且与信息来源无关。
参考资料 学习
获得产品和技术
-
IBM
试用版软件:使用可直接从 developerWorks 下载的试用版软件构建您的下一个开发项目。
讨论
关于作者  | 
|  | Martin Brown 成为一名职业作家已经有 8 年多的时间了。他是很多书籍和文章的作者,内容涉及很多主题。他的特长包括很多开发语言和平台 —— Perl、Python、Java、JavaScript、Basic、Pascal、Modula-2、C、C++、Rebol、Gawk、Shellscript、Windows、Solaris、Linux、BeOS、Mac OS/X 等等 —— 还包括 Web 编程、系统管理和集成。他会定期为 ServerWatch.com、LinuxToday.com 和 IBM developerWorks 撰写文章,在 Computerworld、Apple Blog 以及其他站点都会定期更新自己的博客,同时还是 Microsoft 的主题专家(SME)。您可以通过他的网站 http://www.mcslp.com 与他联系。 |
对本文的评价
|