目前應(yīng)用很廣泛而且也很成熟的Struts應(yīng)用開(kāi)發(fā)框架,在未來(lái)幾年里將會(huì)逐漸淡出,其基于Action(action-based)的開(kāi)發(fā)模型也將被活躍的java社區(qū)所推崇的新的開(kāi)發(fā)模型所替代,對(duì)于java開(kāi)源社區(qū)來(lái)說(shuō),追求完美是很多人的理想。在2000年初誕生的Struts以及其他類似的 MVC(Model View Controler)框架主要都是以操作為中心,且都是無(wú)狀態(tài)的開(kāi)發(fā)模型,而現(xiàn)在,基于組件(component-based)和事件驅(qū)動(dòng)(event- driven)的開(kāi)發(fā)模型逐漸流行起來(lái),在很多時(shí)候都成了Struts的有利競(jìng)爭(zhēng)者,這其中來(lái)自jcp的jsr127-JavaServer Faces(JSF)以及來(lái)自apache的Tapestry是其中的佼佼者。
在這篇文章中,我們將把這兩種框架JSF和Tapestry進(jìn)行詳細(xì)的對(duì)比。我們的比較將涉及到兩種框架的設(shè)計(jì)、運(yùn)行環(huán)境以及如何開(kāi)發(fā)。比較的目的在于讓讀者了解這兩種框架各自的優(yōu)缺點(diǎn),以便于在自己的項(xiàng)目中,根據(jù)實(shí)際情況,選擇合適的框架。該文章的內(nèi)容基于JSF1.1和Tapestry3.0.3 (在個(gè)別地方由于需要會(huì)談到Tapestry4.0)。
JSF和Tapestry簡(jiǎn)介 JSF源于JCP(Java Community Process)的JSR127規(guī)范。Sun公司自己同時(shí)也對(duì)該規(guī)范提供了一個(gè)實(shí)現(xiàn),目前的版本是1.1,而且該項(xiàng)目的設(shè)計(jì)者之一正是Struts的作者 Craig McClanahan。另外一個(gè)JSF的實(shí)現(xiàn),就是Apache的一個(gè)項(xiàng)目MyFaces。目前,幾個(gè)主流的java開(kāi)發(fā)工具廠商都在其java ide中提供了對(duì)jsf的支持,比如Sun、Oracle、IBM、Borland等,而且JSF的后續(xù)版本JSF1.2也將成為J2EE5.0的一個(gè)組成部分。
Tapestry最初于2000年在SourceForge注冊(cè),來(lái)自于Apple WebObjects,隨后,于2003年成為Apache的一個(gè)項(xiàng)目。與JSF不同的是,Tapestry并不是某一個(gè)jsr規(guī)范的實(shí)現(xiàn),它僅僅是一個(gè)開(kāi)源項(xiàng)目,當(dāng)前版本是3.0.3。4.0版本預(yù)計(jì)也將在后面的一段時(shí)間內(nèi)推出。
JSF和Tapestry作為MVC框架,在一些基本特性上是非常類似的:
- 它們都讓開(kāi)發(fā)者不再直接與Servlet API打交道,而是讓開(kāi)發(fā)者在一個(gè)更高的抽象層上思考問(wèn)題;
- 它們都將web頁(yè)面上的顯示元素綁定到一個(gè)java對(duì)象的某個(gè)屬性上,這些屬性可能是字符串、數(shù)字、日期或者其他類型,并且由該對(duì)象來(lái)維護(hù)其狀態(tài)。用戶在頁(yè)面上的交互行為(比如用鼠標(biāo)點(diǎn)擊一個(gè)按鈕或者鏈接)都直接映射為java類中的一個(gè)事件處理方法;
- 兩種框架都支持組件式的開(kāi)發(fā)方式,并且開(kāi)發(fā)的組件可被其他開(kāi)發(fā)者重用。兩種框架都自帶一個(gè)標(biāo)準(zhǔn)組件庫(kù),提供web開(kāi)發(fā)的常見(jiàn)通用功能。
在下面的章節(jié)里面,我們將會(huì)看見(jiàn)這兩個(gè)框架在各自的實(shí)現(xiàn)方式上是有很大區(qū)別的。對(duì)于大多數(shù)程序員來(lái)說(shuō),基于兩種框架做開(kāi)發(fā),將是非常不同的兩種體驗(yàn)。
Sidebar: 例子程序
在下面本文提供了一個(gè)例子程序,該程序的代碼大部分都將在這片文章中做出詳細(xì)的描述。這個(gè)程序主要就是一個(gè)管理個(gè)人假期的工具,它的主要功能包括:
* 一個(gè)home界面, 列出所有登記的假期,包括假期開(kāi)始時(shí)間、天數(shù)以及一下描述信息;
* 一個(gè)detail界面,用于瀏覽某一登記假期的詳細(xì)信息;
* 一個(gè)new界面,用于添加一個(gè)假期信息。
下面這幅圖展示了該程序的主體流程和功能:
你可以從下列地址下載該程序基于不同框架的源代碼:
JSF version Tapestry version
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。