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>