之前就知道sitemesh 的功能,但是一直没能静下心来研究,今天终于运行出来了。
以前写web页面时都是在页面中将公共的部分include进来,sitemesh的应用使得页面自动引入公共部分的代码到页面。
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>