RIiA技术介绍
——Rich internet Applications
9/15/2004 version1.0
1 RIA技术介绍
1.1 RIA的产生
自从B/S架构迅速流行开来之后(这中间要十分感谢IE,IE的绝对市场占有率决定了我们可以尽量少考虑不同浏览器之间的差异性,尤其是针对企业软件),我们就一直面临着这样一个问题:如何做到当初C/S那样的表示层精确控制以及良好的用户体验?当然,大量的利用DHTML以及JavaScript我们可以实现接近C/S时代的表示层控制和展现,比如Bindows ,但是我们需要付出比C/S时代更多的人力物力才能做到接近于C/S客户端的表现方式,这种客户体验并不能让人满意,因为Web 模型是基于HTML页面的模型,它缺少客户端智能,因此即使是相对简单的事物处理(例如网上购物)也让人混淆。而且,它几乎无法完成复杂的用户交互(如传统的客户端/服务器应用程序和桌面应用程序中的用户交互)。这样的技术使得一代 Web 应用程序难以使用,支持成本高,并且在很多方面无法发挥效应。
为了提高用户体验,出现了一种新类型的 Internet 应用程序。那就是 Rich Internet Applications。这些应用程序结合了桌面应用程序的反应快、交互性强的优点与 Web 应用程序的传播范围广及容易传播的特性。Rich Internet Applications 简化并改进了Web 应用程序的用户交互,从而推动了投资收益(ROI) 的增长。这样,用户开发的应用程序可以提供更丰富、更具有交互性和响应性的用户体验。
1.2 RIA技术发展历程
早期的RIA技术,可以认为包括java平台的APPLET和windows平台的OCX(发展到现在的activeX)。这两种技术在首限的浏览器安全模型中执行,只有有限的访问桌面端应用程序和数据的功能。如果想提供更多的桌面集成,则必须使用证书,为浏览器安装由权威机构办法的数字证书。这种模型是非常麻烦的。同时,APPLET必须要JVM的支持,而我们使用的大部分浏览器都不支持最新的JVM(IE中仅仅支持JDK1.1.5),用户要运行APPLET
,还必须单独下载并安装JVM。而activeX技术,则只能在IE中使用,这就限制了用户必须使用windows平台。为了克服这些问题,人们进行了深入的探索。
1.2.1表示层的发展
使用 HTML 在 Web 上提交应用程序有很大的局限性,这给用户和 IT 组织带来了越来越多的挫折感。技术和商业的压力推动了新解决方案的出现,新解决方案克服了 HTML 的局限性,同时保持了集中部署管理模型,并添加了桌面应用程序的丰富性和控制性。
精彩的用户体验带来的益处
对于大多数成功的公司,能否提供超群的客户体验至关重要,而 Internet 的急速发展增加了客户和合作伙伴网上交互的比例。这意味着网上体验正在代替私人交往,这一趋势有增无减。表面上看,这一趋势由于降低成本而带来潜在的利益,但具体每个公司能否从中受益却很难说。这是因为在 Internet 上,改变商品选择所需付出的成本很低,因此用户体验的质量成了建立和保持线上客户关系的重要因素。
精彩的用户体验一直是大多数主导品牌的特点。如果组织理解了精彩的用户体验带来的好处,它们就会集中精力吸引和保持在线客户关系。
广泛性和丰富性
我们的行业经历了几次系统架构方面的重要转变,在此过程中,客户端的表现功能有起有落。图 1 介绍了每个阶段的计算功能所带来的应用程序体验方面的变化,这一过程从大型机开始,到 Rich Internet Applications 的出现为止。
图 1: Rich Internet applications 的发展
图 1 显示了客户端应用程序的以下变化:
² 基于主机的应用程序 – 由基于主机(可以是大型计算机或小型计算机)的计算发展而来的交互式应用程序。推动此阶段计算的商业需求来自于企业组织内部业务自动化,如工资表。应用程序在内部的专用网络间进行本地发布,用户界面的丰富性仅限制在文本范围内。
² 客户/服务器应用程序 – 客户/服务器应用程序发展很快,这是因为我们需要对企业组织内部的信息及应用程序进行部门级别的访问。仍然可以在企业组织内部本地访问应用程序,但随着图形用户界面的出现及客户端处理的应用,应用程序的丰富性大大提高了。
² Web 应用 – Web 应用程序的全局性应用,以及基于主机集中管理应用程序的模型,解决了客户/服务器模型的主要限制—但对用户来说,这需要巨大的投入。从处理的角度来看,Web 应用程序模型将客户端转变为虚拟终端。用于提供最佳用户体验的主要交互问题消失了。这些主要问题包括直接控制、客户端处理及局部存贮等。
随着各企业组织认识到 Rich Internet Applications 模型可产生显著的商业利润、提高生产率及降低成本的优势后,这种模型的发展势头越来越猛烈。这些应用程序结合了桌面应用程序的反应快、交互性强的优点与 Web 应用程序的传播范围广及容易传播的特性。系统架构发展的下一步是 Rich Internet Applications,它最大程度地提高了广泛性和丰富性。
1.2.2工具、标准与模型的发展历程
虽然 Rich Internet Applications 的前景诱人,但各企业组织要求新技术要与现有的基
础结构及处理过程相适合。新技术必须达到或超过下列要求:
??提供一个用户熟悉的编程模型。企业开发人员熟悉使用面向对象的语言(如 Java 或
C#)进行商业逻辑与后端开发,及利用基于标记的语言(如 JSP、ASP 及
CFML)进行用户界面开发。新产品必须以现有的模型为基础进行创建,以充分利用
现有的技术并确保较低的成本。
??利用现有的基础结构。很多企业组织在服务器应用技术上进行了大量投资。根据主要
行业分析师的调查:未来大部分企业组织中将在内部使用 J2EE 及.NET 技术进行
开发产品。多数的企业组织也需要使用并符合该基础结构。
??采用标准的协议及 API。Web 的众多优点之一就是在整个技术堆栈中采用更宽的标
准。这些标准包括但不局限于行业标准,如 HTML/HTTP、XML、SOAP/网络服
务、CSS、SVG,还有 J2EE 及 .NET 等。多数的企业组织在适用的情况下也要遵
守上述标准。
??保留现有的工具。对于采用表示层解决方案的开发人员,关键问题是能够确保使用现
有的编辑器或集成开发环境 (IDE) 来编写应用程序。开发人员希望利用主要 IDE(如
Eclipse、Borland Jbuilder、JetBrains IntelliJ IDEA、Microsoft Visual
Studio)和主要的 Web 应用程序开发产品(如 Macromedia Dreamweaver MX)
来编写代码。
??支持主要的设计模型。企业在创建与创建应用程序时使用设计模型进行企业开发。在
过去的几年中,类似模型-视图-控制器 (MVC) 的模型在J2EE 和 .NET 企业应用程
序开发中越来越普遍。表示层解决方案必须适应这些现有的基于模型的架构。
由于架构一致性与基于标准的解决方案的要求,Rich Internet Applications 一直无法为
多数的企业应用程序开发人员利用。这种情况直到现在才有所改变。
1.3 现有RIA技术
随着技术的进步,人们开发出了新的RIA技术,包括JDNC、FLEX(MXML)、XAML、XUL、JSF等。
² 这些技术有一些共同点,包括:
² 使用成熟的HTTP通信模式;
² 基于XML语法和标签语言tag技术;
² 丰富的桌面端应用集成;
² 免去系统的安装和维护,软件自动升级。
MXML是Macromedia公司于今年刚推出的一种标记语言,是FLEX技术的基础。将于2006年左右Release的MS下一代操作系统Longhorn中,将包含XAML技术(XML Application Markup Language)。MXML和XAML都是基于XML的用户界面标记语言,与之类似的还有XUL(XML User Interface Language)。这几种技术中,目前只有FLEX具有实用性。XAML和XUL还有待观望。
而JDNC(Java Desktop Network Component)是java社区新推出的一种基于java技术大RIA技术,它可以运用java桌面端强大的技术,为用户提供完美丰富的体验。
本文余下的内容将简单介绍JDNC和FLEX技术。这两种技术可能会代表未来的RIA技术走向。
2 JDNC
2.1 技术结构
JDNC( JDesktop Network Components) https://jdnc.dev.java.net/,是由java社区推出的一个开源的RIA实现技术。目前的最新版本是0.6。类似于JDNC这样的RIA应用程序是部署在internet Web服务器端的,运行在客户的桌面操作系统中。界面的渲染和用户I/O操作是发生在客户端,不是服务器端。UI相关的信息不会随着每次请求响应在用户和服务器端传送,每次仅仅传送数据。这大大减少了网络流量,降低了服务器端的计算能力需求,客户端响应速度得到非凡的提高。同时,JDNC使用Swing组件,可以为用户提供丰富的UI界面,完全可以媲美C/S系统。
下图是JDNC的技术结构:
图二 JDNC技术结构图
最底层,JDNC仍然需要一个JVM,可以是JRE或J2SDK,这和APPLET/JAVA WEB START类似。事实上,JDNC最广泛的应用就是基于JAVA WEB START方式的,它的启动脚本仍然需要JNLP(Java Web Start 使用的MIME协议)来实现。
² Swing Extension:JDNC是数据为中心的(Data-centric),而Swing组件是以MVC模式实现的,不完全是Data-centric的,因此,JDNC有必要在swing之上做一层扩展,让RIA程序支持数据为中心的设计。这样也为开发者节约了不少时间,因为数据和UI的绑定JDNC 已经为我们做好了。Swing Extension就是完成这种功能的技术层次
² JDNC API:对普通web应用程序开发人员来说,大多数都不熟悉swing组件。Swing Extension虽然对swing做了一些封装,但基本的语法还是swing编程语言,这对用户来说,抽象层次还不够,还需要深入了解awt和swing编程知识。为此,JDNC在swing的基础上封装了各种常用组件,如JTree、JTable、JButton,使得它们更容易为RIA应用程序所用,这些新的组件在org.jdesktop.jdnc 包中,比如JXTable就封装了JTable和TableModel等MVC的功能,并为table组件提供了数据绑定功能。JDNC API是面向web开发人员的swing组件的高级封装。
² JDNC Markup Language: 这种可扩展标记语言也是基于XML语法的,但它比XUL/XAML更专用,它提供了一套自定义的tag标签,类似于jsp中的tag标签。于jsp这种tag不同的是,jsp tag是在服务器端被jsp/servlet容器编译后执行,生成标准的html页面输出到客户端浏览器,供浏览器渲染。而JDNC标记语言本身就是一个XML文档或XML输出流(jnlp MIME类型),在客户端的浏览器中会触发java web start,java web start会分析这个jnlp文件,看其中是否有合法的JDNC访问,如果有,在触发JDNC API执行。当然,JDNC不仅仅支持Java Web Start技术,它也可以作为applet和独立的客户端程序执行。
2.2 JDNC示范
本节展示一个简单的RIA电子表格。这个示范程序仅仅包含一个jnlp文件,一个jdnc文件和一个文本格式的数据源weather.txt。下面是这个jnlp文件simpleTable.jnlp:
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="http://javadesktop.org:80/jdnc/0_5"
href="demo/simpleTable.jnlp">
<information>
<title>JDNC Simple Table Demo</title>
<vendor>Sun Microsystems, Inc</vendor>
<homepage href="index.html" />
<description>demo</description>
</information>
<resources>
<j2se version="1.4+" />
<jar href="jdnc-runner.jar"/>
<extension name="JDNC Runtime Libraries" href="jdnc-runtime.jnlp"/>
</resources>
<application-desc main-class="org.jdesktop.jdnc.runner.Application">
<argument>http://javadesktop.org:80/jdnc/0_5/demo/simpleTable.jdnc</argument>
</application-desc>
</jnlp>
这个文件是标准的Java Web Start应用程序的标记文件。首先值得注意的是在<resources/>中需要指定JDNC API的标准执行环境:执行入口是jdnc-runner.jar,JDNC的扩展运行环境在jdnc-runtime.jnlp文件中定义。其次,在<application-desc/>中JDNC的执行类是org.jdesktop.jdnc.runner.Application,<argument/>中指定的jdnc文件必须是绝对地址。
下面是simpleTable.jdnc文件,非常简单:
<?xml version='1.0'?>
<om:resource xmlns:om="http://www.openmarkup.net/2004/05/om"
xmlns="http://www.jdesktop.org/2004/05/jdnc">
<table>
<tabularData source="weather.txt"/>
</table>
</om:resource>
<om:resource/>是JDNC标记文件的专用根元素。这里的<table/>元素表明在本RIA应用中仅仅包含一个表(org.jdesktop.swing.JXTable类型),使用的数据源是一个二维格式的文本文件“weather.txt”。
下图是该RIA应用程序的运行结果:
图三 简单JDNC应用示例
JDNC是一种已经实际可行的成熟技术,它的主要问题是jnlp文件和jdnc文件的生成还必须使用普通的文本编辑器,而没有一个集成的IDE环境自动生成,这是它相比于FLEX比较弱的地方。但考虑到它的开源性质以及它和java的天然集成特性,它将在未来的RIA技术中占据重要地位。
3 Flex技术
本章先说Flex不好的地方,因为后面的内容不是我的观点。
Flex主要的问题在于它是Macromedia的专有产品,价格非常昂贵,一个部署服务器是12000$/CPU。它不是开源的技术,还没有得到业界的广泛承认。不过,以Macromedia在web开发和flash技术上的优势,很可能Flex会得到比较多组织机构的认可。在http://january.rr.com/flash网站有一个基于Macromedia的flash技术做的RIA应用演示,已经非常有吸引力了。
注:第三章内容全部引用自Flex技术白皮书。本文是公司内部参考,大家不要以为我抄袭:)
Macromedia Flex presentation server 是新的Macromedia 产品,它满足了某些 IT开发人员的需要。他们希望开发一种应用程序,这种程序既有桌面应用程序的响应性与丰富性,又具有 Web 传播范围广的特性—即 Rich Internet Applications。Flexpresentation server 驻留在组织的 N 层应用程序模型的表示层,它使用在客户端运行的可执行代码,作为当前一代 HTML 的补充。Flex 具有基于标准的、用户熟悉编程方法及工作流,强大的类库可创建表示层,从而提供更有效、更真实的终端用户体验。
3.1 Flex 应用程序
Flex 应用程序与传统的 HTML 应用程序的主要区别在于Flex 应用程序处理最适合在客户端运行,如字段校验、数据格式、分类、过滤、工具提示、合成视频、行为及效果等。Flex 可使开发人员更好地交付应用程序,这种应用程序使用户可以迅速反应、在不同状态与显示间流畅过渡,并提供毫无中断的连续的工作流。
3.1.1 Flex 开发模型
Flex 开发模型对于使用 JSP、ASP/ASP.NET 或其他类似的脚本语言的开发人员并不陌生。基本的模型是一样的:建立一个包含应用程序源代码的文本文件,然后将此文件部署到服务器上;服务器在收到第一个请求时,将此源码编译成为应用程序,后续的请将通过缓存处理。与发送一系列的包含数据与 UI 的 HTML 页面不同,Flex presentationserver 发送包含可在普遍的 Flash Player 虚拟机上运行的丰富客户端用户界面。需要时,Flex 应用程序将与服务器交换,数据以响应客户端上终端用户的操作。Flex 开发者使用扩展的 UI 组件库与基于XML 标记的语言定义用户界面,利用面向对象的脚本语言 (ActionScript) 来处理程序逻辑。
3.1.2Flex 与 N 层模型
除了在现有的表示层上进行添加外, Flex 并不需要对当前的业务层与整合层进行任何改变。Flex presentation server 在应用服务器内运行,并为 Flex 应用程序提供整合与管理能力。Flex 整合的能力可以轻松地通过 Web 服务、Java 对象访问或 XML 使用现有的代码及信息。Flex 还可以与一些现有的表示技术与框架结构如 JSP 及 Struts 等进行集成。
3.1.3Flex 部署和管理
在 J2EE 平台上部署 Flex 服务器非常简单,因为 Flex 是本地 Java 应用程序。在J2EE 平台上部署 Flex 应用程序是通过 Java Web 档案 (WAR) 文件处理的。从管理角度看,Flex XML 方案和基于文件的应用程序模型意味着,Flex 应用程序可以与现有管理工具和应用程序生命周期工具轻松集成。在 Flash Player 中执行时,Flex 应用程序可以与服务器端的功能交互,这些功能包括 Java 对象、SOAP Web 服务和其他服务器端服务。
3.2 Flex 产品概览
图 2 显示了 Flex presentation server 的基本架构。Flex presentation server以 .war 文件格式(一种即将上市的 .NET 发布版本)部署在现有的 Java 应用程序服务器上,由 Flex 应用程序框架与 Flex 运行时服务构成。
3.2.1 Flex 应用程序框架
如 图 2 所示,Flex 应用程序框架由 MXML、ActionScript 2.0 及 Flex 类库构成。开发人员利用 MXML 及 ActionScript 2.0 编写 Flex 应用程序。利用 MXML 定义应用程序用户界面元素,利用 ActionScript 2.0 定义客户逻辑与程序控制。Flex 类库中包括 Flex 组件、管理器及行为等。利用基于Flex 组件的开发模型,开发人员可在程序中加入预建的组件、创建新组件或是将预建的组件加入复合组件中。
3.2.2 MXML:Flex 标记语言
MXML 和 HTML 一样是标记语言,它描述了反映内容与功能的用户界面。与 HTML 不同的是,MXML 可对表示层逻辑与用户界面和服务器端数据绑定提供声明抽象。MXML可将表示与业务逻辑的问题彻底分开,以实现最大程度地提高开发人员的生产率及应用程序的重复使用率。
MXML 的开发基础是在迭代过程上,这与其他类型的 Web 应用程序文件如 HTML、JSP、ASP 及ColdFusion 标记语言 (CFML) 是相同的。开发 MXML 应用程序就象打开一个文件编辑器一样简单,只要输入一些标签、保存文件,然后在 Web 浏览器上打开文件 URL 即可。
图 四: Flex architecture
3.2.3 Flex 运行时服务
Flex presentation server 包括一套服务:用于 Rich Internet Applications 的编译及缓存、企业资源整合及部署运行时的需要等。所有 Flex 服务都最大程度减少冗余,并充分利用现有的企业资源。例如,服务器端的应用程序逻辑、验证及会话管理都是通过与基本的 Java 平台整合,而不是引入冗余服务层来提供的。Flex 与 Java 及其他现有技术相互补充,是Java 应用程序服务器上纯粹的原生应用程序,它与用于 Web 服务、数据和应用程序集成、安全和其他资源的平台整合到一起。Flex 支持下列的 Java 应用服务器:
l IBM WebSphere
l BEA WebLogic
l Macromedia JRun
l Apache Tomcat servlet container
Flex 应用程序以一种及时模型进行编译,不会产生任何用户体验的中断。Flex 应用程序在首次引用时进行编译,然后缓存起来供以后调用;如果任何有关文件进行了更新,Flex应用程序也会随之自动重新编译。
与 Flex 整合的相关服务包括:
服务器端的 Web 服务代理,它通过稳固支持应用程序生成域以外的 Web 服务扩展本地的 Flash 模型。
服务器端的 Java 对象访问,可用于应用程序、数据及目录集成。共享式会话支持,Flex 应用程序会话可与 HTML 和 Flash 应用环境中共享。
支持验证,用于 J2EE 及单点登录服务。 Flash Player 检测及更新服务,检测并有选择地升级 Flash Player 安装—对
客户端设备配置采用“锁定”策略,这是企业关键的要求。(Flex 要求 FlashPlayer 7 支持,以利用其安全及性能特点。)
延迟实例化安装,按要求或在开发人员的控制下载入,而不是同时装载,它提供几种运行时选择来节省起动时间。