- 浏览: 96575 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
lin__nil:
...
eclipse-indigo 中 user libraries 自动部署 WEB-INF/lib 配置 -
biduone:
有用的
解决Myeclipse中编辑JS卡的问题 -
xy2401:
这样虽然更简单了,但是,不能说是自动部署,不过比起我去自己复制 ...
eclipse-indigo 中 user libraries 自动部署 WEB-INF/lib 配置
Java Web层框架比较—— 比较JSF、Spring MVC、Stripes、Struts 2、Tapestry和Wicket
- 博客分类:
- Accumulation
【译者按】这是Matt Raible在今年6月24-27号召开的JA-SIG夏季会议上所作的主题演讲,Matt从众多方面对Java Web层框架做了一个全面、深入的比较。笔者认为这是一份及时的文档,它对开发者如何判定一个Web层框架的好坏、如何选择适合自己项目的框架有极大的指导作用。本文是对Matt Raible演讲稿的整理归纳。
【作者介绍】Matt Raible,开源框架AppFuse的发起者、主要开发者;《Professional JSP 2.0》、《Spring Live》等书的作者;众多会议的演讲者,MySQL User Conference, ApacheCon, ApacheCon EU等;现任Raible Designs的CEO。
首先,Matt以自己的实践经验,指出了Java Web层框架——JSF、Spring MVC、Stripes、Struts 2、Tapestry和Wicket他们各自的优、缺点:
JSF
优点:
Java EE标准,这意味着有很大的市场需求和更多的工作机会
上手快速并且相对容易
有大量可用的组件库
缺点:
大量的JSP标签
对REST和安全支持不好
没有一个统一的实现。既有SUN的实现,又有Apache的实现——MyFaces。
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的<fmt:message>标签使国际化变得简单;如何将国际化信息放到控制器类中,还没有一个统一的标准。
Stripes、Spring MVC和JSF:每个地区使用一个资源绑定文件
Struts 2、Tapestry和Wicket:提倡把每个页面/action用到的资源文件分开
JSF:需要在每个页面上定义资源绑定信息
Tapestry:<span key="key.name">标签比较可怕
页面修饰
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:还是未知数
通过以上的比较,我想大家对在自己的项目中应该选择哪种Web层框架,应该有了更清醒的认识。
最后,Matt列出了一些相关资源,也供读者参考。
Struts -http://struts.apache.org
StrutsTestCase:http://strutstestcase.sf.net
Spring MVC -http://www.springframework.org
Spring IDE:http://www.springide.org
Gaijin Studio:http://gaijin-studio.sf.net
Struts 2 -http://opensymphony.org/webwork
Eclipse Plugin:http://sf.net/projects/eclipsework
IDEA Plugin:http://wiki.opensymphony.com/display/WW/IDEA+Plugin
Tapestry -http://tapestry.apache.org
http://spindle.sourceforge.net
JSF -http://java.sun.com/j2ee/javaserverfacesandhttp://myfaces.apache.org
Java Studio Creator:http://sun.com/software/products/jscreator
MyEclipse:http://myeclipseide.com
IDEA:http://www.jetbrains.com/idea
SiteMesh:http://opensymphony.com/sitemesh
Testing Frameworks
JUnit:http://junit.org
EasyMock:http://easymock.org
jMock:http://jmock.org
jWebUnit:http://jwebunit.sourceforge.net
Canoo WebTest:http://webtest.canoo.com
Tapestry Test Assist:http://howardlewisship.com/blog/2004/05/tapestry-test-assist.html
AppFuse -http://appfuse.org
演讲的最后,Matt以一句“If it works, use it!”作为结尾,可谓精辟!
通过此文,相信大家可以拨开当前Java Web层框架选用上的“迷雾”,见得“月明”了。
原演讲稿请参见:http://raibledesigns.com/rd/entry/ja_sig_comparing_java_web。
4年前的一篇文章,写的很好,对于现在最新的JSF2.1(2011-03-14)来说,AJAX早就内置了。不过我还是从中认识到了很多的东西。
例如,我现在还是在用SUN的JSF(Mojarra)实现开发,很是不方便,并且Myeclipse竟然不支持最新的JSF,更让我无语。所以我想换成Apache的MyFace了。努力学习,介绍说JSF的导航和Struts2的差不多,我还担心JSF的导航不好呢,呵呵。不过不知道有没有遵循“约定重于配置”的理念,以及通配符的处理。
还是要多说几句,现在JSF2.1的资料很少,JSF的功能我只尝到了定制组件(UI)这一项,用的还是PrimeryFaces的类库,有一个小组织的名称是SmartFaces的组件做的很漂亮,但是使用至今还是没有摸到门路,只是丑丑的显示出来。
刚刚发布文章失败,还好回来了!!我CA!!!
发表评论
-
emacs auto-complete 无效
2015-03-26 20:50 938emacs使用ac插件很平常,有时发现ac不可用,可能原因为 ... -
cscope 使用 -q 选项 搜索速度提升 100%
2013-10-09 22:07 820cscope的功能不再赘述,在这里cscope.source ... -
xubuntu 13.04 xsessionrc
2013-09-29 23:09 963因为使用 emacs ,所以必须改建, 使用 xmodmap ... -
amix vim config
2013-08-25 00:19 14""""" ... -
VIM配置
2013-08-23 21:23 17" set compatible 兼容性 se ... -
el-get-self-update 无法使用 bug 修复
2013-03-27 15:56 1107el-get-bug Table of Conte ... -
Emacs中实现vim式简单查找
2013-03-27 15:52 1267Emacs中实现vim式简单查 ... -
emacs 使用 template
2012-10-21 19:05 1755折腾了一下午,总算搞好了。 首先是折腾 yasnippet, ... -
perl 实现查找内置 package
2012-10-19 10:33 1036其实这个功能 perldoc 与 cpan 都有,只不过学习p ... -
emacs 使用 auto-complete clang 实现 c++ 代码补全
2012-10-10 22:52 9475自从将 <CTRL> 与 <CAPS> ... -
eclipse link方式安装plugins时path问题
2012-05-02 19:34 1201在eclipse、myeclipse中安装插件时,现 ... -
eclipse-indigo 中 user libraries 自动部署 WEB-INF/lib 配置
2012-04-06 15:13 5553小清新的责任感上来了,果断放弃了一直使用的myec ... -
plsql 中文乱码解决
2012-03-28 12:11 1169一直没有找到好的解决办法,只能通过设置系统的环境变量来解决,个 ... -
jquery 淡进淡出的 BLINK 效果
2012-03-11 15:17 1262其实就是一段简单的代码了,但好长时间没自己写东西了,搬上来摆摆 ... -
应用SpringMVC时 JS等文件找不到错误
2012-03-07 21:48 1174方法一: 在web.xml中添加 <se ... -
Java中自带Observer模式运用
2012-02-22 15:16 1426使用Java中自带的Observer模式时,需要用到一下两个类 ... -
Struts2 中使用就静态方法,不会报错
2012-02-20 16:47 808在页面中使用 Struts 的静态方法调用时,如果 ... -
MyEclipse / Eclipse快捷键的导出和导入
2011-11-13 16:52 4449Eclipse 中为我们定义了许多方便的快捷键 ... -
Java实现可泛型的Heap
2011-10-18 12:51 1714可泛型的Heap,方便使用。 Heap接口: pub ... -
解决Myeclipse中编辑JS卡的问题
2011-07-28 11:41 6940貌似编辑jsp时, 按下ctrl键会导致其联网去查tag提 ...
相关推荐
Java Web层框架之比较—比较JSF、Spring MVC、Stripes、Struts 2、Tapestry和Wicket.doc
此软件介绍webwork and struts and jsf的区别
JSF将是J2EE5.0中所包含的web开发框架,这应该是第一个成为jcp标准,并且随j2eesdk一起发布的web框架,可以看出sun对它的期望很高。JSF最大的竞争对手是tapestry,是apache的产品,但是apache又弄出了个myfaces,是...
JavaServer Faces作为一种新兴的Web表现层框架,正在受到越来越多的关注。本文描述了JSF的几大优势,以及这些优势所带来的Web开发的重大变革,从而试图 说明JSF将会在众多竞争者中脱颖而出,成为Web表现层框架的主流...
【第十章】集成其它Web框架 之 10.3 集成Struts2.x ——跟我学spring3 【第十章】集成其它Web框架 之 10.4 集成JSF ——跟我学spring3 【第十一章】 SSH集成开发积分商城 之 11.1 概述 ——跟我学spring3 【第十一章...
word文档。 <br>这里我们要将 Tapestry 与其它主要的 Java Web 框架做一番比较,包括 Struts,JSF。 ……
JSF是一种用于构建Java Web 应用程序的标准框架(是Java Community Process 规定的JSR-127标准)。JSF(Java Server Faces)技术为开发基于网络用户界面的Java开发者提供了标准的编程接口API以及标签库。就像Struts框架...
本文档是《Java Web开发教程——入门与提高篇(JSP+Servlet)》一书的附赠电子资料,对Struts2、JSF、Hibernate、iBATIS和JPA等框架进行了简单介绍,并且给出了两个自定义简单框架,还包括3个实例,共149页。
经典JAVA EE企业应用实战基于WEBLOGIC JBOSS的JSF+EJB 3+JPA整合开发——源码.part1 其他部分详见我的上传列表,全部分卷下载完成才能解压。 本书介绍了Java EE规范的三大主要规范JSF、EJB 3和JPA,其中JSF是Sun...
Java 的 Web框架虽然各不相同,但基本也都是遵循特定的路数的:使用Servlet或者Filter拦截请求,使用MVC的思想设计架构,使用约定,XML或 Annotation实现配置,运用Java面向对象的特点,面向抽象实现请求和响应的...
基于J2EE下的JSF与Struts框架比较分析
Spring为展现层提供了一个优秀的Web框架——Spring MVC。和众多其它Web框架一样,它基于MVC设计理念,此外,由于它采用了松散耦合可插拔组件结构,具有比其它MVC框架更多的扩展性和灵活性。 Spring MVC框架围绕...
Struts+Spring+Hibernate+Jsf
本系统采用的关键技术是Struts2+...Spring是以MVC模式为基础,依赖注入为核心的Java应用框架,它利用Java的反射机制,将系统各层无缝的整合在一起,实现了系统各模块和各层次的解藕,提高了系统的可维护性和可移植性。
在JAVA EE中作为MVC的优秀框架有很多,例如:常见的有:Struts、WebWork、Tapestry、JSF等,在这些优秀的框架之中,个人比较习惯使的还是:Struts和WebWork,对于JSF使的不多,虽然SUN公司主推JSF,但观察其身边的搞...
这个jar文件包含Web应用开发时,用到Spring框架时所需的核心类, 包括自动载入WebApplicationContext特性的类、Struts与JSF集成类、文件上传的支持类、Filter类和大量工具辅助类。 spring的核心类,提供了核心HTTP...
以Java EE主流框架整合应用及项目开发为主线,通过Java Web开发中最常见的19个典型模块和5个完整的项目案例,详细介绍了Struts 2.x、Spring、Guice、Hibernate、iBATIS、JPA、JSF和AJAX等热门开源技术及JSP +Java ...
第10章 Struts 2的标签库,第11章 Struts 2的Ajax支持,第12章 使用FreeMarker充当表现层,第13章 整合Spring,第14章 整合JSF,第15章 整合SiteMesh,第16章 整合JasperReports,第17章 整合JFreeChart,第18章 ...
各种主流JAVA框架的比较,包括JSF,Struts,EJB,Hibernate,jpa,spring
目前,基于Web的MVC框架非常多,发展也很快,每隔一段时间就有一个新的MVC框架发布,例如像JSF、Tapestry和Spring MVC等。除了这些有名的MVC框架外,还有一些边缘团队的MVC框架也很有借鉴意义。 对于企业实际使用...