< 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 >
4 在WebContent目录下面新建一个Home.html文件,内容如下:
< 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>。它的过程如下:
<! 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 >
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.0的jar包时,Home类不用声明为abstract,董黎伟先生写的《Tapestry4开发指南》上也说明Tapesrty4.0后就可以不用声明为抽象类,但当我使用Tapestry 4.1.1 的jar包后,却又了必须声明为抽象的)。
言归正传,在这个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的页面缓存,这样就能够让我们在开发项目的时候,修改html和page之后,不需要频繁地重新启动项目。但是在加载这两条参数之后,内存消耗比较大,所以在项目发布的时候,我们就不再使用这两条参数了。然后将HelloWorld发布到Tomcat中去,最后启动服务器,打开浏览器,在地址栏中输入http://localhost:8080/HelloWorld/app,就可以看到运行的结果了。