个人信息
huamengxing
文章分类
访客
新浪博客推荐文章
内容
  •  
    2007-01-11 09:56:35
    抽象一下表现层框架应有的技术架构,下图可以说所有表现层框架技术都必须实现的功能架构图:

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

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

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

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

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

      Struts Tapestry3.0 JSF
    在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联盟的一贯策略。


数据加载中...