Tapestry带来了真正的Java web应用程序OOP编程,摘自《深入浅出Tapestry》中的一句话。这本书也是我学习Tapestry的参考之一,其他参考资料如《Tapestry in action》《enjoy web de v with tapestry》《Tapestry开发指南》等等也非常不错。
在此,把在学习Tapestry过程当中当中的一些经验和大家分享。
Tapestry与其他诸如struts springMVC JSF等framework之间的比较在此不做赘述了,既然选择花时间来看我的这片文章我想你也一定有兴趣了解一下这门技术。当然希望你能对基于MVC的java web有所了解,这会对你Tapestry的学习有很大的帮助。
1 搭建环境(windows)
1. 建议选择 http://tapestry.apache.org/download.html 4.1.5 binary (zip) 下载到本地之后解压到任意目录,在本文中路径为:D:\env\tapestry-project-4.1.5
D:\env\tapestry-project-4.1.5\lib下包含了开发一个Tapestry应用的全部jar包
2. myeclipse6.0。
3. 下面让我们来开发一个简单的 Tapestry 应用:
启动 myeclipse ,新建 java web project.
展开工程(myt4pro1)右键点击JRE System library 选择 build path >> configure build path. 新对话框中选择 libraries 选项卡,点击 add library>>user library>>user libraries>>new ,起一个名字本文中为 T4-lib 然后点击 add JARs 将 D:\env\tapestry-project-4.1.5\lib 目录下的全部jar文件导入. 然后选中 T4-lib 点击finish 。
修改web-inf下web.xml文件,如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>myt4pro</display-name>
<servlet>
<servlet-name>myts</servlet-name>
<servlet-class>org.apache.tapestry.ApplicationServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>myts</servlet-name>
<url-pattern>/app</url-pattern>
</servlet-mapping>
</web-app>
4. 在WebRoot目录下(web-inf同级目录),创建Home.html。(必须叫Home.html,Tapestry程序入口)代码如下:
<span jwcid="@Insert" value="ognl:t4start" />
5. 在web-inf目录下创建名为 Home.page 的xml文件。如下:
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE page-specification PUBLIC
"-//Apache Software Foundation//Tapestry Specification 4.0//EN"
"http://jakarta.apache.org/tapestry/dtd/Tapestry_4_0.dtd">
<page-specification class="myts.Home">
</page-specification>
6. 最后在 myts 包下写一个java类:
package myts;
import org.apache.tapestry.html.BasePage;
public abstract class Home extends BasePage{
public String getT4start(){
return "hello ,Tapestry4..";
}
}
7. 启动tomcat 在浏览器输入 http://localhost:8080/myt4pro1/app 应该看到如下页面
hello ,Tapestry4..
8. 该例子的目录结构如下:
2.Tapestry框架概述
一个基于Tapestry的web应用可能包含了以下几种文件:应用规范文件,hivemind配置文件,HTML模板文件,页面规范文件,页面类文件,组件包规范文件,组件规范文件,组件类文件,动态脚本文件。下面一个一个来详细讲述。
1. 三种配置文件(应用程序规范文件,hivemodule配置文件,组件包规范文件)
1.1 应用程序规范文件:是一个以应用程序servlet名称命名的,以“.application”为扩展名的xml文件。一个web应用只能有一个应用程序规范文件。他制定了应用程序的各种细节配置,页面和组件配置,组件包配置等等。如果我们不为应用程序配置应用程序规范文件,Tapestry会为我们提供一个默认的。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE application PUBLIC
"-//Apache Software Foundation//Tapestry Specification 4.0//EN"
"http://jakarta.apache.org/tapestry/dtd/Tapestry_4_0.dtd">
<application name="myt4pro">
<meta key="org.apache.tapestry.page-class-packages" value="myts"/>
<library id="contrib" specification-path="/org/apache/tapestry/contrib/Contrib.library"/>
</application>
<application>为根标签元素,name制定了serlvet名称。
<meta>用于配置应用程序细节。在此我们为应用程序配置页面类的默认定义包路径。那么Tapestry将自动在myts路径下寻找页面类。
<library>导入了外部组件包
1.2 hivemind配置文件:HiveMind框架是一个依赖注入微核心框架,Tapestry框架构建在HiveMind之上。如果你的程序业务层没有用到hivemind,不必配置hivemodule文件。下面给了一个为应用程序配置Friendly URL的例子:
<?xml version="1.0" encoding="UTF-8"?>
<module id="myt4pro" version="1.0.0">
<contribution configiration-id="tapestry.url.ServiceEncoders" />
<direct-service-encoder id ="direct" stateless-extension="direct" stateful-extension="sdirect" />
<direct-service-encoder id ="action" stateless-extension="action" stateful-extension="saction" />
<page-service-encoder id="page" extension="page" service="page" />
<page-service-encoder id="external" extension="external" service="external" />
<asset-encoder id="asset" path="/assets" />
<extension-encoder id="ext" id="ext" extension="svc" after="*"/>
</contribution>
</module>
1.3 组件包规范文件: 为了跨项目积累组件,我们可以将组件打成jar包,然后通过在应用程序规范文件中引入组件包的方式,调用组件包中的自定义组件。组件包规范文件的后缀为“.library”的XML文件,命名任意。
2. Tapestry页面的组成
2.1 HTML模板:HTML模板就是标准的静态HTML页面,在HTML模板中我们通过jwcid(Java Web Component ID)标签属性调用Tapestry组件。例如上例中的:
<span jwcid="@Insert" value="ognl:t4start" />
在上面的代码中,调用了Tapestry的官方组件Insert,value属性是Insert组件的参数之一。"@"符号用于区分jwcid是一个组件类型还是一个组件ID,如果是一个组件ID,tapestry将在HTML模板对应的页面规范中寻找对应该组件ID的组件调用配置。(亦可这样理解,"@"为官方组件,无"@"为自定义组件,自定义组件需要在“.page”文件中详细配置该组件的用法。)
2.2 页面规范:是以页面名称命名且后缀是.page的XML文件,这个后缀为.page的XML文件必须声明Tapestry的页面规范DOCTYPE。
例如在上例中:
<span jwcid="@Insert" value="ognl:t4start" />
也可以这样来表示:
HTML模板:
<span jwcid="test" />
页面规范:
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE page-specification PUBLIC
"-//Apache Software Foundation//Tapestry Specification 4.0//EN"
"http://jakarta.apache.org/tapestry/dtd/Tapestry_4_0.dtd">
<page-specification class="myts.Home">
<component id="test" type="Insert">
<binding name="value" value="t4start" />
</component>
</page-specification>
2.3 页面类:必须继承org.apache.tapestry.html.BasePage类,如:
package myts;
import org.apache.tapestry.html.BasePage;
public abstract class Home extends BasePage{
public String getT4start(){
return "hello ,Tapestry4..";
}
}
3. Tapestry组件的组成
在Tapestry中,一个组件通常由HTML模板,组件规范,组件类,动态脚本文件4个文件组成,除了组件规范以外,其他三个文件都不是必须的。
4. ognl
OGNL是 Object Graph Navigation Language 的简称,是一种绑定方式的表达式语言。
OGNL是OpenSymphony的一个开源项目。
OGNL最重要的也是最根本的作用是简化调用Java类中的getter/setter方法,同时,他也是一种功能单一且易于使用的表达式语言,OGNL表达式就式该语言的全部。对于OGNL如何与模板对象绑定,Tapestry已经实现,我们不需要关心。同时,虽然OGNL表达式带有运算功能,但是Tapestry框架将页面逻辑全部放到了页面类中,因此根本没必要使用OGNL表达式来处理页面逻辑。
举几个例子便于理解:
4.1 简化调用Java属性。
ognl:test
java类:
public String getTest{
return "test";
}
4.2 逐层访问java对象方法
ognl:user.value
java类:
public User getUser(){
return new User();
}
public class User{
public String getValue(){
return "test"
}
}
4.3 访问java对象中的方法
ognl:makeTest
java类:
public void makeTest(){
System.out.println("test");
}
最后,让我们来回顾一下Tapestry框架的整个调用过程:Home.html -> Home.page -> Home.class
结束语:本文为本人原创,参考了诸多资料。也希望在学习Tapestry的过程中把经验和心得拿出来与大家分享。
欢迎转载,注明出处。 :)
分享到:
相关推荐
### Tapestry 3入门教程知识点概述 #### 一、项目背景与目标 - **项目名称**:Tapestry-3-Getting Started - **项目目标**:开发一个基于Web的货币转换器应用。 - **技术栈**:Tapestry 3、Eclipse IDE、Apache ...
Tapestry 4.0.2 是Apache Software Foundation开发的Tapestry框架的一个重要版本,它的核心理念是将Web页面视作由多个可重用的组件构成,每个组件都有自己的状态和行为。这种设计理念简化了复杂的Web应用开发,使得...
2. **自动表单处理:**Tapestry框架提供了自动表单处理功能,可以极大地减少编写重复代码的工作量。 3. **事件驱动模型:**采用事件驱动模型,使开发者能够更容易地管理用户交互和页面更新。 4. **动态页面渲染:**...
#### 框架概述与整合 在当今的企业级Web应用开发中,选择合适的框架是确保应用性能、可维护性和扩展性的关键。Tapestry、Spring和Hibernate作为三个广受好评的开源框架,各自在Web开发的不同层面提供了卓越的支持。...
根据提供的信息,《Tapestry In Action》是一本详细介绍Tapestry框架的专业书籍,该书由Howard M. Lewis Ship撰写,并由Manning Publications Co.出版。本书面向那些希望深入理解和掌握Tapestry框架的开发人员。下面...
《Manning - Tapestry In Action》是一本深入介绍Tapestry框架的专业书籍,该书由Howard M. Lewis Ship编写并由Manning出版社出版。Tapestry是一款用于构建高度可扩展、易于维护的Java Web应用程序的开源框架。本书...
Tapestry 是一个开源的Java Web 应用程序框架,由Apache软件基金会维护。它采用组件化的方式构建Web应用,提供了丰富的功能和强大的性能优化,使得开发人员能够更加专注于业务逻辑,而不是底层的HTTP请求处理和页面...
#### 一、Apache Tapestry 概述 Apache Tapestry 是一款使用 Java 语言创建 Web 应用程序的面向组件的开发框架。它通过组件化的方法来构建网页,提供了丰富的功能,包括输入验证、本地化/国际化、状态/持久性管理、...
Tapestry 是一个全面 web application 框架,使用 JAVA 写的,主要特点是使用组件对象模式(component object model),这并不是一种简单的脚本,而是用于生成高动态性高互交性的 web 页面。 概述 Tapestry 不是一...
#### 一、Tapestry框架概述 Tapestry是一种用于构建高度可扩展、模块化且易于维护的Web应用程序的Java框架。它采用组件导向编程模型,将页面分解为可复用的组件,使得开发者可以专注于业务逻辑而非页面布局。 ####...
### Tapestry用户手册知识点解析 #### 1. 简介 - **1.1 Tapestry概述** - Tapestry是一种用于构建高度交互式的Web应用的框架...通过这些知识点的学习,开发者可以更好地理解和掌握Tapestry框架的核心技术和设计理念。
### 一、Tapestry3概述 #### Scripting vs. Components 传统的Web开发常依赖于脚本语言如JavaScript或模板引擎来生成动态页面内容,而Tapestry则引入了一种基于组件的编程范式。这种模式下,每个Web组件都是独立的...
### Tapestry 快速入门知识点概述 #### 1. 介绍 Tapestry 是一款用于构建高度可伸缩、易于维护的 Java Web 应用程序的框架。它提供了一种面向组件的编程模型,允许开发者将复杂的用户界面分解成可重用的部分。本篇...
Tapestry 是一个组件驱动的框架,强调类型安全和声明式编程,而 Spring 则是一个全面的后端框架,提供依赖注入(DI)、面向切面编程(AOP)和事务管理等功能。将两者结合使用,可以充分利用它们各自的优势,构建高效...
#### 一、Tapestry5概述 Tapestry5是一种先进的、基于Java的Web开发框架,它以其强大的功能、灵活性以及易用性著称。该框架由Howard Lewis Ship创建,并由Apache软件基金会维护。本书《Tapestry5:构建Web应用程序...