kook's zone

浪子的心声

当JSF遭遇Ajax

痛苦源于 J2EE Web 开发

互联网的发展推动了基于浏览器的 B/S 多层体系应用发展,尤其是众多 Web2.0 模式网站的涌现, AJAX 技术的推波助澜,人们忽然发现 Web 应用竟然可以如此之美,于是 Web 开发技术忽如一夜春风来,迅速风靡了 IT 行业的不同应用领域。随着分布式技术体系的不断发展和完善, J2EE 作为一个开放的,安全的,可多样性选择的分布式计算标准,已经远远超越了 .net 和 Corba ,成为企业信息化系统建设的首选技术体系,并迅速占据了大半壁江山,将竞争对手远远的抛在了身后。

当我们逐渐沉迷于 J2EE Web 技术开发的时候,虽然享受着 J2EE 服务器端编程所带来高可靠性,安全性和运行期的高效稳定性,但随之痛苦也逐渐而来。当我们一遍遍的用原始的编辑器来编写 JSP 界面的时候,当我们基于有限的 HTML 界面组件进行编程的时候,才发现一切并不那么美好,我们的激情开始退却,开始怀念 VB , Delphi 可视化编程的时代 …

当 VB , Delphi 时代已经成为过去的时候,我们应如何适应 Web 应用开发的潮流?也许痛苦将与快乐并存,也许会有更好的解决方式,我们都在期待中 …

我们需要什么 ?

作为 Java 的忠诚技术爱好者,我们不需要微软的 .net ,微软的 Studio ,虽然它看起来很美,很方便,但不符合我们追求自由和完美的理想主义。我们需要标准,需要技术,但坚决抵制垄断,我们坚决拥抱 Java 世界所倡导的自由氛围,一切源于技术,一切源于开放。

随着 Java EE5 技术标准的推出, J2EE 技术架构作为服务器端的编程已经被证明是一种可靠的分布式技术标准,而且对开发人员越来越友好,大大的降低了学习曲线和开发成本,尤其是 EJB3.0 技术规范的出台,更是解决了长期以来存在的 EJB 架构和 O/R Mapping 问题。在 Web 层开发方面, JSF 技术将为我们提供一种以组件为中心来开发 Java Web 用户界面的方法。

其实我们的需求很简单,对基于 J2EE Web 应用开发来说,一个集成式的 J2EE IDE 开发环境,能帮助我们很方便的进行业务逻辑开发,能方便的进行 Web 应用界面的可视化开发,并且拥有大量的界面组件。从目前的 Java IDE 开发环境来看,都可以满足基于 Java Bean 或者 EJB 模型的业务逻辑开发,但是在 Web 应用界面开发方面,还没有一个非常方便易用的可视化 IDE 环境。

当 JSF 标准出台后,我们似乎看到了希望,我们相信一切会好起来的。

JSF 看起来很完美

JSF ( Java Server Faces )是一种用于构建 Web 应用程序的新标准 Java 框架。它提供了一种以组件为中心来开发 Java Web 用户界面的方法,从而简化了开发。 JSF 开发可以简单到只需将用户界面 (UI) 组件拖放到页面上,而 “ 系统开发人员 ” 将发现丰富而强健的 JSF API 为他们提供了无与伦比的功能和编程灵活性。 JSF 还通过将良好构建的模型 - 视图 - 控制器 (MVC) 设计模式集成到它的体系结构中,确保了应用程序具有更高的可维护性。最后,由于 JSF 是通过 Java Community Process (JCP) 开发的一种 Java 标准,因此开发工具供应商完全能够为 Java Server Faces 提供易于使用的、高效的可视化开发环境。

JSF 是否能解决我们长期以来的 Web 开发之痛呢?它看起来很美, Sun 为什么会搞出一个 JSF , JSF 为什么会是现在这个样子,我想原因大致可能是这样的。

首先,基于组件的 Web 开发将来会是一个趋势。自包含的组件便于 IDE 的处理,可以提高开发效率。就是说 JSF 优于 Struts/Web Work 这类 MVC 框架的优势,在于它可以与 IDE 结合来自动生成代码,不需要开发人员再去关注界面的具体实现,而把精力更集中于界面逻辑控制的实现。而传统的纯手工编写的 MVC 框架,则影响了开发效率。

作为界面开发技术, Java 在客户端并没有明显的优势。 Applet 已经被抛弃掉, Java 的强项在服务器端。 Sun 不可能跑去使用 JavaScript ,因为在传统开发者眼里, JS 只配做一点很琐碎的任务。于是在他们设计的这个架构中,所有的用户事件都放在了服务器端来处理。这个决策造成了 JSF 致命的缺点,它把事件处理模型绑死在服务器上,限制了响应性更加灵敏的交互设计。随之而来的网络延迟会毁掉软件的可用性。

JSF 技术企图起到传统 C/S 应用中 Client 的作用,但由于浏览器技术的限制,虽然解决了界面组件化,可视化的问题,但是还远远达不到无缝的,灵敏的交互性体验。

当 JSF 遭遇 AJAX

最近互联网上比较火热的话题当然是关于 WEB2.0 的应用,其中 AJAX 又是 WEB2.0 的核心之一。 AJAX 是 Asynchronous JavaScript and XML 的缩写。它并不是一门新的语言或技术,它实际上是几项技术按一定的方式组合在一在同共的协作中发挥各自的作用,它包括:使用 XHTML 和 CSS 标准化呈现;使用 DOM 实现动态显示和交互;使用 XML 和 XSLT 进行数据交换与处理;使用 XMLHttpRequest 进行异步数据读取;最后用 JavaScript 绑定和处理所有数据。

Ajax 的工作原理相当于在用户和服务器之间加了 — 个中间层,使用户操作与服务器响应异步化。这样把以前的一些服务器负担的工作转嫁到客户端,利于客户端闲置的处理能力来处理,减轻服务器和带宽的负担,从而达到节约 ISP 的空间及带宽租用成本的目的。

异步请求 / 响应是 Ajax 与传统开发方式最大的差别,异步带来了更好的交互设计。在 Ajax in Action 第 1 章中作者举了一个令人信服的例子。 Google Maps 中当用户滚动地图时,获取新的地图图片,由于是异步请求的,因此不会打断用户的操作流程。而在传统的地图服务,每次滚动可能都需要刷新页面。用一下微软的那个地图服务就可以感觉到明显的差距,它甚至根本就不允许用户滚动地图。

JSF 的设计思路有点模仿 VB ,组件化的开发这个方向是没错的, Ajax 开发将来也会走这条路。但是 JSF 与 VB 最大的差别是 VB 的事件模型都是位于本地来处理的。这是一种本质上的差别,所以如果 JSF 确实想模仿 VB ,那也是东施效颦。而且在 JSF 的设计阶段,同步的请求 / 响应是主流,他们的思路仍然牢牢束缚在基于页面的开发方式上。根本就没有思考过其他的可能。

JSF 其实如果和 Applet 结合,可能更好些。 Applet 是多线程的,可以捕获用户的操作事件,采用异步方式发送到服务器。这样就不会打断用户的操作了。但是这样一来设计的这个架构就复杂了。而且 Applet 是已经决定抛弃的东西。 JSF 和 Java Web Start 结合也可以,不过 JWS 设计用来建造一类完全不同的 Web 应用,即 Rich Client ,而不是设计用来建造运行于浏览器之内的 RIA 应用。

从以上分析可以看出,如果 JSF 还是基于目前的技术标准来实现,从长远来看,最多只是一种过渡方案。未来基于浏览器的 RIA 开发中, Ajax 、 Flash 是两种最有前途的技术,最终可能是三分天下, Ajax 、 Flash/Flex/Laszlo 、还有 MS 的 Atlas 。另外有人会提出疑问,还有 XUL 呢?只要 MS 一天不倒, XUL 成不了标准,注定会是失败的,大家看看 Firefox 的市场占有率就可以知道了。

当然, Ajax 也只是一种客户端的过渡技术,如果没有一种很好的 Web 端框架的支持,它也仅仅只能做到一种异步数据传输的作用,它解决问题的方法与手段很难形成一种可高度抽象的框架级解决方案,无法形成一个完整的 Web 开发应用模型,而 JSF 则是一种可扩展的 Web 框架级解决方案。

但当 JSF 遭遇 Ajax 后,这一切将发生革命性的变化。 JSF 和 Ajax 技术的结合,才能实现高效的,轻量级的 J2EE Web 开发应用架构,依靠 JSF 的组件和事件模型, Ajax 的异步通讯方式,共同营造一个体验好,界面友好的互联网富客户端应用环境。

posted on 2006-12-13 16:35 浪子心声 阅读(1443) 评论(0)  编辑  收藏