struts_tiles模板

来源:百度文库 编辑:神马文学网 时间:2024/04/27 16:38:24
利用Tiles简化和增强Struts的 JSP开发
JSP(JavaServer Pages)技术通过includes支持应用程序对象的重用:includes允许其他文件(包括其他JSP文件)在编译时或者在应用程序运行时动态地被嵌入JSP文件。该特性非常有用,它可以将页面的共用组件,诸如报头、页脚以及菜单提取出来,作为可重用组件被多个文件所用。
Includes功能很强大,并且可以节约时间,但是他们却会带来组件大量重复的潜在问题。 每个嵌入共用组件的JSP文件都复制include定义。如果被包含的文件的名称改变了,那么每个使用Include引用这些文件的文件都需要被更新。
Tiles框架就是为了解决该局限性和增强Struts框架的功能而创建的。Tiles利用includes通过允许用户定义模板(布局),然后指定模板内容的装入方式,而扩展了重用的概念。
借助JSP的include范例,每个JSP通过include指定其模板和明确地给出内容的装入方式。大多数JSP的模板是相同的:在相同的地方装入相同的文件,只有加入独特内容(主体内容)部分是不同的。借助Tiles,可以使用一个外部配置文件定义一个主模板JSP,后者指定每个用于装填模板的include,然后定义哪个内容需要加入该模板。比如,设想一下你有一个典型的网站模板:页面顶端有一个报头(标题),左侧有一个菜单,中间部分为主体内容,底部是页脚。如果你仅仅使用JSP的includes来实现这种模板,每个具有这种模板的JSP不得不明确包含报头、菜单、页脚各部分以及页面的主体内容。该页面中唯一独特的部分就是主体内容。然而,如果你使用Tiles来实现该模板,那么,你只需要创建一个包含报头、菜单和页脚的JSP文件,基于能够传递给模板的用来指定哪个JSP文件包含主体内容的属性,就可以动态地包含主体内容。根据你的愿望,该Tiles模板能够被一次再一次地重复用于许多页面,你的内容JSPs必须包含的东西就是位于页面中部的独特的主体内容。
将Tiles添加到你的应用程序中
现在你已经知道了使用Tiles框架的好处,下面是将Tiles添加到你的Struts应用程序中所必要步骤:
将Tiles标记库描述符(TLD,Tag Library Descriptor)文件添加到该应用程序。 创建模板JSPs。 更新现有的JSP以使用模板。 创建文件tiles-defs.xml。 更新struts-config.xml 文件中的传递定义(forward definitions),并且将Tiles插件添加到该文件中。 重新打包,并且运行更新后的该应用程序。
下面详细讲述该过程的每个步骤。
将Tiles 标记库描述符文件添加到应用程序。更新你的Struts应用程序,以便使用Tiles的第一步是将Tiles标记库描述符文件添加到该应用程序中。该步骤是必须的,只有这样JSP才能使用Tiles标记库。Tiles标记库允许你在JSPs中使用Tiles模板。要将Tiles标记库描述符文件添加到该应用程序中,需要从Struts发布库目录(例如,c:\java\jakarta-struts-1.1\lib)中将 struts-tiles.tld 文件拷贝到你的应用程序的/WEB-INF/tlds目录中。下一步,在你的应用程序的Web部署描述符文件(web.xml)中添加一个标记库描述符(TLD)项,并按如下所示注册Tiles的标记库描述符:
/WEB-INF/tlds/struts-tiles.tld/WEB-INF/tlds/struts-tiles.tld
 
现在可以通过使用如下所示的代码,从你的JSPs中引用TLD:
<%@ tagliburi="/WEB-INF/tlds/struts-tiles.tld"prefix="tiles" %>
 
创建模板JSPs。既然你已经注册了Tiles的标记库描述符,那么现在就可以创建模板JSPs。代码清单 1所示的模板描述了Tile的基本概念。该模板是在你应用程序已有的页面结构的基础上创建的。
请注意,代码清单 1中模板页面的主体内容采用黑体字。对于每个不同的页面,该部分内容是不相同的。然而,页面的其他部分对这几个页面来说是相同的,这样就可以将它们提取出来构成一个通用的模板。
3个JSP文件--mainLayout.jsp、 header.jsp和 footer.jsp--构成了该模板。mainLayout.jsp 文件如下所示:
<%@ tagliburi="/WEB-INF/tlds/struts-tiles.tld"prefix="tiles" %><tiles:getAsString name="title"/>
 
该JSP文件定义了布局的模板,用于嵌入其他模板JSP以及主体内容。主体内容和其他模板JSP通过标记来嵌入。这些标记指定在Tiles配置文件中定义的属性的名称,这些属性的值是在运行时应被插入到JSP中的JSPs的名字。请注意标记的用法。该标记的作用与 标记类似,但是与后者使用被包含的页面的名称作为指定的属性值不同,它使用文本串来作为指定的属性值。该方法适用于将小块内容动态地插入模板,但不保证自有包含文件也被插入。
下面是报头和页脚模板JSPs:
header.jspABC, Inc. Human Resources Portal

footer.jsp
Copyright © ABC, Inc.
 
这种报头和页脚JSPs都非常的简单,不包含太多的HTML。这些JSPs的内容可以直接放入mainLayout.jsp文件中,内容页面仍然只需包含页面的主体内容。 然而,将页面拆分成多个小块可提高模板的使用灵活性。如果你需要一些页面必须使用定制的报头和页脚而其他页面使用标准报头和页脚,则可以将报头和页脚分离成离散的组件,以便使你能做到这一点。你只需在模板级别上定义报头和页脚属性的值,对于需要定制的报头或页脚(或二者),可在页面这一级上用新的值取代相应的值。
更新现有的JSPs以使用模板。在创建了模板JSPs之后,更新应用程序的原始JSPs,以便只包含其页面的主体内容。要达成此目的,从原始页面中移除共用的模板部分。代码清单 2显示了更新后的只包含主体内容的示例页面。
代码清单 2中的已更新的页面不再包含内容的报头和页脚部分。在运行时,模板JSPs用共用布局内容填充已更新的页面来创建完整的页面。
创建文件tiles-defs.xml。有两种声明Tiles模板的方法:
通过在每个模板JSP中所包含的主JSP中的Tiles标记进行声明; 通过在XML配置文件中对Tiles模板进行声明。
 
下面所述的例子使用配置文件方式,因为这种方式更加灵活,并且更加容易维护。代码清单 3显示了声明模板的tiles-defs.xml文件。该文件应该位于你的应用程序的/WEB-INF/ 文件夹中。
在该tiles-defs.xml 文件中有两个Tiles的定义。该文件中的第一个定义声明了名为main.layout的模板。通常,模板定义指定用于页面的模板,也会指定属性列表--这些属性的值将会被用来完成模板的填充。 页定义扩展模板定义,并且为在扩展模板中定义的属性提供相应的值。
请注意,代码清单 3中的第一个定义--main.layout--用put标记定义了4个属性。这些属性对于path属性指定的模板JSP--mainLayout.jsp--可用。该模板JSP使用这些属性来提供其内容的位置。另外,与title属性一样,这些属性能够被用以支持文本串。mainLayout.jsp中使用了title属性,因此它可以根据由页面定义设置的值包含一个动态标题(title),从而扩展了模板的定义。
代码清单 3的tiles-defs.xml 文件中的第二个定义声明了一个被称为search.page的页面定义。该定义扩展了main.layout定义,并且为在模板定义中无值的属性提供值。该定义可以重设模板定义中的任何属性,但在本例中只有标题(title)和主体(body)属性被重设。
更新struts-config.xml 文件中的传递定义,并且将Tiles插件添加到该文件中。在创建了Tiles配置文件之后,更新你的应用程序的struts-config.xml 文件以指向Tiles定义,而不是直接指向每个已经转换成使用Tiles的页面的JSPs,并把Tiles 插件添加到struts-config.xml文件中。
如果没有Tiles,正向作用定义就直接指向JSPs。有了Tiles,他们就指向Tiles配置文件中的页面定义。比如说,在这之前应用程序的搜索行动(search action)直接指向search.jsp,如下所示:

 
然而,有了Tiles之后,该动作就指向搜索页面的Tiles定义,如下所示:

 
对于所有Struts配置文件中决定使用Tiles的传递和行动(forward and action)定义,如下例所示,用合适的Tiles页面定义引用来代替相应的JSP引用。 下一步
 
阅读
关于Struts和Tiles
关于Struts控制台
(用于编辑Tiles配置文件)
为了将Tiles插件添加到应用程序,将以下代码段添加到你的struts-config.xml文件中:

 
该段代码使得应用程序在启动时载入Tiles插件。请注意,Tiles配置文件由set-property标记来指定。通过提供一个以逗号分隔的文件列表,可以用该标记来指定多个配置文件。
代码清单 4显示了整个Struts配置文件。粗体显示部分是被修改或者被添加的部分。重新打包,并且运行更新后的该应用程序。因为在该过程中,并没有Java代码被修改,所以不必要重新编译应用程序。然而,因为添加了一些文件和对一些做了修改,所以在应用程序运行之前,需要重新打包和重新部署。一旦使你的更新之后的应用程序能够运行,那么所有的功能都会和以前一样发挥其作用,但是现在你可以毫不费力地添加新的页面和对应用程序做出全局性的改变。
结论
通过提供了一个功能强大的促进页面组件重用的模板创建系统,Tiles框架极大地提高了核心Struts框架的价值。通过将Tiles框架用于你的JSP应用程序,可以节约大量的时间,并且大大提高你的Struts应用程序的开发效率。
代码清单3:tiles-defs.xml文件