Web产品开发中大家会面临着同一个问题----页面中大部分都是固定不变的,变化的只有内容部分,也可以说每个产品都有一定的风格或者是使用了几类模板。 遇到了问题就要想办法解决!相信大家也想找一个方法,提高Web代码的复用性和可维护性。下面介绍一下我们的解决方案。
解决方案:
Apache Tiles 框架来创建可重用的表示组件 ,可以划分表示层以更好地重用布局。
最早的Tiles是组装在Struts1.1里面的,主要目的是为了将复数的jsp页面作为一个的页面的部分机能,然后用来组合成一个最终表示用页面用的,这样的话,便于对页面的各个机能的变更及维护。 Tiles使得struts在页面的处理方面多了一种选择。并且更容易实现代码的重用。 (百度百科)
相关内容(具体查看ppt):
- Tile
- Template
- Attribute
- Definition
- Nesting and Extending Definitions
- List Attributes
- Wildcard support
- View Preparers
- Others
使用方法(具体代码可参考附件中tiles-demo):
开发工具、插件、开源软件
Eclipse 、Maven、M2Eclipse、JDK1.6(必须1.5or以上)、Tiles2.2、Spring、SpringMVC、slf4j、jstl、jetty
首先新建maven项目,网上有很多介绍,这里省略。
在POM中添加必要的jar依赖,包括Tiles2.2、Spring、slf4j、jstl和servlet(因为用jetty)。具体可以参考下面的附件。
集成spring和springmvc,省略(原因同上,网上介绍的太多啦)。
添加Tiles配置文件,默认在WEB-INF下,格式比较简单。
1)定义模板页面
- <%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>
- <html>
- <head>
- <title><tiles:getAsString name="title" /></title>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- </head>
- <body>
- <table style="margin: auto; border: 1px; border-style: solid; border-color: #ccc; 900px;">
- <tr style="height: 100px; background-color: #555;">
- <td colspan="2">
- <tiles:getAsString name="head" />
- </td>
- </tr>
- <tr>
- <td style=" 200px; height: 500px; background-color: #666;">
- <tiles:getAsString name="menu" />
- </td>
- <td>
- <tiles:insertAttribute name="content"></tiles:insertAttribute>
- </td>
- </tr>
- <tr style="height: 50px; background-color: #333;">
- <td colspan="2">
- <tiles:getAsString name="footer" />
- </td>
- </tr>
- </table>
- </body>
- </html>
2)在 tiles.xml 中定义和配置模板
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE tiles-definitions PUBLIC
- "-//Apache Software Foundation//DTD Tiles Configuration 2.1//EN"
- "http://tiles.apache.org/dtds/tiles-config_2_1.dtd">
- <tiles-definitions>
- <definition name="base" template="/WEB-INF/pages/string/layout.jsp" >
- <put-attribute name="title" value="hello tiles"></put-attribute>
- <put-attribute name="head" value="head"></put-attribute>
- <put-attribute name="menu" value="menu"></put-attribute>
- <put-attribute name="footer" value="footer"></put-attribute>
- </definition>
- </tiles-definitions>
3)集成Spring
将springmvc与tiles集成,主要是是在mvc-servlet中添加配置,如下:
指定tiles配置文件位置(代码如下)
- <bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
- <property name="definitions">
- <list>
- <value>/WEB-INF/tiles.xml</value>
- </list>
- </property>
- </bean>
配置tiles视图解析(代码如下)
- <bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
- <property name="viewClass">
- <value>
- org.springframework.web.servlet.view.tiles2.TilesView
- </value>
- </property>
- </bean>
- <bean id="tilesResolver" class="org.springframework.web.servlet.view.tiles2.TilesViewResolver">
- <property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView" />
- <property name="order" value="1" />
- <property name="viewNames">
- <list>
- <value>*</value>
- </list>
- </property>
- </bean>
配置jstl视图解析(代码如下)
- <bean id="filenameController" class="org.springframework.web.servlet.mvc.UrlFilenameViewController" />
- <bean id="jstlViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
- <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
- <property name="prefix" value="/WEB-INF/pages/" />
- <property name="suffix" value=".jsp" />
- <property name="order" value="2" />
- </bean>
完成以上步骤基本就可以了
参考资料:
http://tiles.apache.org/2.2/framework/tutorial/index.html
Warning! Tiles users that use Tiles 2.1.1 or 2.1.0 version should not install it in a production environment, due to a discovered security problem. Upgrade Tiles.
Tiles 2.0.x is not involved in this security bug.
Tiles Runtime Environment
a Java Runtime Environment following the Java SE 5.0 specifications;
a servlet container that supports Servlet 2.4 (or above) and JSP 2.0 (or above).