SiteMesh 是一个网页布局和修饰的框架,利用它可以将网页的内容和页面结构分离,以达到页面结构共享的目的。Sitemesh是由一个基于Web页面布局、装饰以及与现存Web应用整合的框架。它能帮助我们在由大量页面构成的项目中创建一致的页面布局和外观,如一致的导航条,一致的banner,一致的版权等等。它不仅仅能处理动态的内容,如jsp,php,asp等产生的内容,它也能处理静态的内容,如htm的内容,使得它的内容也符合你的页面结构的要求。甚至于它能将HTML文件像include那样将该文件作为一个面板的形式嵌入到别的文件中去。所有的这些都是GOF的Decorator模式的最生动的实现。尽管它是由java语言来实现的,但它能与其他Web应用很好地集成。
第一步,导入SiteMesh的jar包
第二步,在web.xml中配置sitemesh
<!-- 配置sitemesh --> <filter> <filter-name>sitemesh</filter-name> <filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class> </filter> <filter-mapping> <filter-name>sitemesh</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
第三步,添加一公用页面/jsp/base.jsp
<%@ page language="java" contentType="text/html; charset=GBK"
pageEncoding="GBK"%>
<%@ taglib prefix="decorator" uri="http://www.opensymphony.com/sitemesh/decorator"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<link rel="stylesheet" type="text/css" href="<%=request.getContextPath() %>/resources/css/main.css">
<title>用户信息</title>
<script type="text/javascript">
function doBackUserList(obj, form){
if(obj == "addUser" || obj == "showUser"){
form.action = "./userList";
}else if(obj == "updateUser"){
form.action = "../userList";
}
form.submit();
}
</script>
</head>
<body>
用户信息
<hr/>
<decorator:body></decorator:body>
</body>
</html>
其中,doBackUserList方法可以在用户新增、用户修改、展示用户信息页面调用,把静态资源/resources/css/main.css的引用从用户列表页面移到该页面中。
第四步,Sitemesh配置文件/WEB-INF/decorators.xml
<?xml version="1.0" encoding="UTF-8"?> <decorators defaultdir="/jsp/"> <excludes> <pattern>/json*</pattern> </excludes> <decorator name="main" page="base.jsp"> <pattern>/*</pattern> </decorator> </decorators>