Sitemesh官网简介图片简单明了,一目了然 .. welcome Page和search Page包含两部分 Meta-Data 和 Body-Content , 经过装饰器后被装饰返回一个最终的页面 final pages.html
官网 : http://wiki.sitemesh.org/wiki/display/sitemesh3/Homejava
在Maven工程的Pom中添加依赖 ~web
<dependency> <groupId>org.sitemesh</groupId> <artifactId>sitemesh</artifactId> <version>3.0.0</version> </dependency>
<web-app> ... <filter> <filter-name>sitemesh</filter-name> <filter-class>org.sitemesh.config.ConfigurableSiteMeshFilter</filter-class> </filter> <filter-mapping> <filter-name>sitemesh</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
sitemesh 3 有两种配置方式 XML和Javaapp
添加一个 ~ /WEB-INF/sitemesh3.xmljsp
<sitemesh> <!-- 默认的装饰路径。若是没有配置其余的路径将启用默认路径,这个能够适用于全部路径 --> <!-- Map default decorator. This shall be applied to all paths if no other paths match. --> <mapping decorator="/default-decorator.html"/> <!-- 配置装饰器的路径 --> <!-- Map decorators to path patterns. --> <mapping path="/admin/*" decorator="/another-decorator.html"/> <mapping path="/*.special.jsp" decorator="/special-decorator.html"/> <!-- 对同一路径配置多个装饰器 --> <!-- Alternative convention. This is more verbose but allows multiple decorators to be applied to a single path. --> <mapping> <path>/articles/*</path> <decorator>/decorators/article.html</decorator> <decorator>/decorators/two-page-layout.html</decorator> <decorator>/decorators/common.html</decorator> </mapping> <!-- 配置 不被装饰 的路径 --> <!-- Exclude path from decoration. --> <mapping path="/javadoc/*" exclue="true"/> <mapping path="/brochures/*" exclue="true"/> <!-- 默认状况下, sitemesh 只对 HTTP 响应头中 Content-Type 为 text/html 的类型进行拦截和装饰, 咱们也能够添加更多的 mime 类型 --> <mime-type>text/html</mime-type> <mime-type>application/vnd.wap.xhtml+xml</mime-type> <mime-type>application/xhtml+xml</mime-type> <!-- Sitemesh 3 默认只提供了 body,title,head 种 tag 类型 咱们能够添加自定义的tag规则 --> <content-processor> <tag-rule-bundle class="com.something.CssCompressingBundle" /> <tag-rule-bundle class="com.something.LinkRewritingBundle"/> </content-processor> </sitemesh>
package com.erma.common; import org.sitemesh.builder.SiteMeshFilterBuilder; import org.sitemesh.config.ConfigurableSiteMeshFilter; /** * Created by Erma on 2017/4/13. */ public class MySiteMeshFilter extends ConfigurableSiteMeshFilter { @Override protected void applyCustomConfiguration(SiteMeshFilterBuilder builder) { // 默认的装饰器 // Map default decorator. This shall be applied to all paths if no other paths match. builder.addDecoratorPath("/*", "/default-decorator.html") // 配合 本身 的 路径对应的装饰器 // Map decorators to path patterns. .addDecoratorPath("/admin/*", "/another-decorator.html") .addDecoratorPath("/*.special.jsp", "/special-decorator.html") //一个路径多个装饰器 // Map multiple decorators to the a single path. .addDecoratorPaths("/articles/*", "/decorators/article.html", "/decoratos/two-page-layout.html", "/decorators/common.html") // 配置不被装饰的路径 // Exclude path from decoration. .addExcludedPath("/javadoc/*") .addExcludedPath("/brochures/*"); // 配置本身的MineType builder.setMimeTypes("text/html", "application/xhtml+xml", "application/vnd.wap.xhtml+xml"); // 配置本身的tag builder.addTagRuleBundles(new CssCompressingBundle(), new LinkRewritingBundle()); } }
下面是使用 intellij + Maven + Sitemsehxml的配置方式的一个使用maven
<sitemesh> <!-- 拦截任何路径配置装饰器 --> <mapping path="/*" decorator="/WEB-INF/jsp/layouts/decorator.jsp"/> <!-- 这里配置自定义的tag --> <content-processor> <tag-rule-bundle class="com.erma.common.MySiteMeshFilter"/> </content-processor> </sitemesh>
package com.erma.common; import org.sitemesh.SiteMeshContext; import org.sitemesh.content.ContentProperty; import org.sitemesh.content.tagrules.TagRuleBundle; import org.sitemesh.content.tagrules.html.ExportTagToContentRule; import org.sitemesh.tagprocessor.State; /** * Created by Erma on 2017/4/13. */ public class MySiteMeshFilter implements TagRuleBundle { public void install(State state, ContentProperty contentProperty, SiteMeshContext siteMeshContext) { state.addRule("myTag", new ExportTagToContentRule(siteMeshContext,contentProperty.getChild("myTag"),false)); } public void cleanUp(State state, ContentProperty contentProperty, SiteMeshContext siteMeshContext) { } }
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title> <sitemesh:write property='title'/> </title> <sitemesh:write property='head'/> </head> <body> 我是装饰器 : title的内容在这里 ~ <sitemesh:write property='title'/><br/> 我是装饰器 : body的内容在这里 ~ <sitemesh:write property='body'/><br/> 我是装饰器 : myTag的内容在这里 ~ <sitemesh:write property='myTag'/><br/> </body> </html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>我是标题~</title> </head> <body> <myTag> 我是自定义的tag </myTag> 嗨喽嗨喽 ~ </body> </html>