软件开发模式经历了C/S到B/S的演变。虽然B/S架构具备零部署,易升级,操作简便等巨大优势,但是随着企业及软件业务逻辑越来越复杂,原先采用HTML/JavaScript/CSS来作为显示技术显得愈发的捉襟见肘。与此同时,Java社区中RIA(Rich Internet Application)地解决方案已经是百家争鸣。
1.XMLHTTP+JavaScript
XMLHTTP IE浏览器内置的ActiveX控件,可以实现再不提交页面的情况下和服务器进行HTTP协议通讯,此外Mozilla/FireFox浏览器也已经通过自己的方式支持XMLHTTP技术了。不过,XMLHTTP广泛应用的主要障碍在于需要编写非常复杂的JavaScript来驱动XMLHTTP和服务器端交互,而JavaScript复杂度的上升会带来很多意想不到且难于控制的浏览器运行期错误和兼容性问题。
2.传统的Java Applet/Java Web Start
Java Applet具有强大的交互功能,Java Web Start也是许多大公司部署客户端Java应用的首选,优点在于利用了Java技术的强大能力,缺点是Java图形技术的繁琐和低效率。
3.XUL类的RIA
XUL(XML User Interface Language)是Mozilla的首创,真正实现了界面描述语言和事件响应代码的分离,即以XML来描述图形用户界面,以编程语言来响应事件,处理用户交互和服务器通讯。XUL的思想近来被广泛地接受并且演变出来非常多的XUL架构的RIA技术。
1) Microsoft XAML
使用XML来描述Windows操作系统的界面组件,以.net平台来运行事件响应程序,事件响应通过Web Services和服务器端通讯,使得能够跨平台。
2)Flex/Laszlo
使用XML来描述Flash的界面组件,以ActionScript/JavaScript来编写事件响应程序,在初次运行期编译为Flash作为客户端RIA,Flex同时支持.net和J2EE服务器端技术,Laszlo是一个开源的项目,运行在Java AppServer上的容器。IBM提供了Laszlo的Eclipse插件,可以通过拖拽的方式来设计Laszlo界面
3)JDNC/Thinlet
JDNC是Sun力推的XUL架构技术,以XML来描述Swing界面,以Java来编写事件响应代码。对于采用J2EE技术的软件项目来说,JDNC是一个非常好的选择。Thinlet是非常有创意的技术,只使用AWT,编写出21个常用的图形组件,具备良好的浏览器兼容性,非常少的内存占用,快速的启动速度,界面也比较美观,学习和掌握也很容易。Thinlet也比用在J2ME技术中,编写手机内运行的图形应用程序。
找到的一个比较表,比较几个界面设计语言,Macromedia的 Flex (MXML)和微软的XAML以及 Mozilla 的XUL。XUL全部为绿色,就不标出了。
不过虽然XAML只能在lognhorn上用,现在也有好多公司推出现就可以编写xaml的工具。如xamlon。
另外设计表单的标准还有W3C的Xform。
MXML | XAML | XUL |
Here today | 2006? 2007? | Here today and battle tested. |
Runs anywhere Flash Player 7 runs | Runs only on Longhorn | Runs on any platform. Runtime smaller than .Net. |
Server required | Server not required | Server Not Required |
Uses ActionScript 2.0 | Uses .NET languages | Javascript, Python, C++ |
XPath support: no | XPath support: yes | XPath support: yes |
CSS support: limited | CSS support: no | CSS Support: excellent. |
-----
另外像MXML基於flash的技術還有laszlo,下面有段話可以具體了解這些技術是否可以被您的項目採用
下面是一段关于这些技术的比较详细的讨论:
推荐javaeye论坛上一贴,对 XUL 系技术非常不错的分析和讨论.
详见:
http://forum.javaeye.com/viewtopic.php?t=8655&postdays=0&postorder=asc&start=0
桶子们在热烈的讨论 UI 技术,这是好事啊。
俺来添加弹药,鉴于大家对 XUL 系列不是特别了解,我就谈谈这些技术的运作方式。
观点:目前的 MozillaXUL/Thinlet/SwiXML/JDNC/XAML/Flex/Laszlo... 在我看来,都是一个套路。
先别急,且听俺慢慢说来。
XUL 的核心思想是“用XML来表达界面”,是 Mozilla 的创新, Mozilla 浏览器本身就是一个经典的 XUL 应用。有兴趣的可以研究 Mozilla/Chrome/Browser.jar 中的东西。这的确是个伟大的发明,以至于,现在其他公司纷纷效仿,出现了N个衍生技术。
Mozilla 的内部,有一个 XRE ,即 XUL Runtime Environment,这个 XRE 解析运行所有的 XUL 应用,包括:Browser本身和各种工具,如 LiveHttpHeader, XUL Console 等等。一个 XUL 文件被 Parser 解析,将其中引用的 Widgets 组装,通过 Render 显示给用户,当发生事件时,通过 ScriptEngine 执行相应事件的脚本代码。可惜的是, Mozilla 的这个宝贝似乎“养在深闺人未识”,罕见有哪个项目使用的。但它的思想,衍生出了N多的技术。
Thinlet/SwiXML/JDNC: Java 的 XRE。以 Applet/Swing 来 Render 界面,发生事件时,调用用户自己的事件处理程序(java 程序)。
XAML: Longhorn 内置 Native 的 XRE。以 Windows 的界面组件来 Render 界面,发生事件时,调用用户自己的事件处理程序(.NET 的程序)。
Flex/Laszlo: 基于 Swf 的 XRE。先由 Java 的 Interpreter 将 MXML/LZX 源文件生成为 Swf 文件,该 Swf 可能包含界面构造信息(XUL?)、事件脚本(转换为ActionScript)和经过裁减的WidgetsLib(XUL中用到的widgets)。用 Flash 的界面组件来 Render 界面,发生事件时,调用用户的事件处理程序(用户的代码转换成的ActionScript程序)。
大胆预测一下:
这些技术中,最具竞争力的是 Longhorn/XAML ,它具备平台底层的支持(OS内置),可以想象性能和能力都要比其他要出色。但,这也是弱点,如果没有一个合理可靠的安全机制做保证,它也有可能因为安全问题而败北。
Thinlet/SwiXML已是成熟技术,它们将在各自领域继续发挥作用,但,Sun 目前正在立推 JDNC ,预计这两个产品将不会有更大的作为。而 Sun 的 JDNC 是很有野心的计划,在非 Windows 平台它将可能是唯一的通用标准(如果MozillaXUL的推广仍无起色)。但在 XAML 蓄势待发的情形下,它有可能和目前的 Applet/Swing 一样,处于劣势。
Flex/Laszlo在浏览器领域肯定会占据一席之地,因为它们目前已经比较成熟。而,彼此的竞争会带来更大的利益。Laszlo 现在已经是 OpenSource 的了,走 CPL 协议。Flex 也被迫推出了非商业客户的免费计划。如果 Flex/Laszlo 在 XAML 推出之前能有 Killer 级的应用,可能会形成事实上的 RCP 标准从而取得优势也未可知。
那么,下一个界面技术对我们的开发有什么影响呢?或者,那时的应用会是怎样的?
以 XAML 为例,应用的客户端可能就是一个 XAML 的文件。这个文件可以象现在 JavaWebStart 的 JNLP 一样,从网上下载,本地缓存。运行时,XAML 被运行环境打开,如果需要,Client 从远端的 WebService 上获取功能支持。这意味着基于 XAML 的 Web 应用可以完全脱离浏览器,但仍具备 Web 技术的优势。不依赖于浏览器的界面将有更丰富的表示形式。而 JDNC 如果和 JavaWebStart 结合,则意味着 Java 标准的 RCP 平台(不过几乎可以肯定性能会不如 M$),对于非 Windows 平台意义重大。
可以看到,关键业务逻辑被集中于服务器。依据 SUN 和 M$ 的和解协议,以 webservice/xml 方式提供的服务将具备互操作性(不排除 M$ 违反协议推独立标准的可能)。也就是说,只要遵循 WebService 的标准,任何一种 Client UI 技术都将被支持。对我们而言,这意味着 UI 层和 Business 层的进一步分离。也就是更多的服务器端开发(WithOut HTML)。