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:还是未知数
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
作者
相关推荐
-
内存数据网格提供商一头扎进Java
10年的时间里,应用性能解决方案提供商Alachisoft一直在用NCache(针对N-Tier和网格计算.NET应用的内存计算和数据网格产品)为.NET社区服务。
-
遇到这样一个问题:通过java service wrapper部署应用,wrapper进程占用的内存会一直升高, 直到把内存吃完应用崩溃,但是这个wrapper
遇到这样一个问题:通过java service wrapper部署应用,wrapper进程占用的内存会一直升高 […]
-
Google App Engine for Java 对于目前中国需要学习吗?
-
前无古人后无来者的Java平台
开发人员一直在致力于保持Java的活力,经过20年后,我们感觉从来没有更好的、更令人激动的时刻如同Java社区一样。