作者: by Phil Zoio
翻译: BlueCrystal
来自: http://www.theserverside.com/articles/article.tss?l=JSFTapestry
目前应用很广泛而且也很成熟的Struts应用开发框架,在未来几年里将会逐渐淡出,其基于Action(action-based)的开发模型也将被活跃的java社区所推崇的新的开发模型所替代,对于java开源社区来说,追求完美是很多人的理想。在2000年初诞生的Struts以及其他类似的 MVC(Model View Controler)框架主要都是以操作为中心,且都是无状态的开发模型,而现在,基于组件(component-based)和事件驱动(event- driven)的开发模型逐渐流行起来,在很多时候都成了Struts的有利竞争者,这其中来自jcp的jsr127-JavaServer Faces(JSF)以及来自apache的Tapestry是其中的佼佼者。
在这篇文章中,我们将把这两种框架JSF和Tapestry进行详细的对比。我们的比较将涉及到两种框架的设计、运行环境以及如何开发。比较的目的在于让读者了解这两种框架各自的优缺点,以便于在自己的项目中,根据实际情况,选择合适的框架。该文章的内容基于JSF1.1和Tapestry3.0.3 (在个别地方由于需要会谈到Tapestry4.0)。
JSF和Tapestry简介
JSF源于JCP(Java Community Process)的JSR127规范。Sun公司自己同时也对该规范提供了一个实现,目前的版本是1.1,而且该项目的设计者之一正是Struts的作者 Craig McClanahan。另外一个JSF的实现,就是Apache的一个项目MyFaces。目前,几个主流的java开发工具厂商都在其java ide中提供了对jsf的支持,比如Sun、Oracle、IBM、Borland等,而且JSF的后续版本JSF1.2也将成为J2EE5.0的一个组成部分。
Tapestry最初于2000年在SourceForge注册,来自于Apple WebObjects,随后,于2003年成为Apache的一个项目。与JSF不同的是,Tapestry并不是某一个jsr规范的实现,它仅仅是一个开源项目,当前版本是3.0.3。4.0版本预计也将在后面的一段时间内推出。
JSF和Tapestry作为MVC框架,在一些基本特性上是非常类似的:
- 它们都让开发者不再直接与Servlet API打交道,而是让开发者在一个更高的抽象层上思考问题;
- 它们都将web页面上的显示元素绑定到一个java对象的某个属性上,这些属性可能是字符串、数字、日期或者其他类型,并且由该对象来维护其状态。用户在页面上的交互行为(比如用鼠标点击一个按钮或者链接)都直接映射为java类中的一个事件处理方法;
- 两种框架都支持组件式的开发方式,并且开发的组件可被其他开发者重用。两种框架都自带一个标准组件库,提供web开发的常见通用功能。
在下面的章节里面,我们将会看见这两个框架在各自的实现方式上是有很大区别的。对于大多数程序员来说,基于两种框架做开发,将是非常不同的两种体验。
Sidebar: 例子程序
在下面本文提供了一个例子程序,该程序的代码大部分都将在这片文章中做出详细的描述。这个程序主要就是一个管理个人假期的工具,它的主要功能包括:
* 一个home界面, 列出所有登记的假期,包括假期开始时间、天数以及一下描述信息;
* 一个detail界面,用于浏览某一登记假期的详细信息;
* 一个new界面,用于添加一个假期信息。
下面这幅图展示了该程序的主体流程和功能:
你可以从下列地址下载该程序基于不同框架的源代码:
JSF version
Tapestry version