Tapestry入门
简介
jakarta tapestry是一个开源的java web应用框架。你或许会说:"大同小异的东西罢了."多数情况下,我同意你的观点,然而,只要花上些许时间研究一下,你会发现tapestry跟别的框架大为不同,它是值得严肃对待的。
tapestry是一个基于控件的框架以致于用它开发web应用类似开发传统的gui应用。你用tapestry开发web应用时你无需关注以操作为中心的(operation-centric) servlet api.引用tapestry网站上的一句话:"tapestry用对象(objects),方法(methods)属性(properties)替代以往的urls和查询参数, 重新诠释web应用开发。
Tapestry的目标
简单性
tapestry应用与传统的servlet应用相比代码量更少。大多数传统的servlet应用包含如下厌烦和
重复的任务:解析查询参数,处理httpsession对象,构建urls。tapestry消除了传统servelt应用中许多无趣的"衔接"代码("plumbing" code)使开发者把精力集中到应用逻辑上来。
一致性
tapestry为开发web应用的页面提供了一致的方式。这样有助于消除传统servlet应用开发中臆测。由于所有tapestry应用中的页面都是用相同的可复用的控件组织而成,所以工作方式是相似的。
效率
tapestry应用拥有高度的可升级性,它利用缓存和对象池使每个请求的处理时间最小化。tapestry应用拥有跟传统servlet应用相仿的性能。
错误反馈
任何开发过servlet/jsp应用的人毫无质疑有类似经历:为了出l文件有什么错误,不得不花费大量时间察看浏览器中的堆栈信息。tapestry拥有优秀的错误报告方式,最值得一提的是它会指出哪个文件以及那一行导致了错误。
与struts比较
既然apache struts可能是当今应用最广泛的web应用框架,拿tapestry与它比较是唯一公平的。以下是一些观察比较,它们来源于为这篇文章开发的几个简单的tapestry应用和为几个struts工程的工作经历。
struts的优点
1一个servlet/jsp开发者熟悉struts无需太久。然而tapestry的学习曲线会长一点,因为它与流行的web应用框架不太相同 。
2struts在java社区里被广泛接受和使用。为你的项目一个好的struts开发人员并非难事,tapestry近来在开发者社区里 赢得一些关注,然而仍有许多java老手不知道tapestry为何物。
3 既然struts被如此广泛的使用,所以有很多struts资源可供参考。相比大多数开源软件,tapestry拥有非常可观的资源和文档,但跟struts相比仍有差距。
tapestry的优点
1 你开发一个tapestry应用无需关注servlet api,你也无须为你的servlet应用写一些典型的"衔接"代码。虽然struts简化了工作,然而servlet api 仍是你需面对的。
2 tapestry的页面模板除了几个特别属性和标识就是一个标准的html文件。 如果你是一个开发小组中的html设计高手,然而你不懂java或jsp,这就给你带来很大方便。
3 因为tapestry页面是标准的html所以可以用html所见即所得(wysiwyg)编辑器编辑和预览该页。当一个页需要修改它的外观并不需要通知服务器让它重新编译jsp.
4 tapestry不需要一个至高的,整个应用范围的配置文件。tapestry应用中的每一页是独立的,改变一页不会影响开发其他页面的开发者,因为并没有一个配置文件把所有页面的浏览粘连在一起。
5 tapestry拥有极好的错误报告。如果你在一个页的模板或页面规范犯了一个错误,tapestry会指出导致错误的行号。
6 用tapestry开发是种乐趣。这样说听上去似乎老,然而用tapestry开发一个web应用相比应用其他流行的框架更为自然有趣。用tapestry开发是应用了一种基于控件的架构,与
开发传统的gui应用非常相似。
tapestry 架构
tapestry框架是标准servlet api的一种扩展。它需要j2sdk1.2或更高版本的j2sdk和一个与servlet api 2.2(或更高)兼容的应用服务器/servlet容器。
一个tapestry应用由许多拥有唯一名称的页面组成。一个页面由一个模板和一些可复用的控件构成。模板由标准的html标签和一些额外的属性和标签构成,这些额外的属性和标签是为了告诉tapestry框架这个页面的那些部分是由tapestry控件组成。
简单的tapestry应用
为了最好的描述构建一个tapestry页面的方方面面,我们可以看看这个pig latinpig Latin: 儿童黑话, 故意颠倒英语字母顺序拼凑而成的行话翻译器应用的代码。这个应用只有一个页面,在这页里输入一个text值把它翻译成pig latin,然后把翻译好的值显示给用户。
在tapestry应用中每个页由3个部分组成:一个html模板,一个页面规范文件,一个java类。
这里有这个页面屏幕抓图: 
页面模板由标准的html标签和一些额外的属性和标签构成,这些额外的属性和标签是为了告诉tapestry框架这个页面的那些部分是由tapestry控件组成。页面模板存放在web应用的根context目录下。通常,tapestry在启动时会寻和呈现一个名叫"home"的页。虽然我们可以改变这种行为,但依照tapestry的惯例会更简单。
Home.heml
<html>
<head>
<title>tapestry pig latin translator</title>
</head>
<body>
<h1>pig latin translator</h1>
<form jwcid="@form" listener="listenersubmit">
  <table border="1">
    <tr>
      <td>value to translate:</td>
      <td><input type="text" jwcid="@textfield" value网页设计html代码翻译="ognl:inputvalue"/></td>
    </tr>
    <tr>
      <td>pig latin:</td>
      <td><jwcid="@insert" value="ognl:piglatinvalue"/></td>
    </tr>
  </table>
  <input type="submit" jwcid="@submit" value="translate"/>
</form>
</body>
</html>
页面模板的绝大部分是普通的html,只有少部分tapestry特有的属性和标签。这种模板机制的优势就是tapestry页面模板可以在一个可见即所得的编辑器里创建和预览。描述tapestry控件部分的标识是有限的和突出的。
标识里的jwcid所指是被应用的tapestry控件的java web component id.在上面代码断里,我们是隐式地使用控件。隐式的控件是指直接在页面模板里声明使用的控件。jwcid的前缀 '@ '符号就是通知tapestry这里声明使用了一个隐式控件。
在上面的pig latin translator页面模板里用了四个控件:form①, textfield③, insert④ 和submit⑤。它们只是tapestry框架提供的包含超过40个控件的控件库里的四个。在后面的范
例中,我们将会看到如何使用显式控件。显式控件是指控件在页面规范文件里声明后再使用的控件。
在前面的html模板里,使用控件的同时,也为控件指定了参数。例如控件form①有一个listener②参数它指定了当表单提交时对应的页面类调用的方法名称。那个ognl:前缀的使用贯穿页面的html模板,指向的是object graph navigation language (ognl)。ognl是一个强大的开源的表达式语言,用于将页面内控件的属性绑定到页面类的属性。
现在我们看看页面规范文件。页面规范文件是一个扩展名为page的xml文件,这个文件有许多职责,在众多职责中最基本是指定页面对应的java类。页面规范文件存放在webapp的web_inf目录。
home.page
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE page-specification
  PUBLIC "-//Apache Software Foundation//Tapestry Specification 4.0//EN"
  "/tapestry/dtd/Tapestry_4_0.dtd">
<page-specification class="home">
    <property-specification name="inputvalue" type="java.lang.string"/>
    <property-specification name="piglatinvalue" type="java.lang.string"/>
</page-specification>
页面规范文件的根元素有一个class的属性,它指定了这个页对应的java类。这个类必须要实现org.apache.tapestry.ipage接口。页面规范同时页定义了两个属性(property)元素,以便tapestry在页面类里创建新的属性。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。