|
Struts
|
JSF
|
Tapestry
|
ASP.NET
|
Architecture
|
跳轉(zhuǎn)模型
MVC
|
跳轉(zhuǎn)模型
Front Controller+組件化編程
|
頁(yè)面模型
Page Controller+組件化編程
|
頁(yè)面模型
Page Controller+組件化編程
|
Programming Model
|
業(yè)務(wù)邏輯:
Struts1中需要繼承基類;Struts2是POJO的模型;
頁(yè)面邏輯:
有很不同實(shí)現(xiàn),可以是JSP,也可以是通過模版引擎渲染。
|
業(yè)務(wù)邏輯:
POJO的編程風(fēng)格;
頁(yè)面邏輯:
主要是JSP,也可以用HTML風(fēng)格。
|
業(yè)務(wù)邏輯:
Taperstry4需要繼承基類;但Taperstry5就是POJO風(fēng)格;
頁(yè)面邏輯:
普通的HTML。
|
業(yè)務(wù)邏輯:
需要繼承基類;
頁(yè)面邏輯:
類似JSP,但不同的是,該頁(yè)面實(shí)際是業(yè)務(wù)邏輯類的子類。
|
Request Process
|
|
由官方定義的六個(gè)步驟組成;
|
取決于Engine Service。
|
由官方定義的15個(gè)步驟組成。
|
Navigation
|
Path和Action綁定,需要配置文件解析。
|
通過faces-config.xml配置文件完成。
|
URL是全局的,沒有額外的配置文件;
除非顯式跳轉(zhuǎn),所以行為都在本Page上。
而跳轉(zhuǎn)分兩種:
1. DirectLink寫在頁(yè)面上
2. 在代碼邏輯中定義頁(yè)面跳轉(zhuǎn)邏輯。
|
同Tapestry類似。
|
Event handling
|
無
|
頁(yè)面定義事件發(fā)起;兩種方式參數(shù)傳遞方式:一種分離傳遞;另一種通過FacesContext。
|
頁(yè)面定義事件發(fā)起;直接賦予參數(shù),沒有參數(shù)個(gè)數(shù)限制;除此外還有內(nèi)置的生命周期相關(guān)的event
|
類似Swing的事件控制方式。
|
Component State
|
無
|
沒有狀態(tài)維護(hù)機(jī)制,每次request都從建組件。
|
提供組件狀態(tài)的維護(hù)機(jī)制。
|
提供組件狀態(tài)的維護(hù)機(jī)制。
|
Component Dev
|
無
|
基于JSP Tag的開發(fā)方式。
|
開發(fā)方式類似Page, 邏輯代碼和頁(yè)面分離,頁(yè)面輸出使用HTML。
|
開發(fā)方式類似Page;邏輯代碼和頁(yè)面分離;頁(yè)面輸出可以復(fù)用已有的組件
|
View
|
有很不同實(shí)現(xiàn),可以是JSP,也可以是通過模版引擎渲染。
|
主要是JSP,也可以用HTML風(fēng)格。
|
HTML
|
類似JSP頁(yè)面。
|
Validation and Conversion
|
|
提供了多種方式支持,但客戶端驗(yàn)證支持不好,同時(shí)在form一級(jí)的支持不好,通常需要項(xiàng)目自己定制。
|
同樣提供多種方式支持;此外提供客戶端的Validation;天然地支持form一級(jí)支持。
|
類似Tapestry。
|
I18N
|
較好的支持。
|
較好的支持。
|
很好的支持,額外提供預(yù)覽功能。
|
|
Testability
|
Struts1的測(cè)試不容易,Strut2測(cè)試容易簡(jiǎn)單。
|
測(cè)試支持簡(jiǎn)單容易。
|
Tapestry4的測(cè)試不容易,不過Tapestry5的測(cè)試可以很簡(jiǎn)單。
|
不容易測(cè)試。
|
Extensibility
|
|
良好
|
良好
|
良好
|
Industry Momentum
|
廣泛使用,目前各種資源都不錯(cuò)。
|
JSF業(yè)界標(biāo)準(zhǔn),業(yè)內(nèi)廠商支持會(huì)比較多,不過未必不會(huì)出現(xiàn)EJB2的結(jié)局。
|
應(yīng)用范圍小于Struts,之前的版本學(xué)習(xí)曲線太高。
|
微軟地主老財(cái),有大把的錢;此外,大量的第三方公司提供支持。
|
Migrate
|
|
從Struts遷移不難;
|
從Struts或者JSP遷移難度較大些。
|
|
Java Web框架種類繁多,花樣迭出,主流一點(diǎn)的就有Struts,Webwork,SpringMVC,JSF,Tapestry,至于非主流的就更加不計(jì)其數(shù)了。還有很多基于這些框架的衍生框架,例如基于Struts的beehive,基于JSF的JBoss Seam,基于JSF的MyFaces,Shale等等。對(duì)于開發(fā)人員來說,過多的選擇是一種沉重的負(fù)擔(dān),不但需要花更多的時(shí)間去學(xué)習(xí),也需要更多的時(shí)間去維護(hù)基于不同框架的代碼。
由于面臨著dotnet統(tǒng)一的web框架webforms以及異軍突起的rails的強(qiáng)勢(shì)挑戰(zhàn),Java業(yè)界也感受到競(jìng)爭(zhēng)的絲絲寒意,這不,眾多Java Web框架的核心開發(fā)人員終于可以坐到一起,商量著Web框架的統(tǒng)一和互操作的問題了。
http://opensource2./confluence/oss/display/WAG/Home
由眾多Java Web框架的開發(fā)人員組成的一個(gè)團(tuán)隊(duì)……Java Web Alignment Group,這其中包括了Struts,Webwork,JSF,Beehive,JBoss Seam,Spring MVC等眾多框架核心開發(fā)人員組成,目標(biāo)則是加強(qiáng)交流和合作,促進(jìn)各個(gè)Web框架之間的協(xié)作,給Java開發(fā)人員提供盡量方便的解決方案。
他們討論的內(nèi)容在Yahoo Group:http://groups.yahoo.com/group/java_web_alignment/
加入這個(gè)mailist需要批準(zhǔn)。
目前這個(gè)Group的討論已經(jīng)得到了一個(gè)顯著的進(jìn)步:struts,webwork和beehive的合并!
我們知道Web框架主流上分為兩類:MVC框架和事件響應(yīng)機(jī)制框架。MVC框架有Struts,Webwork,Spring MVC,以及一些基于這些框架的框架,如Spring Webflow, Beehive等等;事件框架有JSF,Tapestry,Echo等。除此之外,還有一些連接兩者的框架,如Struts Shale等等。
經(jīng)過一段時(shí)間的討論,Struts,Webwork和beehive三方宣布合并,共同發(fā)展下一代MVC模式的MVC框架……Struts Ti。它將主要以Webwork為核心,集成Beehive的annotataion和pageflow功能,推向Struts用戶群體,并且加強(qiáng)和 JSF的集成能力。
這次合并的前景是值得期待的,在MVC領(lǐng)域,主流的選擇將在Struts Ti和Spring MVC之間。不過從目前的情況來看,Struts Ti不會(huì)進(jìn)一步和Spring MVC進(jìn)行合并。Spring MVC的開發(fā)人員希望保護(hù)現(xiàn)有的Spring MVC合作伙伴和客戶,以及在Spring webflow上面的巨大投入。