2005.11.09??來自:CSDN??
作者:?? 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