什么是Tapestry? Tapestry框架是一个位于java servlet容器和Tapestry应用程序之间的层。Tapestry不是一个独立运行的服务器;它是一个servlet的扩展,它运行于servlet容器(例如Tomcat)或包含servlet容器的应用服务器中(如Jbose,Websphere,或者WebLogic). Tapestry应用其实是由一系列页面组成,而每个页面是由可以复用的组件构成。
Tapestry在整个环境中的位置;应用程序由可复用组件构成的页组成。应用程序运行在应用服务器中。对应用服务器而言,Tapestry应用只不过是其他类型的servlet而已。
Web应用通常按照三个层面来实现,每一个层面都针对应用中不同的问题。
展现层的职责是负责接受请求和产生HTML的响应;
应用层的职责是负责所有的业务逻辑;这一层通常用EJB来实现;
数据库层的职责是负责持久地存储数据;
Tapestry仅仅是展现层的应用,或者说Tapestry仅仅是将处理好的信息展现给终端用户,如HTML,以及处理来自链接和HTML表单输入。Tapestry不知道或者不关心应用层、域逻辑层、或者信息的来源。一个Tapagestry应用程序可以建立在平面文件数据库、可使用JDBC存取的关系数据库以及分布在世界上各个网络上的EJB之上。Tapestry对你的应用没有任何要求,它只是关注展现层是如何组织的。
Tapestry框架填充了web应用开发中隐藏的缝隙:它提供了一个与开发人员相关的一致的框架。通常,每个开发人员自行管理他或者她开发的部分取忽略了其他的工程纪律从而使得项目承担更大的风险。假如将建造一个大楼的工作分解成建造不同楼层并安排给工人们设计和建造单独楼层,最后将它们用吊机装配起来。每一个工人都给了一个完成后建筑的粗略的草图并告诉他们那一层该做什么:“我们将把可以财务部门安排在这里”,或者“这儿将是公司的自助餐厅。”。你能预测到会出现什么样的灾难性的问题;每一个工人将使用不同的材料和不同的布局。电梯轴不能垂直,一些工人忘了给电线和管道预留空间,更有甚者,忘记了安装窗户!!
可是,许多Web应用应用的开发仍然和上面描述的相似的混乱情况下被开发着。说明不完整;不同的开发人员以不同的方法处理类似的问题。一些开发人员不注意项目中的重要细节或者web开发中比较次要的细节。由于技术的不同,一些开发人员擅长些客户端的Javascript,其他的则擅长于后台系统的交互开发-但是项目管理者常常认为这些人是完全可以互换的。最常见的是,项目的成功或失败担子在最后完全落在“全垒打团队“的肩膀上,他们不得不在剩余的时间里将所有的代码片断粘在一起。
继续以前边的比方为例。不管怎样,工人都是从管道和布线已经完成的空楼层开始工作。所有的事情都变成安装仅仅用于该层的固件的工作,项目的最后这些东西将会被正确的组装起来。把楼层看作页面,把固件看作组件,把安装看作配置,你就能理解了Tapestry给开发人员提供的东西了。
Tapestry在解决开发问题上不是一个万能药;然而,它提供了一个描述Web应用项目实现和由不同开发人员提供的元素之间交互的一致的方法。Web应用程序没有电梯轴线,但它们可以有,如统一的导航条,或嵌入的查询表格,或统一的登陆按钮。这些元素都能实现成Tapestry组件,单独地测试,并在每一个页面上重用,这样就能保证一致的外观和一致的交互行为。