Tapestry介绍
Tapestry是一个用java编写的基于组件的web应用开发框架。它不仅仅是一个模板系统,更是一个建立在Java Servlet API基础上的动态交互式网站的开发平台。不同于普通的模板系统,它是一个真正使用简单,可重用的组件开发复杂应用的框架。框架自身完成了把许多在创建web应用时容易出错并且极为乏味的工作,诸如分派请求,构造与解析URLs信息,处理国际化和本地化数据等。
Tapestry的“理念”就是“对象,方法,属性”。也就是说,Tapestry使开发者只需将注意力放在对象(包括Tapestry的页面和组件,也包括应用程序的领域对象),方法和JavaBeans属性上。而不是迫使开发者关注像requests, responses, sessions, attributes, parameters, URLs这样的Servlet API。在Tapestry应用程序里,所有用户动作(点击链接和提交表单)的结果是对象的属性被更新和用户方法被触发(包含业务逻辑的用户代码)。Tapestry会管理或添加必要的操作,使用户动作和对应的对象关联起来。
这就表明你不必在Tapestry程序里写servlets,你需要的是写监听方法(listerner methods)。你也不用为servlets构造URLs。通过使用现有的组件(像DirectLink)并为它注册一个监听函数,组件便会触发你的监听函数。那么监听函数又是什么呢?监听函数可以和其它后台系统交互(通常是stateless session EJBs)或做一些处理之后选择一个新的页面用于显示。通常,这些工作是某个servlet的核心代码。在Tapestry里,你不用写那些烦人而又机械化的代码(像构造URLs,分派请求,管理服务器端状态等),这些框架都会提你解决。
这并不是说Servlet API不重要;但是一般情况下Tapestry的使用者不用关心这些。
经过最近几年这段漫长的时间,Tapestry已经升级到4.0版本。虽然有许多对XHTML, WML和其它标示的支持,但是Tapestry关注的重点仍然是生成动态HTML页面。
几乎所有的Tapestry的API都用接口描述,并提供了默认实现。通过使用继承了正确接口的对象来替换默认对象,就可以使Tapestry的行为发生极大的改变。一个常用的例子是重写页面和组件存储位置的逻辑(比如说保存在数据库中)。
Tapestry概述
以组件为中心而不是操作可能是最难理解Tapestry的地方。大多数web技术(像Struts, servlets, PHP等)都是以操作为中心的。你创建一个servlets(或是Actions等你用的技术),当用户点击链接或提交表单时servlets触发。这时,你需要选择一个合适的URL格式,并且定义每一个查询参数的名称和类型,以便你在URL中传递你所需要的信息。
你也需要处理如何通过URL关联到你需要的输出页面(不论是JSPs,Velocity模板,还是其它模板技术)或你期望操作。这就需要你构造合适的URLs并将他们写在<a>标签的href属性里面,或是<form>标签的action属性里。
所有这些在Tapestry都变得简单了。Tapestry应用由页面组成页面由更小的组件构成。组件自身可以由其它组件构成。每个页面有一个唯一的名称,每个包含在页面的组件都有一个唯一的id。通过这样一个组件的组织结构,每一个组件都有了一个可以和URLs配合使用的地址。
在实际操作中(以购物车为例),你不用为一个servlet写一个添加项目到购物车的操作。实际上,你甚至不用写一个添加项目到购物车的组件。你需要做的是使用一个现有的组件(比如DirectLink)和适当的配置。当这个组件显示的时候它将创建一个具有回调功能的URL。当你点击这个链接,这个回调URL(URL中包含了页面的名称和页面中组件的ID)将会触发组件的一个方法,这个方法将会触发你应用中定义的监听方法。
值得注意的是Tapestry的监听函数和C#的delegates非常相似。在这两种情况下,一个特定对象实例的方法是用一个对象的形式体现的。叫它监听者或监听函数会造成命名上的混乱。应该叫它代理或着代理函数,但是因为使用太为广泛一下很难改过来。
可以看出,你需要做的只是编写一个监听函数,而不是整个servlet。Tapestry就会在合适的时间,在合适的条件下触发你的监听方法。你不必考虑怎样去构造URLs,哪些数据需要需要构造进URL,或者是如何关联到你的应用程序代码。框架会为你做好这一切。
页面与组件
Tapestry将应用程序分为一系列页面,每个页面都有一系列组件组成。组件自身又可由一系列其它组件组成,而且对组件的没有递归深度的限制。
Tapestry的页面本身也是一种组件,只不过多了一些特殊的工作。
所有组件都能被其它组件包含。页面和大多数用户定义的组件都有一个模板。模板是一个特定的HTML文件,定义了组件的静态和动态部分,通过标记还可以确定嵌套的组件是否活跃。但是,组件并不必须拥有模板,大多数Tapestry提供的组件通过代码生成他们的HTML标签而不是使用模板。
组件可以拥有一个或多个拥有确定名称的参数。这些参数可以是被包含它的页面或组件使用(或者更确切的讲是绑定)。和Java函数的参数不同的是,组件的参数可以是双向的。一个组件可以在获取数据时读取某个参数,在更新数据时更新参数。
大多数组件只关心如何创建HTML标签。一部分的组件会处理与请求相关的事情;处理传入的请求。比如PageLink、DirectLink和ActionLink等Link类,在显示页面时会在页面创建一个链接标签,在用户点击链接时会处理部分与分派用户请求到指定用户代码的工作。
其它组件,如Form和由Form控制的组件(TextField,PropertySelection,Checkbox等),使HTML的表单使用变得简单。在这些组件显示的时候,他们会读取应用的领域对象的属性来构造默认数据。当表单提交的时候,表单中的组件会读取HTTP的请求参数,并将这些数据转化为合适的类型并更新到领域对象。
引擎,服务和友元
随着时间的推移,Tapestry有了属于它的术语。
引擎是核心对象,在Tapestry程序里它充当的角色就像HttpSession在Servlet API里做的一样。引擎最终会保存到HttpSession里。因此,保存应用程序中需要持久化的状态(需要在不同请求中保存的数据)最终会由引擎负责。本文将主要讨论默认的实现,并会提示一些在扩展或重写引擎时需要注意的事项。
引擎服务是连接servlets,URLs和其他框架逻辑的桥梁。引擎服务负责编码和解码URLs,为框架提供在链接被触发时(当用户点击链接或提交表单)能够唯一确认对应操作的参数。同时,服务也负责分派这些请求。用一个对象封装对URL的编码和解码功能是Tapestry的一个关键技术。这样组件能在不知道它们是如何被使用,包含在哪一个页面的情况下进行复杂的工作(在构造URLs的时候服务将会处理页面的具体位置)。
Visit对象是一个在应用程序中定义的对象,扮演者服务器端状态保存者的关键工作(并不是仅被某一个页面处理的数据)。不同的应用程序可以根据需要定义自己的Visit类。Visit对象会作为引擎的一个属性保存,所以最终会持久化的保存在httpSession中。
Global对象也是一个与应用程序相关的对象。它保存的是一个用于应用全局的数据,而不是对应于某一个特定用户或会话的数据。一个常用的例子是为使用JDNI查找session EJBs的方法提供一个统一的逻辑。
对象图导航语言(Object Graph Navigation Language)
Tapestry和对象图导航语言(OGNL)是紧密联系的。OGNL是一个Java的表达式语言,它能深入一个对象读取或更新他们的数据。OGNL类似与包含在JSP2.0中的表达式语言,但是它具有更强的功能。OGNL不仅支持获取属性,它还能处理数学表达式和方法调用等,访问public class的静态属性,动态创建包括链表和map在类的对象。
最简单的OGNL表达式只包含属性的名称,比如foo对应于使用getFoo()方法(或者对应于表达式用于更新属性时的setFoo()方法)。导航的功能体现在当表达式是一串属性名时,比如foo.bar.baz对应于使用getFoo().getBar().gatBaz()。值得注意的是处于表达式中间的属性(这个例子中的foo和bar)不能为空的。
OGNL主要是用于让不同的对象(比如一个页面和同一个页面中的一个组件)共享数据。
Tapestry的过去和未来
虽然早在2000年就开始做宣传,但是Tapestry还是在社区反馈的推动下不断的进行着改进。在2003年Tapestry获得了很大的成功。在这段时间里Tapestry项目从SourceForge迁移到Jakarta。同时从2.3版升级到了3.0版(3.0版最终是在2004年4月发布)。
Tapestry 3.0的设计在根本上改变了Tapestry应用的创建方式。它提供了一种RAD(快速应用开发)方法。用一种JSP和PHP开发人员熟悉的方式在HTML模板中定义组件的类型和参数。
Tapestry 3.0 还提供了错误行精确定位的支持。当程序在运行时发生错误,HTML模板或定义文件中的相关错误行将会显示出来。更重要的是,3.0版提供了<property>属性并使用字节码生成技术在后台支持。
Tapestry 4.0 比3.0作了更大的修改。使用了建立在HiveMind基础上的一个新的,更成熟的基础设施。这个新的骨干技术为Tapestry日益壮大的社区提供了更多的必要支持。包括友好的URLs(允许使用文件夹,这样就可以使用J2EE的申明式安全机制),整合Tapestry和Java Portlet API,模块化应用程序等。另外,采用了更加成熟的参数连接技术和更灵活的持久化数据保存方式(使用HTTP请求参数保存数据)。对于JDK1.5的用户,更可以使用Java注释技术(annotations)代替XML技术来申明组件和页面。
在很久的将来,Tapestry 5.0将会重新考虑组件对象模型。这样你编写的类就不必从Tapestry的类继承。页面和组件的类将都是POJOs(普通Java对象),Tapestry所需要的依赖关系则会被注入进去。
分享到:
相关推荐
Introducing Tapestry (第1章:Tapestry介绍)** - **Tapestry概述**:本章节首先介绍了Tapestry的基本概念和发展历史,以及它在现代Web开发中的地位和作用。Tapestry是一款基于组件的Java MVC框架,它使得开发者...
【Tapestry4.1.2 入门-介绍】 Tapestry 是一个基于Java的Web应用程序框架,它提供了一种面向组件的开发方式,极大地简化了Web应用的构建过程。在Tapestry中,开发者无需关注HTTP请求的处理细节,如链接、请求流向和...
本文将深入介绍Tapestry 4的相关知识点。 1. **组件化编程**: Tapestry 4的核心理念是组件化。它允许开发者创建独立的、可重用的Web组件,这些组件可以是HTML表单、按钮、表格等。组件有自己的状态、事件处理和...
, 本书详细介绍了Hivemind框架的原理与应用,使读者不但可以通过Hivemind来重构Tapestry的官方实现,还可以使用Hivemind来搭建J2EE Web应用程序的业务层。在本书还提供了一个以Hibernate+Hivemind+Tapestry 4.0为...
通过以上介绍,我们可以看出Tapestry是一个全面的Web开发框架,它提供了一整套工具和机制,帮助开发者构建健壮、可维护的Web应用。在实际项目中,理解并熟练运用这些知识点,将极大地提升开发效率和产品质量。
本书首先会介绍Tapestry 5的基本概念,包括组件模型、事件处理和页面生命周期。组件是Tapestry 5的核心,它们是可重用的、自包含的代码块,可以是简单的HTML元素或者复杂的用户交互逻辑。读者将学习如何创建和定制...
根据提供的信息,《Tapestry In Action》是一本详细介绍Tapestry框架的专业书籍,该书由Howard M. Lewis Ship撰写,并由Manning Publications Co.出版。本书面向那些希望深入理解和掌握Tapestry框架的开发人员。下面...
《深入浅出Tapestry高清版》在介绍内容的安排上,充分考虑到Tapestry对主流Java应用的支持功能,介绍了对Spring、Hibernate、Ajax等技术的融合,使得Tapestry可以用于开发非常热门的Web应用。此外,本书还介绍了作者...
首先,书中会详细介绍Tapestry 4的基本概念,如组件、页面、事件和链接。组件是Tapestry 4的核心,它们是可重用的代码单元,可以是HTML元素、表单控件或复杂的业务逻辑封装。页面是组件的容器,定义了Web应用的结构...
Tapestry 4 Quick Start(2)文档通常会引导读者快速入门,介绍如何搭建一个基本的Tapestry项目,包括环境配置、创建第一个页面、编写组件和处理用户交互等步骤。它可能会涵盖以下知识点: 1. **环境配置**:讲解如何...
这份文档详细介绍了使用Tapestry进行开发的步骤和流程,可能包括项目初始化、创建页面和组件、编写业务逻辑、测试以及部署等阶段。此外,它还可能涵盖了如何利用Tapestry的模块系统来组织代码,以及如何进行持续...
资源名称:深入浅出Tapestry内容简介:本书以循序渐进的方式,从...本书详细介绍了Hivemind框架的原理与应用,使读者不但可以通过Hivemind来重构Tapes 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
1. `index.html` - 插件的主页面,介绍插件信息和安装指南。 2. `SpindleMasthead.jpg` - 插件的图标或者logo,用于UI展示。 3. `site.xml` - 插件站点的配置文件,用于描述插件的元数据,如版本、依赖等。 4. `...
同时,还会介绍如何利用Tapestry的内置Ajax功能创建自定义组件。 开发Tapestry 5 应用前,需要准备以下环境: - JDK 5.0 或更高版本 - Servlet容器,如Apache Tomcat 5.5 或更新版本 - Maven 2.0.8(可选,用于构建...
不过,这个文档应该是对整个框架的全面介绍,包括基础概念、核心机制、最佳实践等。读者可以通过阅读这份文档,深入学习Tapestry4的各个方面,并结合实际项目进行实践,从而成为一名精通Tapestry4的开发专家。
根据提供的信息,我们可以推断出《Tapestry In Action》这本书是关于Java Web开发框架Tapestry的深入介绍与实践指南。接下来,我们将基于书名、描述、标签以及部分展示的内容来提炼出其中的关键知识点。 ### 一、...
本书《Tapestry 5 构建 Web 应用程序》由 Alexander Kolesnikov 编写,为读者提供了关于 Tapestry 5 的全面介绍和深入指导。 #### 二、目标受众 本书主要面向希望学习或提高 Tapestry 5 技能的 Java 开发者。无论...
在提供的链接中(http://blog.csdn.net/princelxz/article/details/29575733),作者详细介绍了如何在Tapestry中实现模块化,包括创建模块类、定义组件和服务、配置页面等步骤。读者可以参考该博客文章以深入理解...