空中的一小块陆地

四、JavaServer Faces
 
刚刚接触JSF的时候,我只是把它看作和Struts类似的技术,看成是Struts这类技术的规范化。
 
的确他们有不少相似的地方,例如:
1、在界面逻辑上,同样用类似的XML配置说明
2、对HTML Form的处理,同样实现了到Java对象的自动转换
 
当然JSF有不少提高的地方:
1、HTML Form动作与事件都能和Java方法的直接关联。这种关联非常直观,而且不需要Java对象继承任何接口
2、managed bean带来以下好处:
    a. IoC创建方式,无需开发人员关心
    b. Java Bean的生命周期管理
 
上述的改进,的确能给Web开发带来不少好处,然而如果只是这些改进,JSF并不足以吸引开发人员放弃现有的开发框架。看看规范上是怎么说的:
 
JSF provides ease-of-use in the following ways:
  • Makes it easy to construct a UI from a set of reusable UI components
  • Simplifies migration of application data to and from the UI
  • Helps manage UI state across server requests
  • Provides a simple model for wiring client-generated events to server-side application code
  • Allows custom UI components to be easily built and re-used
显然这里多次提到的词就是“UI component”,的确如此JSF是一个面向组件的框架。与桌面应用类似,它用组件的思想来构造界面,同样是事件驱动,让我们再对照桌面应用来分析一下:
 
1. 界面布局
JSF采用JSP Tag来进行布局描述。JSF的设计思想是与具体的协议、标识格式无关,也就是说同一个界面布局,可能最终会显示成适合PC机观看的HTML,也可能是适合手机屏幕观看的WML。然而JSF最广泛的应用无疑还是HTTP/HTML,因此他这种“格式无关”的设计思想未必是个优点。
 
因为JSF页面基本上由JSP Tag组成,浏览器和HTML编辑器无法识别,只有相应的开发工具、或者部署运行才能看到最终界面。对于开发人员来说,这太不友好,特别是目前缺乏好的开发工具的情况下。相反与其类似的开源架构Tapestry就是直接基于HTML。
 
也许在技术更加完善的时候,JSF这种思路更加受欢迎。就像Delphi程序,我们只有在Delphi IDE中打开程序,或者是运行起来后才能看到界面。但是现在的技术条件下,还是Tagestry的做法更加简单直观。

2. 组件对象树
与桌面应用类似,JSF同样会在内存中创建一个组件对象树与界面相对应。与桌面应用不同的是,界面和组件对象分布在不同的进程,界面在浏览器中展现,而组件对象树则是在服务器一端。Web应用会有多个页面,当从某个页面的用户请求到达服务端时,JSF必须找出对应的组件对象树,桌面应用则无须面临这种状况。
 
这也是JSF请求相应生命周期第一阶段作进行的工作。

3. 用户事件处理
同样JSF Web应用只会接受HTTP请求,但是它将其转换成相应的事件,采用事件驱动的形式来处理。由于有服务端组件对象的存在,JSF甚至能够提供ValueChange这样的事件,以前的Web应用要显示相同的功能则麻烦的多。
 
同样的道理,由于界面和组件对象分布在不同的进程,事件是在服务器端一次性处理的。用户在浏览器改变输入框的值,并不会立即激发ValueChange这个事件,只有相关的HTML Form被提交到服务器后,相应的事件才会激活。

4. 界面逻辑和业务逻辑
在界面逻辑上,JSF采用和Struts类似的方式,用一个配置文件进行描述;而业务逻辑则由Managed Bean来负责。
 
从上面的分析,我们也可以知道为什么开发一个JSF组件,至少要编写以下两部分内容:
1)JSP Tag,这部分用于进行界面布局;
2)组件类,用于创建组件对象。
 
尽管JSF已经成为J2EE1.4规范的一部分,但是它以后的日子不见得就那么好过。因为在Open Source方面,它有非常多的竞争对手,包括老牌的Struts和类似技术的Tapestry,现在的开发人员不再唯J2EE规范马首是瞻了。JSF如果要要在竞争中胜出,主要依赖于:1)组件市场,组件架构可能带来的优势就是大量可重用的组件,从而提高开发效率。作为官方规范的JSF,有可能促进这个市场的出现与扩大;2)一个类似Delphi这样的开发工具。
 
然而长远来看,JSF包括Struts等Web开发架构都可能被放弃。这些技术的共同特点是都是服务端技术,浏览器仅仅被当作是一个HTML的展现工具,应用的界面逻辑都是体现为页面跳转。随着AJAX的兴起,随着对用户体验的重视程度的增加,我相信Web应用的界面部分将完全转向客户端——浏览器。想象一下如果我们采用Java SWing/Delphi作为客户端,那么服务端就只剩下域对象和一些辅助类了,不再需要什么组建架构,而AJAX越来越体现出这种能力。
 
当然这只是对长远发展的猜测,短期来看服务端Web技术依然是主流,开发人员最好同时掌握两方面的技术。
 
(待续)


Trackback: http://tb.donews.net/TrackBack.aspx?PostId=714365


[点击此处收藏本文]  发表于2006年02月04日 12:31 AM




正在读取评论……

发表评论

大名:
网址:
验证码
评论 
   

news


订阅我的Blog:

以前的flyisland.blogbus.com



最近更新

导航

blog stats

文章

收藏

相册

blog互联:)

friend's blog

存档


正在读取评论……