作者: vikram goyal 11/20/2002
原文: http://www.onjava.com/pub/a/onjava/2002/11/20/templatestruts.html
译者: holexp
email: lidaigang1@sina.com
qq: 15761693
msn: chenmulong@hotmail.com
如果不用框架来开发一个门户站点将会是一件很困难的事。使用模版可以减少些麻烦。他可以让你在眨眼之间方便的更新与部署站点上的内容。用struts模版标签可以帮助你开发以模版为基础的门户站点。
这篇文章解释了与门户有关的一些基本的模版思想,介绍了struts对于模版的支持,围绕着struts模版标签进行了讨论。本文还阐述了其他的一些模版机制。
获得struts
网络应用程序框架使用mvc模式,能简化网络站点的开发。struts正是这样的一个框架。它提供了类集、标签库和一些能作为web开发基础的接口。struts是jakarta-apache论坛下的一个开源项目。
和所有jakarta的项目一样,struts提供原代码和二进制程序的下载。这篇文章里,我们使用struts的1.1b2版本。虽然这不是一个正式的版本,但这个版本比起1.0.2版有许多重大的改进。
首先,解压缩二进制程序到你所指定的目录。会有一个名为jakarta-struts-1.1-b2的目录创建。在它之下有两个子目录,分别为lib和webapps。lib目录包含我们所需要的所有库、dtd文件、tld文件(标签库定义),我们需要把它们添加到应用程序的classpath中。webapps目录包含了许多.war(web程序包)文件。这些可安装运行的war文件可以放到任意servlet容器的webapps目录中。我们使用tomcat作为servlet容器。
模板基础
我们通过模版可以创建很多结构相似的东西。模版帮助我们将会改变的东西归档打包,避免许多重复的工作。这对创建网络应用程序的确是一件很方便的事情。
在大多数的网络应用程序中,经常需要更换的是内容。jsp很容易做到这一点。因为jsp默认提供一个include机制——<jsp:include>标签。因此一个标准页面可以通过改变include文件来改变它的内容。但是我们怎么能如此方便的改变一个页面的布局呢?当我们需要改变的不仅仅是页面的内容,还包括这个页面的布局时情况会怎么样呢?我们等会就会回答这些问题。
用java提供的布局管理机制可以帮我们更形象的理解这些问题。java提出了布局管理器、组件、容器的概念来创建图形界面的应用程序。
当容器中的组件改变时,布局管理器会决定怎么样将新的组件部署到容器中。此外,容器本身也可以做为其他容器的组件从而实现了嵌套。在一些简单的情况下,jsp就可以做为一个网络应用程序的模版,其功能就等价于布局管理器。模版隐藏了web页面布局的实现方法。换句话说,它隐藏了布局的法则。假如布局法则需要改变,那么这些改变将回受限于模版。web页面通过实现这个模版来做其内容上的改变。
如果模版等价于布局管理器,那相应的容器和组件又是什么呢?相应的组件就是实际的内容文件:jsp文件、html文件、图象文件等等。容器将这些可见的组件聚集在一个单元里。一个jsp文件就是一个容器。容器需要关于模版的信息来部署这些组件。用java gui举例来说,一个面板(容器,集合单元)可以包含按钮和文本区(组件和内容),使用一个网格布局管理器(gridlayout)来部署这些组件。
现在我们可以来回答先前提出的那个问题了。我们知道模版集成了布局法则,当要改变布局是,我们要做的仅仅改变模版。这些改变会一起相关页面布局的改变,而不需要去改变这些页面本身。在门户应用程序中,这就意味着当大量页面需要采用同样布局时在时间上的节省。
struts用三个模版标签来实现模版。
插入标签inserttag——<template:insert>。
在容器/集合单元文件(collecting unit file)中使用。它定义了当前容器要使用的模版。类似于java gui中的container.setlayout(layout)方法。在它之后用<template:put>标签定义组件。
放入标签puttag——<template:put>。
在容器/集合单元文件(collecting unit file)中使用。他定义了组成容器/集合单元的组件/内容。它类似于java gui中的container.add(component)方法。每个puttag标签必须有一个相关组件的名称。
获得标签gettag——<template:get>。
在模版文件中使用。它告诉模版由puttag标签定义的不同组件的名称。它类似于java gui中的layout.addlayoutcomponent(componentname, component)方法。
一个简单的例子
你可以下载这个例子。我们将要创建两套内容文件、容器(集合单元)文件以及模版文件。当我们有了这些文件后,就可以就可以互换他们的模版,看到他们在布局上的改变。
复制struts-blank.war到tomcat的webapps目录并且将他改名为template-example.war。重起tomcat。template-example会由tomcat自动部署。删除pages目录和index.jsp文件。他们与我们的讨论暂时无关。
让我们定义又定义我们自己的内容文件做为一个开始。在template-example下建立一个名为content的目录,并且在其中创建六个文件:top1.htm, top2.htm, bottom1.htm, bottom2.htm, middle1.jsp, and middle2.jsp。
放入什么文件是取决于你的,但是对于初学者,静态的.htm文件更容易理解。举个例子来说,top.htm包括以下的内容:
this is the <b>top</b> content for the <b>first</b>
example. this is a static html file.
this is the <b>middle</b> content for the <b>first</b>
example. this is a dynamic jsp file and the
current date and time is <%= new date() %>
<%@ taglib uri='/web-inf/struts-
template.tld' prefix='template' %>
<html>
<head>
<title><template:get name='title'/>
</title>
</head>
<body>
<table border=1>
<tr>
<td><template:get name='top'/></td>
</tr>
<tr>
<td bgcolor="#ff55ff">
<template:get name='middle'/></td>
</tr>
<tr>
<td><template:get name='bottom'/></td>
</tr>
</table>
</body>
</html>
定义 template 1
<%@ taglib uri='/web-inf/struts-
template.tld' prefix='template' %>
<html>
<head>
<title><template:get name='title'/>
</title>
</head>
<body>
<table border=1>
<tr>
<td><template:get name='top'/></td>
<td bgcolor="#ff55ff">
<template:get name='middle'/></td>
<td><template:get name='bottom'/></td>
</tr>
</table>
</body>
</html>
定义 template 2
<%@ taglib uri='/web-inf/struts-template.tld' prefix='template' %>
<template:insert template='/templates/template1.jsp'>
<template:put name='title' content='templates' direct='true'/>
<template:put name='top' content='/content/top1.htm' />
<template:put name='middle' content='/content/middle1.jsp' />
<template:put name='bottom' content='/content/bottom1.htm'/>
</template:insert>
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器