更新时间:2022-03-10 00:17
Tapestry并不是一种单纯的MVC框架,它更像MVC框架和模板技术的结合,它不仅包含了前端的MVC框架,还包含了一种视图层的模板技术,使用Tapestry完全可以与Servlet/JSP API分离,是一种非常优秀的设计。 通过使用Tapestry,开发者完全不需要使用JSP技术,用户只需要使用Tapestry提供的模板技术即可,Tapestry实现了视图逻辑和业务逻辑的彻底分离。
Tapestry框架是一个位于java servlet容器和Tapestry应用程序之间的层。Tapestry不是一个独立运行的服务器;它是一个servlet的扩展,它运行于servlet容器(例如Tomcat)或包含servlet容器的应用服务器中(如Jboss,Websphere,或者WebLogic). Tapestry应用其实是由一系列页面组成,而每个页面是由可以复用的组件构成。
Tapestry是一种基于java的Web应用程序框架。Tapestry采用了组件的概念。程序员可以应用现有的组件或自定义应用程序相关的组件来构建应用程序。相对与现有的其他Web应用程序框架而言,应用Tapestry会让程序员从烦琐的,不必要的底层代码中解放出来。
Tapestry使用组件库替代了标签库,没有标签库概念,从而避免了标签库和组件结合的问题。Tapestry是完全组件化的框架。Tapestry只有组件或页面两个概念,因此,链接跳转目标要么是组件,要么是页面,没有多余的path概念。组件名,也就是对象名称,组件名称和path名称合二为一。
Tapestry在整个环境中的位置;应用程序由可复用组件构成的页组成。应用程序运行在应用服务器中。对应用服务器而言,Tapestry应用只不过是其他类型的servlet而已。
Web应用通常按照三个层面来实现,每一个层面都针对应用中不同的问题。
Φ 展现层的职责是负责接受请求和产生HTML的响应;
Φ 应用层的职责是负责所有的业务逻辑;这一层通常用EJB来实现;
Φ 数据库层的职责是负责持久地存储数据;
Tapestry仅仅是展现层的应用,或者说Tapestry仅仅是将处理好的信息展现给终端用户,如HTML,以及处理来自链接和HTML表单输入。Tapestry不知道或者不关心应用层、域逻辑层、或者信息的来源。一个Tapestry应用程序可以建立在平面文件数据库、可使用JDBC存取的关系数据库以及分布在世界上各个网络上的EJB之上。Tapestry对你的应用没有任何要求,它只是关注展现层是如何组织的。
Tapestry框架填充了web应用开发中隐藏的缝隙:它提供了一个与开发人员相关的一致的框架。通常,每个开发人员自行管理他或者她开发的部分取忽略了其他的工程纪律从而使得项目承担更大的风险。假如将建造一个大楼的工作分解成建造不同楼层并安排给工人们设计和建造单独楼层,最后将它们用吊机装配起来。每一个工人都给了一个完成后建筑的粗略的草图并告诉他们那一层该做什么:“我们将把财务部门安排在这里”,或者“这儿将是公司的自助餐厅。”。你能预测到会出现什么样的灾难性的问题;每一个工人将使用不同的材料和不同的布局。电梯轴不能垂直,一些工人忘了给电线和管道预留空间,更有甚者,忘记了安装窗户!!
可是,许多Web应用应用的开发仍然和上面描述的相似的混乱情况下被开发着。说明不完整;不同的开发人员以不同的方法处理类似的问题。一些开发人员不注意项目中的重要细节或者web开发中比较次要的细节。由于技术的不同,一些开发人员擅长些客户端的javascript,其他的则擅长于后台系统的交互开发-但是项目管理者常常认为这些人是完全可以互换的。最常见的是,项目的成功或失败担子在最后完全落在“全垒打团队“的肩膀上,他们不得不在剩余的时间里将所有的代码片断粘在一起。
继续以前边的比方为例。不管怎样,工人都是从管道和布线已经完成的空楼层开始工作。所有的事情都变成安装仅仅用于该层的固件的工作,项目的最后这些东西将会被正确的组装起来。把楼层看作页面,把固件看作组件,把安装看作配置,你就能理解了Tapestry给开发人员提供的东西了。
Tapestry在解决开发问题上不是一个万能药;然而,它提供了一个描述Web应用项目实现和由不同开发人员提供的元素之间交互的一致的方法。Web应用程序没有电梯轴线,但它们可以有,如统一的导航条,或嵌入的查询表格,或统一的登陆按钮。这些元素都能实现成Tapestry组件,单独地测试,并在每一个页面上重用,这样就能保证一致的外观和一致的交互行为。
Tapestry具有很高的代码复用性,在Tapestry中,任何对象都可看作可复用的组件。JSP开发者是真正面向对象,而不是URL解析。对于对页面要求灵活度相当高的系统,Tapestry是第一选择。精确地错误报告,可以将错误定位到源程序中的行,取代了JSP中那种编译后的提示。
因此,笔者一直对Tapestry情有独钟:如果技术允许,使用Tapestry会带给整个应用更加优雅的架构,更好的开发效率。
但是,在实际开发过程中,采用Tapestry也面临着一些问题必须考虑:
— Tapestry的学习曲线相对陡峭,国内开发群体不是非常活跃,文档不是十分丰富。官方的文档太过学院派,缺乏实际的示例程序。
— Tapestry的组件逻辑比较复杂,再加上OGNL表达式和属性指定机制,因而难以添加注释。
1、Tapestry是一个全面web application框架,是使用JAVA写的。
2、Tapestry不是一个application server,Tapestry是一个使用在application server中的框架。
3、Tapestry不是一个application,Tapestry是一个用来创建web application的框架。
4、Tapestry不是JSP的一种使用方式,Tapestry和JSP只能够选择一种。
5、Tapestry不是一个脚本环境,Tapestry使用一种组件对象模式(component object model),这并不是一种简单的脚本,而是用于生成高动态性高互交性的web页面。
Tapestry基于Java Servlet API version 2.2,兼容于JDK 1.2以上版本,Tapestry通过变换多样的组件模式,将一个web application分离为一个联合组件。每一个组件都拥有其特殊的责任用于显示web页面或者响应HTML请求。
2008-10-17日
Tapestry 4.1.6
Tapestry 5.0.15 2009-05-06
Tapestry 5.1
Tapestry 5.2 将支持Portal开发及Spring Web Flow
Tapestry 5.3