取代JSP的新技术-tapestry

2008-02-23 07:47:44来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

在如今的web开发中,基于java的应用越来越多。在这其中,servlet又扮演着十分重要的角色。本系列文章就是要介绍一些辅助进行servlet开发的工具,让大家进行开发时,有多种技术可供选择。
servlet技术无疑是一种优秀的技术,java服务器端技术大都基于servlet技术。但这种技术也有其自身的不足,例如:表示层(html代码)与代码混在一起,可重用性不高。SUN于是提出了jsp技术,jsp也是基于servlet的一种技术,使用它你可以在html中嵌入java代码。jsp在servlet的基础上迈进了一大步,但单纯的jsp也有上面提到的servlet的缺点。不过利用jsp javabean taglib这种开发模式可以解决上面提到的缺点。但jsp本身还有其它一些不足,具体参看The Problems with JSP这篇文章。于是人们便开发了其它一些基于servlet的技术。我们首先介绍一下Tapestry。

简介

Tapestry是一个开源的基于servlet的应用程序框架,它使用组件对象模型来创建动态的,交互的web应用。一个组件就是任意一个带有jwcid属性的html标记。其中jwc的意思是Java Web Component。Tapestry使得java代码与html完全分离,利用这个框架开发大型应用变得轻而易举。并且开发的应用很容易维护和升级。Tapestry支持本地化,其错误报告也很详细。Tapestry主要利用javabean和xml技术进行开发。

第一个应用程序

在介绍第一个应用之前,先介绍一下Tapestry的安装。从sourceforge下载其最新版,解压后,将lib目录下的jar文件放到CLASSPATH中,将其中的war文件放到tomcat的webapp目录下。然后就可以通过http://localhost:8080/tutorial访问其tutorial应用。
在Tapestry中一个应用程序有以下几部分组成,我们以其自身带的HelloWorld程序为例介绍:

Servlet:
这是一个应用的主体部分:servlet类,这个类必须是ApplicationServlet的子类,并且必须实现getApplicationSpecificationPath()方法。示例如下:


import com.primix.tapestry.*;
public class HelloWorldServlet extends ApplicationServlet
{
protected String getApplicationSpecificationPath()
{
return "/tutorial/hello/HelloWorld.application";
}
}


/tutorial/hello/HelloWorld.application是一个应用的说明文件。
Application Specification:
其实就是描述这个应用的一个xml文件,在这个应用中有许多参数需要设置,engine-class将在下面介绍,page中的name属性指定html文件名,specification-path指定对这个页面的说明文件。在一个应用中可以有很多个page,但必须有一个page的name为"Home",因为当访问你的应用时,首先显示的就是这个page。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE application PUBLIC "-//Howard Ship//Tapestry Specification 1.1//EN" "http://tapestry.sf.net/dtd/Tapestry_1_1.dtd">
<application name="Hello World Tutorial" engine-class="com.primix.tapestry.engine.SimpleEngine">
<page name="Home" specification-path="/tutorial/hello/Home.jwc"/>
</application>


Application Engine:

当客户连接到Tapestry应用时,Tapestry将会创建一个Engine对象(类似于session)。通常我们程序中的application engine 一般是SimpleEngine类的一个实例,当然这个类的子类也可以。

Page Specification:
跟应用说明相似,页说明也是一个xml描述文件:


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE specification PUBLIC "-//Howard Ship//Tapestry Specification 1.1//EN" "http://tapestry.sf.net/dtd/Tapestry_1_1.dtd">
<specification class="com.primix.tapestry.BasePage"/>


因为这个应用是静态的,所以使用com.primix.tapestry.BasePage即可,如果是动态的应用,则需在这个文件中定义一些component,当然使用BasePage为基类的派生类也可以。
html页面:
这个应用的html页面非常简单:


<html>
<head>
<title>Hello World</title>
</head>
<body>
<b>HelloWorld</b>
</body>
</html>


注意上面所讲到的各种文件都要放到放在WAR的WEB-INF/classes目录下。

一个复杂的应用

在这个应用中我们以一个简单的学生管理系统为例介绍一下Tapestry的常用功能。我们要实现学生的增加和显示,因此我们需要两个html页面。至于StudentServlet类和Student.application我们就不描述了,在Student.application中定义了两个page:Home和EditStudent,具体看附件。学生数据存放在数据库中,我们用Student类表示数据中的一条记录,用StudentFactory类检索学生数据,这两个类用到了一个JDBC包装器,关于这个JDBC包装器可以见我的另外一篇文章<<对一个简单的 JDBC 包装器的扩展及应用>>。
首先看一下Home.html


<html>
<head>
<title>学生管理</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body bgcolor="#FFFFFF">
<p align="center">学生列表</p>
<table width="100%" border="1">
<tr>
<td >学号</td>
<td >姓名</td>
<td >性别</td>
<td >班级</td>
</tr>
<span jwcid="liststudent">
<tr>
<td><span jwcid="id">20012400</span></td>
<td><span jwcid="sname">宗锋</span></td>
<td><span jwcid="gender">男</span></td>
<td><span jwcid="department">计算机研一</span></td>
</tr>
</span>
<tr jwcid="$remove$">
<td>20011389</td>
<td>桑一珊</td>
<td>男</td>
<td>计算机研一</td>
</tr>
</table>
<a jwcid="add">添加学生</a>

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:教您纯Jsp的自定义的单个文件上载代码

下一篇:JBuilder2005实战JSP之程序功能介绍