之前就知道sitemesh 的功能,但是一直没能静下心来研究,今天终于运行出来了。

以前写web页面时都是在页面中将公共的部分include进来,sitemesh的应用使得页面自动引入公共部分的代码到页面。103722660.png

decorators目录下存放的是公共部分代码。以basic-theme.jsp为例

<?xml version="1.0" encoding="UTF-8" ?>
<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title><decorator:title default="默认title"/></title>
</head>
<body>
<h1>Header</h1>
<p><b>Navigator</b></p>
<hr />
<decorator:body />
<hr />
<h1>footer</h1>
</body>
</html>

admin-theme.jsp和这个类似。

decorators.xml中配置

<?xml version="1.0" encoding="UTF-8"?>
<decorators defaultdir="/decorators">
<decorator name="basic-theme" page="basic-theme.jsp">
<pattern>/*</pattern><!--webroot根目录-->
</decorator>
<decorator name="admin-theme" page="admin-theme.jsp">
<pattern>/admin/*</pattern><!--admin目录-->
</decorator>
</decorators>

web.xml中配置过滤器

<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>

根目录下的index.jsp

<body>
前台首页 <br>
Hello world!
</body>

104308929.png