Struts,Tapestry,JSF三种MVC架构比较

抽象一下表现层框架应有的技术架构,下图可以说所有表现层框架技术都必须实现的功能架构图:

  在上图MVC模式基础上,一个表现层框架无外乎要实现图中的三个功能:

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

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

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

我们通过下表来比较这 三种框架在实现上图各个功能时技术细节,从而得出他们的异同点和偏重点。

 StrutsTapestry3.0JSF
在View显示的组件要求

组件必须继承ActionForm

分显式调用和隐式调用
组件必须继承BaseComponent
普通POJO
无需继承
Managed Bean
组件在View显示粒度View页面只能显示与表单对应的ActionForm,配置中Action ActionForm 页面一般只能1:1:1关系。可将组件嵌入页面任何一行,对使用组件数量无限制。同Tapestry
页面分区tiles使用Tiles标签库实现,需要另外tiles-def.xml配置文件组件有自己的视图页面,通过调用组件即直接实现多个页面组合。强大自然的页面组合是其特点。通过组件+标签库实现Subview,但如需重用Layout,还要结合Tiles.
页面跳转使用标签库html:link中写明目标URL,URL名称需要对照配置文件的path命名,与组件Action耦合。URL名称是目标的组件名称,不涉及URL和路径等操作,方便稳固。类似Struts,也需要在配置文件中查找,与组件分离。
参数传递使用html:link时传递参数超过一个以上处理麻烦。直接调用组件,直接赋予参数,没有参数个数限制参数分离传递给组件
事件触发通过表单提交submit激活,不能细化到表单里字段。能够给于表单每个字段贴一个事件,事件组件必须实现PageListener接口同Tapestry,事件组件必须实习ActionListener 接口

选择tapestry有如下几大优点:
1、最彻底的MVC开发框架,页面代码全部由HTML标准标签组成,页面美工人员无须了解特别的标签定义。
2、可重用组件开发节省开发资源,一句话:越开发越轻松
3、优秀的页面流转开发。传统方式都是基于URL实现激活页面流转,而tapstry除了此方式,你还可象开发普通java类一样实现page页面流,更
重要的是,还可由此实现页面类的复用。
4、丰富的组件资源。除了官方维护的资源外,还可找到一大堆的tapestry组件库。
5、超强的扩展性。tapestry是一个真正的开放性架构,说白了,你觉得哪个服务不爽,你就可写个替代它。
6、生命力超强,不断的自我更新、发展。tapestry4.0与3.0相比简直就是另一个飞跃,如支持jdk1.5的Annotations,仅这点开源产品中目前
还只看到一个hibernate;支持portlet JSR-168,又一个顺应潮流的web开发支持。规划中的4.1将支持页面静态化,这不正是众多开发人员的
另个期待吗?
7、tapestry的开发人员稳定。不是一个两个人在那里单打独斗,而是有一群人在开发和支持tapestry的进程。
8、tapestry技术成熟吗?基于tapestry的软件和大网站已经很多了,
国外的:软件如SeaView内容管理系统、WidenTM Digital Asset Management System
网站大的如: http://www.nhl.com/http://www.theserverside.com/https://merchant.shopping.com/enroll/apphttp://www.identitytheft911.com/home.htmhttp://admissions.chicagogsb.edu/admissions/app
国内的:软件如 http://www.onetsoft.com ,网站如: http://love.9618.com.cn/dating/apphttp://dbi.lib.ntu.edu.tw/libraryList/http://www.cdcin.com/http://www.xtcin.com/http://www.xnjs.com/

Struts组件模型缺点

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

三者概述

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值