`

比较JSF、Spring MVC、Stripes、Struts 2、Tapestry、Wicket 框架

    博客分类:
  • J2EE
阅读更多
Java Web层框架——JSF、Spring MVC、Stripes、Struts 2、Tapestry和Wicket他们各自的优点和缺点:

JSF
优点:
◆Java EE标准,这意味着有很大的市场需求和更多的工作机会
◆上手快速并且相对容易
◆有大量可用的组件库
缺点:
◆大量的JSP标签
◆对REST和安全支持不好
◆没有一个统一的实现。既有SUN的实现,又有Apache的实现——MyFaces。
◆国内的OperaMasks还支持AJAX,以及有开发工具支持

Spring MVC
优点:
◆对覆盖绑定(overriding binding)、验证(validation)等提供生命周期管理
◆与许多表示层技术/框架无缝集成:JSP/JSTL、Tiles、Velocity、FreeMarker、Excel、XSL、PDF等
◆便于测试——归功于IoC
缺点:
◆大量的XML配置文件
◆太过灵活——没有公共的父控制器
◆没有内置的Ajax支持

Stripes
优点:
◆不需要书写XML配置文件
◆良好的学习文档
◆社区成员很热心
缺点:
◆社区比较小
◆不如其他的项目活跃
◆ActionBean里面的URL是硬编码的

Struts 2
优点:
◆架构简单——易于扩展
◆标记库很容易利用FreeMarker或者Velocity来定制
◆基于控制器或者基于页面的导航
缺点:
◆文档组织得很差
◆对新特征过分关注
◆通过Google搜索到的大多是Struts 1.x的文档

Tapestry
优点:
◆一旦学会它,将极大地提高生产率
◆HTML模板——对页面设计师非常有利
◆每出一个新版本,都会有大量的创新
缺点:
◆文档过于概念性,不够实用
◆学习曲线陡峭
◆发行周期长——每年都有较大的升级

Wicket
优点:
◆对Java开发者有利(不是Web开发者)
◆页面和显示绑定紧密
◆社区活跃——有来自创建者的支持
缺点:
◆HTML模板和Java代码紧挨着
◆需要对OO有较好的理解
◆Wicket逻辑——什么都用Java搞定

接着,Matt通过采访这些框架的作者,与他们讨论各种开源的Java Web框架,并且突出各个框架的长处、听取框架作者对其他框架的看法,希望借此了解这些框架的未来发展方向。

下列是一些被采访者:
JSF:Jacob Hookom
RIFE:Geert Bevin
Seam:Gavin King
Spring MVC:Rob Harrop
Spring Web Flow:Rob Harrop and Keith Donald
Stripes:Tim Fennell
Struts 1:Don Brown
Tapestry:Howard Lewis Ship
Trails:Chris Nelson
Struts 2:Patrick Lightbody
Wicket:Eelco Hillenius

Matt对采访做了如下总结:
JSF:
如果你想让web应用具有类似桌面程序的功能性,那么JSF的标准规范和大量第三方组件库的支持值得你 信赖。
Spring MVC:
综合了许多不同的技术,这使得它可以被广泛地应用到不同类型的项目中去;它可以被当作web应用开发的一个基础平台。
Stripes:
可以被应用到存在大量复杂数据交互的程序中;有强大的类型转换、绑定和验证功能;可以使管理大的复杂表单以及直接映射它们到域对象变得简单……
Tapestry:
在中到大型项目中,表现突出(当然,你也可以只把它应用到单个页面上),在这些项目中,你可以通过简单地创建新的组件起到杠杆作用。
Struts 2:
通常更适合于那些希望可以真正开始做事并且愿意花费大量时间来学习他们使用的开源工具的小项目组。Struts 2的目标不是那些更喜欢拖放式开发的“扶手椅程序员”。
Wicket:
非常适合于这样的内/外部网应用:UI很复杂并且你希望可以充分利用你的开发者资源。

上面的总结,基本是突出了各个框架的长处。然而,哪些又是他们不好的地方呢?
Matt提出了评价一个框架好坏与否的标准:
◆Ajax支持
是不是内置了?是否便于使用?
◆书签能力
用户能否将某个页面收藏起来并且可以方便地返回到该页面?
验证
使用是否简单?是否支持客户端(JavaScript)验证?
◆可测试性
脱离容器测试控制器,是否足够简单?
◆提交和重定向
框架如何处理重复提交问题?
◆国际化
如何支持国际化?控制器利用国际化信息,是否容易?
◆页面修饰
框架支持哪种类型的页面修饰/组成机制?
◆社区和技术支持
提出问题,能否被快速地、恭敬地回答?
◆开发工具
是否有支持这个框架的好的工具,尤其是IDE?
◆市场需求
学习了这个框架,它能否帮你找到份工作?
◆岗位数量
在dice.com和indeed.com上,对这个框架技能的需求如何?

笔者认为这个评价标准,值得大家借鉴。

然后,Matt按照这些评价标准,对各个框架做了以下阐述:
Ajax支持
◆JSF:没有内置的Ajax支持,需要使用ICEfaces和Ajax4JSF
◆Stripes:没有对应的类库,支持流输出
◆Struts 2:内置Dojo,有用于GWT和JSON的插件
◆Spring MVC:没有对应的类库,需要使用DWR和Spring MVC扩展
◆Tapestry:Tapestry 4.1中,有内置的Dojo
◆Wicket:有Dojo和Script.aculo.us支持

书签能力
◆JSF:可以任意提交——URL甚至不被考虑
◆Stripes:使用约定,但是你可以不加理会
◆Struts 2:有命名空间的概念,这使得收藏某个页面并返回变得容易
◆Spring MVC:允许完全的URL控制
◆Tapestry:依然存在一些丑陋的URL
◆Wicket:允许装配(mount)页面/URL

验证
◆JSF:默认的国际化信息丑陋,但是配置简单
◆Stripes和Wicket:用Java类进行验证——不支持客户端验证
◆Struts 2:使用OGNL完成强大的表达式验证功能;只有在Action上指定了规则,才支持客户端验证。
◆Spring MVC:允许你使用公共验证器——这是一种成熟的解决方案
◆Tapestry:有健壮的验证功能——不需自定义就有漂亮的国际化信息

可测试性
◆Spring MVC和Struts 2:允许利用mocks(例如EasyMock、jMock和Spring Mocks)简单地进行测试
◆Tapestry:测试困难,因为页面类被抽象、具体类被简化
◆JSF:页面类可以方便地被测试,实际上很像Struts 2 中的actions
◆Wicket:有WicketTester——一个强大的解决方案
◆Stripes:有Servlet API Mocks和MockRoundtrip

提交和重定向
解决重复提交问题的最简单方法是:在提交后重定向
◆Spring MVC:允许你将参数加到重定向URL上
◆Stripes、Tapestry和Wicket:有“flash式”的支持
◆Struts 2:需要一个自定义的解决方案
◆JSF:需要一个自定义的解决方案,国际化信息很难加入到页面bean中

国际化
◆JSTL的标签使国际化变得简单;如何将国际化信息放到控制器类中,还没有一个统一的标准。
◆Stripes、Spring MVC和JSF:每个地区使用一个资源绑定文件
◆Struts 2、Tapestry和Wicket:提倡把每个页面/action用到的资源文件分开
◆JSF:需要在每个页面上定义资源绑定信息
◆Tapestry:标签比较可怕

页面修饰
◆Tiles能够用于Struts 2、Spring MVC和JSF中;需要对每个页面进行配置。
◆SiteMesh能够用于所有的这些框架中(不推荐在JSF、Tapestry或者Wicket中使用);在设置完成后, 只需要很少的维护。

开发工具
◆Spring MVC:Spring IDE,但是只做XML校验,不是一个UI/web工具
◆Struts 2:Eclipse
◆Tapestry:Spindle,对编码者非常有利
◆JSF:众多IDE支持,并且做得越来越好
◆Stripes和Wicket:没有任何官方工具
◆NetBeans目前支持Struts *、JSF(+Facelets)、Tapestry和Wicket,尚不支持Stripes和Spring MVC


市场需求
◆Struts 1:需求依然很大并且被广泛使用
◆Spring MVC:越来越受关注,但大部分是因为Spring框架的一些其他特征
◆JSF:很快地变得流行起来
◆Struts 2:正在获得地盘,但是相关的工作机会很少
◆Tapestry:在过去的数年里,受欢迎程度不断增加
◆Wicket和Stripes:还是未知数

【编辑推荐】

JSF和AJAX企业级开发之路(一)
JSF和AJAX企业级开发之路(二)
在JSF应用中捕捉managed-bean构造方法
表现层框架Struts/Tapestry/JSF比较
简单介绍JSF标签
分享到:
评论

相关推荐

    Java Web层框架之比较—比较JSF、Spring MVC、Stripes、Struts 2、Tapestry和Wicket.doc

    本文将深入对比六种流行的Java Web层框架:JSF、Spring MVC、Stripes、Struts 2、Tapestry和Wicket。 **JavaServer Faces (JSF)** JSF作为Java EE的一部分,拥有广泛的支持和市场需求。它的优点在于快速上手和丰富...

    Comparing Web Frameworks; Struts, Spring MVC, WebWork, Tapestry & JSF.pdf

    此软件介绍webwork and struts and jsf的区别

    Tapestry,JSF和Struts的比较

    Tapestry、JSF(JavaServer Faces)和Struts都是广泛使用的MVC(Model-View-Controller)框架,它们各自具有独特的特性和优势。下面我们将深入探讨这三个框架的核心概念、优缺点以及适用场景。 首先,Tapestry是由...

    Struts+Spring+Hibernate+Jsf

    Struts、Spring、Hibernate 和 JavaServer Faces (Jsf) 是Java Web开发中四个非常重要的框架。这四个框架的集成使用可以构建出高效、模块化且易于维护的企业级应用。 Struts 是一个开源的MVC(Model-View-...

    基于J2EE下的JSF与Struts框架比较分析

    ### 基于J2EE下的JSF与Struts框架比较分析 #### 一、引言 随着互联网技术的发展,企业级应用的需求日益增长,Java 2 Platform, Enterprise Edition (J2EE)作为一套全面的企业级Java应用开发平台,凭借其开放性、...

    spring+struts+hibernate框架

    "Spring+Struts+Hibernate"(SSH)框架是Java Web开发中的经典组合,被誉为"三剑客"。这个框架集合提供了全面的企业级应用解决方案,帮助开发者构建高效、可扩展且易于维护的Web应用程序。 Spring框架是核心,它...

    Spring集成Struts、JSF、WebWork2

    这篇博客"Spring集成Struts、JSF、WebWork2"探讨了如何将这些框架与Spring进行整合,以构建更复杂、灵活的Web应用程序。 首先,让我们详细了解一下这三个框架: 1. **Struts**: Apache Struts 是最早的Java MVC...

    jsf+spring 实例

    JSF是一个用于构建用户界面的MVC(Model-View-Controller)框架,而Spring则是一个全面的后端框架,提供依赖注入、事务管理、安全控制等众多功能。将这两者结合起来,可以实现从前端到后端的完整解决方案。 **1. ...

    JSF与Spring完美结合

    2. **配置JSF**:为了使JSF能够与Spring协作,需要在JSF的配置文件(如`faces-config.xml`)中添加Spring的JSF监听器`org.springframework.web.jsf.FacesContextListener`,这样JSF就能识别到Spring的Bean。...

    java开发框架(Spring+Hibernate+Struts)

    Java开发框架中的Spring+Hibernate+Struts组合,被誉为Java开发的主流体系,具有显著的优势地位。这个框架组合的稳固性体现在其广泛的应用和社区支持,尤其是在企业级JavaEE应用中。Spring作为一款全面的轻量级应用...

    spring3.0MVC中文教材

    - **高度可配置性**: Spring MVC的设计非常灵活,可以轻松地与其他流行Web框架(如Struts、WebWork、JSF和Tapestry)集成,使得开发者可以根据项目的具体需求选择最适合的技术栈。 - **与其他框架的无缝集成**: ...

    spring mvc 教程

    1. **与Spring MVC深度整合**:Spring Web Flow 2.0不再是独立的框架,而是作为Spring MVC的扩展出现,这意味着开发者可以在同一个项目中混合使用Spring MVC和Spring Web Flow,实现更为灵活的Web应用架构设计。...

    jsf2+spring sample

    "jsf2+spring sample"项目是将这两者结合起来的一个示例,旨在展示如何在实际开发中整合这两个强大的框架。 JSF2的关键特性包括: 1. **组件化UI**:JSF2提供了一系列预定义的UI组件,如按钮、表单、表格等,使得...

    JSF+Spring+Hibernate(框架整合)详细过程

    2. **JSF与Spring的整合**:为了使JSF能够使用Spring的Bean,我们需要添加`spring-jsf`库,并配置JSF的` faces-config.xml`,将Spring作为JSF的Managed Bean提供者。这样,JSF可以通过Spring的ApplicationContext...

    java javaee struts2 spring hibernate免费学习视频教程

    - **Struts2简介**:了解Struts2框架的架构设计及其在MVC模式中的角色。 - **Struts2配置与使用**:掌握Struts2的配置文件编写方法,以及如何通过Action、Interceptor等组件实现业务逻辑处理。 - **Struts2高级特性*...

    JSF和Spring集成.doc

    - **Spring MVC**:Spring MVC 作为 Spring 框架的一部分,可以很好地与 JSF 集成。通过配置,可以实现 JSF 的视图渲染与 Spring 控制器之间的交互。 - **SpringFaces**:这是一个专门用来集成 JSF 和 Spring 的...

    qt.rar_jsf example_jsf spring hibernate_jsf下拉菜单_spring jsf hiber

    JSF是一个用于构建用户界面的MVC框架,它与Spring的结合可以提供更强大的前端控制。Hibernate则是一个对象关系映射(ORM)工具,它简化了数据库操作,使得开发者可以用Java对象的方式来处理数据。 "并有下拉菜单" ...

    jsf-spring-4.0.3

    **JSF(JavaServer Faces)与Spring框架的整合** JSF和Spring是两个在Java Web开发中广泛应用的框架。JSF是一种用于构建用户界面的MVC(Model-View-Controller)框架,它提供了丰富的组件库和事件处理机制,简化了...

    JakartaEE Spring MVC

    【JakartaEE Spring MVC】是Java企业级应用开发的一个重要组成部分,它结合了 JakartaEE(以前称为Java EE)的框架能力和Spring MVC的轻量级控制反转(IoC)与依赖注入(DI)特性,提供了高效且灵活的Web应用程序...

    JSF Spring hibernate2

    Spring还包含对其他功能的支持,如事务管理、数据访问集成、Web MVC以及测试框架等。Spring的模块化设计允许开发者根据需要选择使用哪些部分,这极大地增强了灵活性。 **Hibernate** 是一个对象关系映射(ORM)框架...

Global site tag (gtag.js) - Google Analytics