`
gaoyu
  • 浏览: 274597 次
  • 来自: 云南大理
社区版块
存档分类
最新评论

Struts/Tapestry/JSF互比

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

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

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


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

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

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

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

我们通过下表来比较这 三种框架在实现上图各个功能时技术细节,从而得出他们的异同点和偏重点。[/size]
               (图二)
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面临的一个思路转换。

  具体以页面跳转为例子,页面跳转是靠链接 实现,链接是页面经常使用的元素。

  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联盟的一贯策略。

  当然,你也可以发表你在实践中这三者任何一个的使用感受,以使得后来者有一个比较。
  • 大小: 18.3 KB
  • 大小: 20 KB
分享到:
评论

相关推荐

    Tapestry,JSF和Struts的比较

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

    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的一部分,拥有广泛的支持和市场需求。它的优点在于快速上手和丰富...

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

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

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

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

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

    JSF最大的竞争对手是tapestry,是apache的产品,但是apache又弄出了个myfaces,是对jsf标准的一个实现。也许你也和我一样,在jsf和tapestry之间犹豫很久,将来从apache的态度上应该可以看出二者的走向。在tss上有一...

    Tapestry开发

    | Struts | 广泛流行,有很多信息和示例;HTML标签库是一个非常好的东西。 | ActionForms非常恶心;不能够做单元测试;大量的邮件列表令人无法忍受。 | | SpringMVC| 生命周期由重写绑定、验证等确定;能够无缝隙地...

    关于Tapestry的一些个人总结

    目前主流的Web框架还包括Spring MVC、Struts、JSF等。相比于这些框架,Tapestry有以下几点优势: 1. **更简单的编程模型**:Tapestry采用组件化的编程模型,开发者只需要关注组件级别的逻辑,而不必担心底层的HTTP...

    Struts2教程(完整)

    - **事件驱动框架**:如JSF(JavaServer Faces)、Tapestry等。 - **Struts2的历史背景**: - **Struts1的兴起**:2001年5月发布的Struts1因其优秀的开源特性迅速获得了开发者们的青睐,成为了当时最流行的MVC...

    JSF核心编程学习指南

    JSF与Struts或WebWork等框架相比,处于不同的发展阶段,它们的设计哲学和目标市场有所不同,因此直接比较并不合适。 JSF采用依赖注入(DI)机制,这是一种解耦合的有效方法,这在很大程度上受到了Spring框架的影响...

    struts2课堂笔录_0906

    根据提供的文件信息,我们可以深入探讨Struts2框架及其在MVC架构中的应用,以及与其它MVC框架(如JSF、Tapestry和Spring MVC)的对比分析。 ### Struts2框架简介 #### 1. MVC架构概览 Struts2是基于MVC(Model-...

    Tapestry资料集合

    "JSF与Tapestry和Struts框架比较.pdf"可能会对比分析Tapestry与其他流行的Java web框架,如JavaServer Faces (JSF) 和Struts。这种比较通常会涉及框架的易用性、性能、灵活性、可维护性等方面,帮助读者理解Tapestry...

    struts2文档

    在Struts2出现的同时,市场上也出现了其他MVC框架,如JSF(JavaServer Faces)、Tapestry和Spring MVC。每个框架都有其独特的设计理念和适用场景: - **JSF**是由Sun Microsystems(现已被Oracle收购)开发的官方...

    javaServer Faces 技术架构与应用.pdf

    ### JavaServer Faces (JSF) 技术架构与应用 #### 一、JavaServer Faces (JSF) 简介 JavaServer Faces (简称 JSF) 是一种基于Java的Web应用开发框架,专为构建用户界面(UI)而设计。它提供了一套标准化的方法来...

    struts2权威指南

    Struts 2 是一个强大的基于模型-视图-控制器(MVC)架构的Java Web框架,它旨在简化创建企业级的...随着技术的不断发展,Struts 2也面临着JSF、Tapestry、Spring MVC等竞争对手的挑战,但其在MVC领域的影响力不容忽视。

    struts2 权威指南

    除了Struts2之外,还有许多其他的MVC框架,如JSF、Tapestry、Spring MVC等。这些框架各有特点,但Struts2以其丰富的插件生态系统、强大的表单处理能力以及良好的社区支持脱颖而出。 #### 三、MVC模式解析 ##### ...

    struts2权威指南pdf

    - **与Tapestry的对比**:Tapestry也是一个基于组件的Web框架,但在灵活性和易用性方面,Struts2更胜一筹。 #### 五、Struts2的高级特性 - **国际化支持**:Struts2提供了强大的国际化支持,使得开发出的应用程序...

    ejb3-struts-tutorial.pdf

    虽然本教程以Struts为例,但所涉及的技术和方法同样适用于其他流行的Web框架,比如Spring MVC、Tapestry或JSF等。 #### 二、预备知识 为了更好地理解本教程的内容,读者需要具备一定的基础知识: - **EJB3基础**:...

Global site tag (gtag.js) - Google Analytics