`
shirlly
  • 浏览: 1624486 次
  • 性别: Icon_minigender_2
  • 来自: 福州
社区版块
存档分类
最新评论

表现层框架Struts/Tapestry/JSF架构比较

阅读更多
板桥里人 http://www.jdon.com 2005/09/12


  Struts/Tapestry/JSF是目前J2EE表现层新老组合的框架技术。从诞生时间上看,Struts应该比较早,使用得非常广泛,Tapestry 3.0逐渐引起广泛的重视,正当Tapestry即将大显身手时期,SUN推出JSF标准技术,虽然JSF一开始推出尚不成熟,留出了一段空白期,但是随着JSF1.1标准推出,JSF开始正面出击,粉面隆重登场了。

  其实,JSF和Tapestry也并不是那种头碰头的相同竞争性技术,两者还是各有侧重点的,不过比较细微,但是这种细微点在实现一个大工程时可能带来不同的感受和变化。

  首先,我们从一个高度来抽象一下表现层框架应有的技术架构,下图可以说所有表现层框架技术都必须实现的功能架构图:

  当然,我们不必废话罗嗦MVC模式,MVC模式是基准模式,现在框架技术已经不必再拼是否是MVC模式了。 在上图MVC模式基础上,一个表现层框架无外乎要实现图中的三个功能:

1.在当前页面能够显示一个组件对象的内容;而不是象纯JSP那样,需要在Jsp页面写入“调用对象方法”的Java代码。

2.当用户按下页面的提交按扭或链接后,事件发生,这时应该触发服务器端并将当前页面的参数提交给服务器。这种机制表现在Form表单提交和有参数的链接<a href=""></a>

3.从一个页面视图直接跳转到另外一个页面视图,单纯的导航作用。

我们通过下表来比较这 三种框架在实现上图各个功能时技术细节,从而得出他们的异同点和偏重点。
在View显示的组件要求:
  1)Struts                            
    组件必须继承ActionForm分显式调用和隐式调用
  2)Tapestry3.0
    组件必须继承BaseComponent 普通POJO
  3)JSF
    无需继承Managed Bean
组件在View显示粒度
  1)Struts
    View页面只能显示与表单对应的ActionForm,配置中Action ActionForm 页面一般只能1:1:1关系。
  2)Tapestry3.0
  可将组件嵌入页面任何一行,对使用组件数量无限制。
  3)JSF
  同Tapestry
页面分区tiles
  1)Struts
  使用Tiles标签库实现,需要另外tiles-def.xml配置文件
  2)Tapestry3.0
   组件有自己的视图页面,通过调用组件即直接实现多个页面组合。强大自然的页面组合是其特点。
  3)JSF
   通过组件+标签库实现Subview,但如需重用Layout,还要结合Tiles.

页面跳转
   1)Struts
   使用标签库html:link中写明目标URL,URL名称需要对照配置文件的path命名,与组件Action耦合。
   2)Tapestry3.0
   URL名称是目标的组件名称,不涉及URL和路径等操作,方便稳固。
   3)JSF
   类似Struts,也需要在配置文件中查找,与组件分离。
参数传递
   1)Struts
   使用html:link时传递参数超过一个以上处理麻烦。
   2)Tapestry3.0
   直接调用组件,直接赋予参数,没有参数个数限制
   3)JSF
   参数分离传递给组件
事件触发
   1)Struts
   通过表单提交submit激活,不能细化到表单里字段。
   2)Tapestry3.0
   能够给于表单每个字段贴一个事件,事件组件必须实现PageListener接口
   3)JSF
   同Tapestry,事件组件必须实习ActionListener 接口

Struts组件编程模型

  Struts实现组件编程时有一些复杂:经常为一个页面中需要引入多个组件而头疼,因为Struts中无法直接引入多个组件,必须绕一些圈子:

  一般分两种情况:如果同一个Action就可以对付这些组件,那么在这种情况下有两个办法:

1.将这多个组件装入一个ActionForm中,如使用MapForm等机制;

2.手工将多个组件装入request/session等scope中,然后根据其名称在jsp中获得。

  这两个方法都有缺点: 第一种办法经常一个ActionForm弄得面目全非,变成一个大杂烩,违反了OO分派封装的原则;第2种办法其实又回到jsp编程;

  第二种情况,如果这些组件必须有预先由不同的Action来处理,每个组件必须经过Action -->ActionForm流程,在这种情况下有两种办法:

1.使用Tiles, 不同流程输出到同一个页面的不同区域。是一种并行处理方式。

2. 对多个流程首尾相连,第一Action forward结果是第二个Action,最后输出一个Jsp,在这个jsp中就可以使用前面多个流程的多个ActionForm了,这属于串行方式。

Struts组件模型缺点

  Struts组件编程必须限定在Action/ActionForm/JSP这三个框框中做文章,难度相对比较大,而Tapestry/JSF则没有太多这些技术框框限制,两者在组件编程方面更让编程者自由一些,方便一些,这也是组件型框架的优势吧。

Struts标签库

  在Struts中,经常需要使用标签库来显示组件ActionForm中内容,这就涉及到一个结合的问题,标签库是别人写的,参考Struts的标签库用法,而组件是自己的,难度和麻烦就体现在这个结合点上。

  JSF基本思路和Struts差不多,只不过换了不同标签库,也需要标签库+组件的结合思考,不过因为组件这里是通用组件,没有什么限制,所以这样比Struts要轻松一些。

  Tapestry使用了组件库概念替代了标签库,没有标签库概念,这样就没有标签库和自己的组件需要结合的问题,都是组件的使用,组件中分Tapestry标准组件和自己定义的组件,这也是接触了Jsp体系的人学习Tapestry面临的一个思路转换。

  具体以页面跳转为例子,页面跳转是靠链接<a href="目标"></a> 实现,链接是页面经常使用的元素。

  Struts提供的html:link在频繁使用就特别不方便,尤其在传递多个参数时:其中html:link的page值,是跳转对方页面或Action的path,这个path一般需要到struts-config.xml查找Action的相应path,一旦配置文件path值修改,涉及到这个所有相关页面都要修改。

  JSF将链接概念划分两个方面:导航性质和事件激活,在导航方面还是需要到配置faces-config查询Navigation的from-outcome的值。

  由于Tapestry没有标签库概念,只有组件或页面两个概念,因此,链接跳转目标要么是组件,要么是页面,简洁简单,它没有多余的path概念,就是组件名,也就是对象名称,组件名称和path名称合二为一。

总结

  JSF在很大程度上类似Struts,而不是类似Tapestry,可以说是一种Struts 2.0,都是采取标签库+组件的形式,只是JSF的组件概念没有象Struts那样必须继承ActionForm的限制;JSF在事件粒度上要细腻,不象Struts那样,一个表单一个事件,JSF可以细化到表单中的每个字段上。

  JSF只有在组件和事件机制这个概念上类似Tapestry,但是不似Tapestry那样是一个完全组件的框架,所以,如果你做一个对页面要求灵活度相当高的系统,选用Tapestry是第一考虑。

  Struts/JSF则适合在一般的数据页面录入的系统中,对于Struts和JSF的选用,我目前个人观点是:如果你是一个新的系统,可以直接从JSF开始;如果你已经使用Struts,不必转换,如果需要切换,可以将JSF和Tapestry一起考虑。

  另外,JSF/Tapestry不只是支持Html,也支持多种客户端语言如WML或XUI等。

  这三者之间关系:如果说Struts是左派;那Tapestry则是右派;而JSF则是中间派,中庸主义是SUN联盟的一贯策略。

  当然,你也可以发表你在实践中这三者任何一个的使用感受,以使得后来者有一个比较。

分享到:
评论

相关推荐

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

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

    Tapestry,JSF和Struts的比较

    word文档。 &lt;br&gt;这里我们要将 Tapestry 与其它主要的 Java Web 框架做一番比较,包括 Struts,JSF。 ……

    JSFとStruts.doc

    Struts和JSF/Tapestry都属于表现层框架,这两种分属不同性质的框架,后者是一种事件驱动型的组件模型,而Struts只是单纯的MVC模式框架,老外总是急吼吼说事件驱动型就比MVC模式框架好,何以见得,我们下面进行详细...

    Struts2教程/在JAVA EE中作为MVC的优秀框架

    在JAVA EE中作为MVC的优秀框架有很多,例如:常见的有:Struts、WebWork、Tapestry、JSF等,在这些优秀的框架之中,个人比较习惯使的还是:Struts和WebWork,对于JSF使的不多,虽然SUN公司主推JSF,但观察其身边的搞...

    tapestry 5.1.0.5 官方组件文档 天涯浪子

    来自:http://tapestry.apache.org/tapestry5.1/tapestry-core/ref

    Manning - Art of Java Web Development - Struts, Tapestry, Commons, Velocity, JUnit, Axis, Cocoon,.rar

    Manning - Art of Java Web Development - Struts, Tapestry, Commons, Velocity, JUnit, Axis, Cocoon,.rar

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

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

    深入浅出Tapestry

    资源名称:深入浅出Tapestry内容简介:本书以循序渐进的方式,从Tapestry框架技术的基本概念入手,讲解Tapestry框架在J2EE Web应用程序中的整体架构实现。使读者在学习如何使用Tapestry框架技术的同时,还能够获得在...

    Tapestry用户登录Demo(源代码+操作视频)

    NULL 博文链接:https://gongstring.iteye.com/blog/288647

    tapestry教程资料文档合集

    Tapestry5最新中文教程.doc 作者 Renat Zubairov & Igor Drobiazko译者 沙晓兰 发布于 2008年7月2日 下午9时30分 社区 Java 主题 Web框架 ----------------------------------------- Tapestry5.1实例教程.pdf ...

    Struts2+Hibernate+Spring框架电子商城

    这里我们采用struts来UI层,虽然比起Tapestry以及JSF这些事件驱动的表现层技术而言,Struts的设计显得有些老土,但它目前仍是表现层事实上的标准,在这一层还采用JSTL标签库,使它具有可移植性、可跨平台。...

    Tapestry开源框架的详细讲解doc文档(经典)

    Tapestry开源框架的doc文档详细讲解了与当前最流行的web开源框架struts进行了全方位的比较,Tapestry是一个基于控件的框架以致于用它开发Web应用类似开发传统的GUI应用。你用Tapestry开发Web应用时你无需关注以操作为...

    web开发框架——JSF开发实战一(图)

    JSF将是J2EE5.0中所包含的web开发框架,这应该是第一个成为jcp标准,并且随j2eesdk一起发布的web框架,可以看出sun对它的期望很高。JSF最大的竞争对手是tapestry,是apache的产品,但是apache又弄出了个myfaces,是...

    JSF2.0快速入门的基本教程.ppt

    JSF将是J2EE5.0中所包含的web开发框架,这应该是第一个成为jcp标准,并且随j2eesdk一起发布的web框架,可以看出sun对它的期望很高。JSF最大的竞争对手是tapestry,是apache的产品,但是apache又弄出了个myfaces,是...

    struts 入门ppt

    从目前的技术层面上看,出现了许多与Struts1竞争的视图层框架,比如JSF、Tapestry和 Spring MVC等。 这些框架由于出现的年代比较近,应用了最新的设计理念,同时也从Struts1种吸取了经验,克服了很多不足。 这些框架...

    深入浅出tapestry

    本书以循序渐进的方式,从Tapestry框架技术的基本概念入手,讲解Tapestry框架在J2EE Web..., 本书适合Web框架技术的爱好者、Tapestry入门学习者、Tapestry表现层开发人员和关注下一代的Web开发技术的公司与个人用户。

    Tapestry通用WEB框架

    Tapestry通用WEB框架支持,切换皮肤,自主分页,

    比jsf更成熟的框架tapestry

    比级jsp更优越,做到了组件的灵活应用,应该对项目开发的应用更有帮助

    java初学者的比较好的学习路线(转)

    第一阶段: 您将学习 JAVA 编程的基础部分,即 J2SE 部分,共分 2 门课程 第二阶段: 您将学习 JAVA WEB 技术,共分 7 门课程 第三阶段: 您将学习 J2EE 技术 ...流行Web框架简介 Struts / WebWork / Tapestry

    tapestry5.3.2教程文档

    tapestry5.3.2发版了,最近有点时间,编写了一个名为TapestryStart教程,总共48篇。内容:从开发环境安装到tapestry各大技术点讲解。带全部可运行的案例源码。下载网址:http://flywind.org/tapestry,有问题可加入...

Global site tag (gtag.js) - Google Analytics