1、使用JSP页面的包含命令建立
(1)建立复合页面的各个部分header.jsp,menu.jsp,contentIndex.jsp,footer.jsp
(2)将各个页面包含进来,其中file指定页面要包含的文件
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>产品信息反馈平台</title>
</head>
<body>
<div align="center">
<table border="0">
<tr align="center">
<td><%@ include file="header.jsp" %></td>
</tr>
<tr align="right">
<td><%@ include file="menu.jsp" %></td>
</tr>
<tr align="center">
<td><%@ include file="contentIndex.jsp" %></td>
</tr>
<tr align="center">
<td><%@ include file="footer.jsp" %></td>
</tr>
</table>
</div>
</body>
</html>
2、使用tiles标签来建立
(1)建立复合页面的各个部分header.jsp,menu.jsp,contentIndex.jsp,footer.jsp
(2)将各个页面包含进来,这种方法使用了Tiles标签
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles"%>
<html>
<head>
<title>产品信息反馈平台</title>
</head>
<body>
<div align="center">
<table border="0">
<tr align="center">
<td><tiles:insert page="header.jsp"/></td>
</tr>
<tr align="right">
<td><tiles:insert page="menu.jsp"/></td>
</tr>
<tr align="center">
<td><tiles:insert page="contentIndex.jsp"/></td>
</tr>
<tr align="center">
<td><tiles:insert page="footer.jsp"/></td>
</tr>
</table>
</div>
</body>
</html>
在使用<tiles:insert>标签之前需要完成以下过程:
[1]在项目的lib目录下引入下列jar包:struts.jar,commons-beanutils.jar,commons-digester.jsr,commons-logging.jsr
[2] 在web.xml文件中引入struts Tiles标签库
<taglib>
<taglib-uri>/WEB-INF/struts-tiles.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-tiles.tld</taglib-location>
</taglib>
[3] 在页面中添加使用标签的语句
<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles"%>
3、利用Tiles标签和复合页面模板建立
(1)建立复合页面的各个部分header.jsp,menu.jsp,contentIndex.jsp,footer.jsp
(2)建立复合页面模板:basePage.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles"%>
<html>
<head>
<title>产品信息反馈平台</title>
</head>
<body>
<div align="center">
<table border="0">
<tr align="center">
<td><tiles:insert attribute="header"/></td>
</tr>
<tr align="right">
<td><tiles:insert attribute="menu"/></td>
</tr>
<tr align="center">
<td><tiles:insert attribute="content"/></td>
</tr>
<tr align="center">
<td><tiles:insert attribute="footer"/></td>
</tr>
</table>
</div>
</body>
</html>
<tiles:insert>标签的attribute属性来表示页面的各个部分,这些表示将在复合页面中被引用。
(3)建立复合页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles"%>
<html>
<head>
<title>产品信息反馈平台</title>
</head>
<body>
<tiles:insert page="basePage.jsp">
<tiles:put name="header" value="menu.jsp"></tiles:put>
<tiles:put name="menu" value="header.jsp"></tiles:put>
<tiles:put name="content" value="contentIndex.jsp"></tiles:put>
<tiles:put name="footer" value="footer.jsp"></tiles:put>
</tiles:insert>
</body>
</html>
页面首先使用<tiles:insert>标签引入模板页面,然后使用<tiles:put>标签引入各个独立的页面。这些<tiles:put>标签的顺序不起作用,可以随意排列,最终还是按照模板定义的位置来决定页面的显示。
4、利用Tiles框架来建立
(1)建立复合页面的各个部分header.jsp,menu.jsp,contentIndex.jsp,footer.jsp
(2)建立复合页面模板:basePage.jsp
(3)建立配置文件tiles-defs.xml
<?xml version="1.0" encoding="UTF-8" ?>
<tiles-definitions>
<definition name="index" path="/basePage.jsp">
<put name="header" value="header.jsp"/>
<put name="menu" value="menu.jsp"/>
<put name="content" value="contentIndex.jsp"/>
<put name="footer" value="footer.jsp"/>
</definition>
</tiles-definitions>
代码说明:
[1] 复合页面的定义通过<definition>标签完成,页面的引用通过name属性值完成
[2] 可以定义多个复合页面,这些定义包含在<tiles-definitions>标签内部
(4)在struts-config.xml文件中配置上述文件,引入Tiles插件
<plug-in className="org.apache.struts.tiles.TilesPlugin">
<set-property property="definitions-config" value="/WEB-INF/tiles-defs.xml"/>
</plug-in>
(5)若在struts-config.xml文件中使用自定义的RequestProcessor,该RequestProcessor需要继承自TilesRequestProcessor,否则Web启动时会出错,不能引入Tiles插件。
<controller processorClass="com.struts.EncodingProcessor"/>
public class EncodingProcessor extends TilesRequestProcessor {
public void process(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
super.process(request, response);
}
}
(6)建立复合页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles"%>
<html>
<head>
<title>产品信息反馈平台</title>
</head>
<body>
<div align="center">
<tiles:insert definition="index"></tiles:insert>
</div>
</body>
</html>
总结:前两种方法基本类似,都是在复合页面中用命令或标签引入各个独立的页面,但是当复合页面的形式发生变化的时候,需要每个页面分别进行调整。第三种方法可以解决这个问题,先建立一个复合页面的模板页面,然后按照模板的定义引入各个页面,一旦需要修改所有的复合页面,只需要修改模板即可。第四种方法将每个复合页面的Tiles标签几种卸载一个配置文件中,既减少了复合页面中的代码量,也使得代码维护更加方便。