What's SiteMesh?

1.SiteMesh介紹
  SiteMesh是一個網(wǎng)頁布局和修飾的框架蠕啄,利用它可以將網(wǎng)頁的內(nèi)容和頁面結(jié)構(gòu)分離,以達到頁面結(jié)構(gòu)共享的目的锄贼。[來自百度百科]
通俗的理解就是曲稼,SiteMesh把頁面中變化的和不變的分離開來,用不變的去裝飾各種變化的內(nèi)容待锈。從而使頁面具有統(tǒng)一的布局漠其,而且方便頁面的管理。不變的頁面稱之為裝飾頁面竿音,內(nèi)容變化的頁面稱之為被裝飾頁面和屎。 裝飾頁面一般包括:頁面標(biāo)題、頭部春瞬、底部柴信、主體以及公共的css、js宽气。 被裝飾頁面只需要寫它自己需要的內(nèi)容就可以了随常。

SiteMesh原理圖

2 . Sitemesh 3 下載
最新版本:3.0.0-SNAPSHOT
① GitHub 地址:https://github.com/sitemesh/sitemesh3
② maven:

<dependency>
    <groupId>org.sitemesh</groupId>
    <artifactId>sitemesh</artifactId>
    <version>3.0.0</version>
</dependency>

3 . 配置 Sitemesh 3 過濾器
在 web.xml 中添加 Sitemesh Filter:

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

4 . 準(zhǔn)備兩個頁面:demo.html 和 decorator.html

① demo.html - “被裝飾的頁面”潜沦,實際要呈現(xiàn)的內(nèi)容頁。

<!DOCTYPE html>
<html>
<head>
    <title>內(nèi)容頁的標(biāo)題</title>
</head>
<body>
    內(nèi)容頁的body部分
</body>
</html>

② decorator.html - “裝飾頁面”绪氛,所謂的“母版頁”唆鸡。

<!DOCTYPE html>
<html>
<head>
<title>
    <sitemesh:write property='title' /> - ltcms
</title>
<sitemesh:write property='head' />
</head>
<body>
    <header>header</header>
    <hr />
    demo.html的title將被填充到這兒:
    <sitemesh:write property='title' /><br />
    demo.html的body將被填充到這兒:
    <sitemesh:write property='body' />
    <hr />
    <footer>footer</footer>
</body>
</html>

5 . 添加 /WEB-INF/sitemesh3.xml

<?xml version="1.0" encoding="UTF-8"?>
<sitemesh>
    <!-- 指明滿足“/*”的頁面,將被“/WEB-INF/views/decorators/decorator.html”所裝飾 -->
    <mapping path="/*" decorator="/WEB-INF/views/decorators/decorator.html" />

    <!-- 指明滿足“/exclude.jsp*”的頁面枣察,將被排除争占,不被裝飾 -->
    <mapping path="/exclude.jsp*" exclue="true" />
</sitemesh>

6 . 運行效果

訪問 demo.html 頁面,實際效果如下:

Paste_Image.png

7 . sitemesh3.xml 配置詳解

<sitemesh>
    <!--默認情況下序目,
        sitemesh 只對 HTTP 響應(yīng)頭中 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>
  ...
  
  <!-- 默認裝飾器,當(dāng)下面的路徑都不匹配時猿涨,啟用該裝飾器進行裝飾 -->
  <mapping decorator="/default-decorator.html"/>
  
  <!-- 對不同的路徑握童,啟用不同的裝飾器 -->
  <mapping path="/admin/*" decorator="/another-decorator.html"/>
  <mapping path="/*.special.jsp" decorator="/special-decorator.html"/>

  <!-- 對同一路徑,啟用多個裝飾器 -->
  <mapping>
    <path>/articles/*</path>
    <decorator>/decorators/article.html</decorator>
    <decorator>/decorators/two-page-layout.html</decorator>
    <decorator>/decorators/common.html</decorator>
  </mapping>

  <!-- 排除嘿辟,不進行裝飾的路徑 -->
  <mapping path="/javadoc/*" exclue="true"/>
  <mapping path="/brochures/*" exclue="true"/>
  
  <!-- 自定義 tag 規(guī)則 -->
  <content-processor>
    <tag-rule-bundle class="com.something.CssCompressingBundle" />
    <tag-rule-bundle class="com.something.LinkRewritingBundle"/>
  </content-processor>
  ...

</sitemesh>

8 . 自定義 tag 規(guī)則
Sitemesh 3 默認只提供了 body舆瘪,title,head 等 tag 類型红伦,我們可以通過實現(xiàn) TagRuleBundle 擴展自定義的 tag 規(guī)則:

public class MyTagRuleBundle implements TagRuleBundle {
    @Override
    public void install(State defaultState, ContentProperty contentProperty,
            SiteMeshContext siteMeshContext) {
        defaultState.addRule("myHeader", new ExportTagToContentRule(contentProperty.getChild("myHeader"), false));
        
    }
    
    @Override
    public void cleanUp(State defaultState, ContentProperty contentProperty,
            SiteMeshContext siteMeshContext) {
    }
}

最后在 sitemesh3.xml 中配置即可:

<content-processor>
    <tag-rule-bundle  class="com.lt.common.ext.sitemesh3.MyTagRuleBundle" />
</content-processor>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末英古,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子昙读,更是在濱河造成了極大的恐慌召调,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,080評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蛮浑,死亡現(xiàn)場離奇詭異唠叛,居然都是意外死亡,警方通過查閱死者的電腦和手機沮稚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,422評論 3 385
  • 文/潘曉璐 我一進店門艺沼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蕴掏,你說我怎么就攤上這事障般。” “怎么了盛杰?”我有些...
    開封第一講書人閱讀 157,630評論 0 348
  • 文/不壞的土叔 我叫張陵挽荡,是天一觀的道長。 經(jīng)常有香客問我即供,道長定拟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,554評論 1 284
  • 正文 為了忘掉前任逗嫡,我火速辦了婚禮青自,結(jié)果婚禮上株依,老公的妹妹穿的比我還像新娘。我一直安慰自己性穿,他們只是感情好勺三,可當(dāng)我...
    茶點故事閱讀 65,662評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著需曾,像睡著了一般吗坚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上呆万,一...
    開封第一講書人閱讀 49,856評論 1 290
  • 那天商源,我揣著相機與錄音,去河邊找鬼谋减。 笑死牡彻,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的出爹。 我是一名探鬼主播庄吼,決...
    沈念sama閱讀 39,014評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼严就!你這毒婦竟也來了总寻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,752評論 0 268
  • 序言:老撾萬榮一對情侶失蹤梢为,失蹤者是張志新(化名)和其女友劉穎渐行,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體铸董,經(jīng)...
    沈念sama閱讀 44,212評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡祟印,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,541評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了粟害。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蕴忆。...
    茶點故事閱讀 38,687評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖悲幅,靈堂內(nèi)的尸體忽然破棺而出孽文,到底是詐尸還是另有隱情,我是刑警寧澤夺艰,帶...
    沈念sama閱讀 34,347評論 4 331
  • 正文 年R本政府宣布,位于F島的核電站沉衣,受9級特大地震影響郁副,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜豌习,卻給世界環(huán)境...
    茶點故事閱讀 39,973評論 3 315
  • 文/蒙蒙 一存谎、第九天 我趴在偏房一處隱蔽的房頂上張望拔疚。 院中可真熱鬧,春花似錦既荚、人聲如沸稚失。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,777評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽句各。三九已至,卻和暖如春晴叨,著一層夾襖步出監(jiān)牢的瞬間凿宾,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,006評論 1 266
  • 我被黑心中介騙來泰國打工兼蕊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留初厚,地道東北人。 一個月前我還...
    沈念sama閱讀 46,406評論 2 360
  • 正文 我出身青樓孙技,卻偏偏與公主長得像产禾,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子牵啦,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,576評論 2 349

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理亚情,服務(wù)發(fā)現(xiàn),斷路器蕾久,智...
    卡卡羅2017閱讀 134,633評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,806評論 25 707
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法势似,類相關(guān)的語法,內(nèi)部類的語法僧著,繼承相關(guān)的語法履因,異常的語法,線程的語...
    子非魚_t_閱讀 31,598評論 18 399
  • 今天改前人做的項目盹愚,用struts2栅迄,spring,hibernate框架做的皆怕,對了毅舆,還有jquery。我用jqu...
    JingBeibei閱讀 685評論 0 2
  • 2017年6月14 這幾天工作強度太大了愈腾,昨天晚上哄孩子睡覺一不小心自己睡著了憋活,工作到了最忙的時候,業(yè)績也到了不得...
    妮可兒5288閱讀 303評論 0 0