Tapestry4入门

来源:互联网 发布:python str转int 编辑:程序博客网 时间:2024/06/10 21:52
 
1.       Tapestry4开发环境的安装
JDK:5.0
开发工具:Eclipse3.2 , WTP 1.5.2
服务器:Tomcat 5.5.20
2.       Tapestry4下载
http://tapestry.apache.org
版本:tapestry-project-4.1.1-bin.zip
3.     安装Tapestry4
解压下载下来的tapestry-project-4.1.1-bin.zip的文件,解压后目录如下:
 
tapestry-project-4.1.1-bin目录下面包含了一些文件夹,每个文件夹下面都是开发Tapestry要用到的一些jar文件。我将每一个独立的jar文件拷贝出来,所有的jar文件如下图:
 
 在开发Tapestry应用时,需要将这些jar文件拷贝到Tapestry_App/WEB-INF/lib目录下。
4.第一个Tapestry应用
     1 新建一个WTP项目,取名为HelloWorld
 
   2 拷贝刚才解压后得到的那些jar文件到HelloWorld/WEB-INF/lib目录下,刷新HelloWorld工程,如图:
 
 
 3 修改web.xml文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" 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>HelloWorld</display-name>
    
<servlet>
        
<servlet-name>HelloWorld</servlet-name>
        
<servlet-class>
            org.apache.tapestry.ApplicationServlet
        
</servlet-class>
        
<load-on-startup>1</load-on-startup>
    
</servlet>
    
<servlet-mapping>
        
<servlet-name>HelloWorld</servlet-name>
        
<url-pattern>/app</url-pattern>
    
</servlet-mapping>
</web-app>
 
 web.xml中配置了一个servlet,将所有的对/app的请求,都交给了org.apache.tapestry.ApplicationServlet

4 WebContent目录下面新建一个Home.html文件,内容如下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    
<head>
          
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
          
<title>Hello World</title>
    
</head>
    
<body>
          
<span jwcid="hello" />
    
</body>
</html>

 

 

可以看到,这个HTML文件,只是用到了一个标准的HTML标签<span>,实际上,打开后并没有任何内容。唯一不同的是,在<span>标签内部使用了一个”jwcid”的属性,”jwcid”是什么?jwcid是“Java Web Component id”缩写,它是Tapestry用来标识一个Tapestry组件的,当<span>标签中加入了jwcid后,就成了Tapestry的一个组件。这样,这个Tapestry组件(<span jwcid=”hello”>)的id”hello”。那么将HTML标签标识为Tapestry组件有什么作用呢?当Tapestry显示HTML页面的时候,它会查找页面中的Tapestry组件,Tapestry就会去创建这样的一个组件,并且生成相应的HTML代码,最后使用生成的HTML代码去替换这个在页面中声明的组件,像<span>。它的过程如下:

 上面我们已经在HTML页面中定义了一个Tapestry组件”hello”,那么,Tapestry怎么知道页面中的组件,以及它的类型呢?答案是使用Tapestry的页面配置文件,针对HTML页面,Tapestry都有相应的XXX.page配置文件来配置Tapestry页面组件,针对上面的Home.html,就会有一个对应的Home.page配置文件。5 配置Home.page文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!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=”org.jackhlp.helloworld.Home” >
        
<component id="hello" type="Insert">
            
<binding name="value" value="ognl:hello"/>
        
</component>
</page-specification>
 
 在这个配置文件中,配置了一个组件component,它的id”hello”,也就是我们在Home.html页面文件中由jwcid=”hello”所指定的组件的id,这样就就将页面组件和Tapestry连结起来了。type=”Insert”声明这一个组件的类型为”Insert”,用来输入一些简单的文本。每一个Tapestry组件都有一系列的参数,通过<binding>元素绑定的组件上,这个”value”参数用来输入组件返回的值。具体的可以参看Tapestrydtd验证文件。<binding>元素的”value”属性就是组件要返回的值,”ognl:”前缀说明使用了一个OGNL表达式。关于OGNL表达式,请参看OGNL的参考文档。在这里,这个OGNL表达式将会去调用组件对象的getHello()方法。我们再回过头来看一下<page-specification >class属性,它指向了一个JAVA类,org.jackhlp.helloworld.Home,针对Tapestry的每一个页面文件,都会有相应的一个JAVA类,页每一个Tapestry组件,也只是一个JAVA的对象,而这个JAVA对象的返回值,就是组件的返回值。下面来看看这个org.jackhlp.helloworld.Home类。
    6 定义Home.java类,内容如下:
 
package org.jackhlp.helloworld;

import org.apache.tapestry.html.BasePage;

public abstract class Home extends BasePage {
    
public String getHello() {
        
return "Hello World!";
    }
}
 
 

可以看到,这只是一个普通的类,它继承自org.apache.tapestry.html.BasePage,它是一个抽象类,Tapestry会自动地创建Home类的子类。

(这里有一个奇怪,就是在使用Tapestry 4.0jar包时,Home类不用声明为abstract董黎伟先生写的《Tapestry4开发指南》上也说明Tapesrty4.0后就可以不用声明为抽象类但当我使用Tapestry 4.1.1jar包后,却又了必须声明为抽象的)

言归正传,在这个Home类中只有一个方法getHello(),并且只简单地返回了一个字符串”Hello World!”,对,这个字符串就是我们要在网页上面显示的内容,在Home.page文件中定义的组件中,我们使用”ognl:hello”getHello()方法的返回值绑定到了组件”hello”上面。

7 运行

首先先建立一个服务器,

打开“窗口”->“首选项”->“服务器”->“已安装运行时”->“添加”,新建一个运行时环境,接着在“服务器”视图上新建一个服务器,在这里,我们需要为服务器添加两条JVM启动参数:

-Dorg.apache.tapestry.disable-caching=true

-Dorg.apache.tapestry.enable-reset-service=true

它们的作用是关闭Tapestry的页面缓存,这样就能够让我们在开发项目的时候,修改htmlpage之后,不需要频繁地重新启动项目。但是在加载这两条参数之后,内存消耗比较大,所以在项目发布的时候,我们就不再使用这两条参数了。然后将HelloWorld发布到Tomcat中去,最后启动服务器,打开浏览器,在地址栏中输入http://localhost:8080/HelloWorld/app,就可以看到运行的结果了。