Tapestry带来了真正的Java web应用程序OOP编程,摘自《深入浅出Tapestry》中的一句话。这本书也是我学习Tapestry的参考之一,其他参考资料如《Tapestry in action》《enjoy web de v with 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/j2eehttp://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模板文件,页面规范文件,页面类文件,组件包规范文件,组件规范文件,组件类文件,动态脚本文件。下面一个一个来详细讲述。*
  • 三种配置文件(应用程序规范文件,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组件**。例如上例中的:
    在上面的代码中,调用了Tapestry的官方组件Insert,value属性是Insert组件的参数之一。"@"符号用于区分jwcid是一个组件类型还是一个组件ID,如果是一个组件ID,tapestry将在HTML模板对应的页面规范中寻找对应该组件ID的组件调用配置。**(亦可这样理解,"@"为官方组件,无"@"为自定义组件,自定义组件需要在“.page”文件中详细配置该组件的用法。)**2.2 页面规范:是以页面名称命名且后缀是.page的XML文件,这个后缀为.page的XML文件必须声明Tapestry的页面规范DOCTYPE。例如在上例中:

也可以这样来表示:
HTML模板:

页面规范:

<?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:testjava类:

public String getTest{
return “test”;
}

    4.2 逐层访问java对象方法ognl:user.valuejava类:

public User getUser(){
return new User();
}
public class User{
public String getValue(){
return “test”
}
}

    4.3 访问java对象中的方法ognl:makeTestjava类:

public void makeTest(){
System.out.println(“test”);
}

最后,让我们来回顾一下Tapestry框架的整个调用过程:Home.html -> Home.page -> Home.class

by prowl

Tapestry入门相关推荐

  1. 学习资料2900篇(4~6)

    1451 round 方法  1452 RSS 2.0 Specification  1453 Ruby入门之代码块.迭代子和过程对象  1454 SAS9新体验:在DATA STEP中使用JAVA对 ...

  2. Tapestry经典入门教程

    简单介绍 不必关心链接!不必关心请求(http request)到了哪里!不必关心响应(http response)要转向哪里!Tapestry构建于底层的request-resonse模式,基于Se ...

  3. Spring MVC入门

    1.Spring Web MVC是什么 Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解 ...

  4. Spring框架入门

    目录 Spring框架概述 1.Spring框架组成 2.使用spring有什么好处 3.为什么使用spring框架 4.Spring快速入门 4.1Spring IoC底层实现原理 4.2下载Spr ...

  5. Shiro安全框架【快速入门】就这一篇!

    Shiro 简介 照例又去官网扒了扒介绍: Apache Shiro™ is a powerful and easy-to-use Java security framework that perfo ...

  6. Tapestry 教程(七)在Tapestry中一起使用Hibernate

    为什么80%的码农都做不了架构师?>>>    好了,你填写了所有的输入域,提交了这个表单(没有任何验证错误),瞧:你又回到了相同的表单,所有的格子里面都是空的.发生了什么,数据都到 ...

  7. h'tml和java代码,Tapestry 教程(七)在Tapestry中一起使用Hibernate

    好了,你填写了所有的输入域,提交了这个表单(没有任何验证错误),瞧:你又回到了相同的表单,所有的格子里面都是空的.发生了什么,数据都到哪儿去了? 所发生的就是我们还没有告诉Tapestry在表单成功提 ...

  8. 【重温SSM框架系列】1 - Spring快速入门(配置文件及API详解)

    Spring快速入门 Spring是什么 Spring发展历史 Spring的优势 Spring的开发步骤 没有Spring的时候的开发步骤 使用Spring的开发步骤 Spring配置文件(appl ...

  9. Spring MVC入门 —— 跟开涛学SpringMVC

    2014-05-14 23:22:27 第二章 Spring MVC入门 -- 跟开涛学SpringMVC  浏览(84979)|评论(12)   交流分类:Java|笔记分类: 跟开涛学Spring ...

最新文章

  1. .net中如何同步获取数据方式增加一样数据自动刷新列表_期待已久的动态数据库工具终于来了!...
  2. C# 加载图片image --(C#)Image.FromFile 方法会锁住文件的原因及可能的解决方法
  3. 洛谷 P1217 [USACO1.5]回文质数 Prime Palindrome
  4. idea自动更新java_IntelliJ IDEA自动更新资源文件
  5. mysql导入导出乱码问题
  6. dae怎么用草图大师打开_当 to C市场饱和,该怎么用场景化打开新市场?
  7. c 连接mysql.mwb_CodeSmith连接mysql提示“找不到请求的 .Net Framework Data Provider”的解决方法...
  8. react做h5 例子_使用React写一个网站的心得体会
  9. OpenKruise - 云原生应用自动化引擎正式开源
  10. 深入源码,深度解析Java 线程池的实现原理
  11. oracle的clob字段导致线上应用无响应问题及解决
  12. Android Studio项目目录结构介绍
  13. python绘制好几个子图_求助,python使用matplotlib画子图颜色,修改多个颜色报错...
  14. 海康网络摄像头添加到萤石云
  15. java integer集合排序_Java集合中List的Sort()方法进行排序
  16. 03单点登录CAS5.3.4集成客户端
  17. 计算机挂个硬盘显示格式化怎么解决,硬盘提示格式化怎么办?硬盘数据怎么恢复?...
  18. 图表有很多,你用对了么?
  19. 桌面图标计算机图标被禁用,电脑桌面图标常见问题
  20. html遮罩效果mask,H5案例分享:特殊形状图片之遮罩蒙版CSS3-Mask效果

热门文章

  1. Unity播放广告切到后台,返回Unity广告消失问题
  2. SMAA算法详解 - SMAANeighborhoodBlendingVS
  3. APP开发者必备,主流安卓应用商店开发者公司账号注册
  4. 超级节点MLN012-算法作曲
  5. 河北省对口升学计算机专业学校,河北省对口升学计算机专业试题详解
  6. 前端开发和后端开发哪个难学
  7. MoviePy合成视频没有声音
  8. 滴滴出行小程序体积优化实践
  9. 动手开发一个滴滴出行,是的,你没有看错!
  10. 数据库基础及常用SQL语句