• Sitemesh 3


    Sitemesh 3 的使用及配置(收藏自:http://www.cnblogs.com/luotaoyeah/p/3776879.html)


    1 . Sitemesh 3 简介

    Sitemesh 是一个网页布局和修饰的框架,基于 Servlet 中的 Filter,类似于 ASP.NET 中的‘母版页’技术。参考:百度百科,相关类似技术:Apache Tiles。

    官网:http://wiki.sitemesh.org/wiki/display/sitemesh/Home 。

    2 . Sitemesh 3 下载

    最新版本:3.0.0-SNAPSHOT

    ① GitHub 地址:https://github.com/sitemesh/sitemesh3

    ② maven:

    1 <dependency>
    2 <groupId>org.sitemesh</groupId>
    3 <artifactId>sitemesh</artifactId>
    4 <version>3.0.0</version>
    5 </dependency>
    3 . 配置 Sitemesh 3 过滤器

    在 web.xml 中添加 Sitemesh Filter:

    复制代码
    1 <web-app>
    2
    3 ...
    4
    5 <filter>
    6 <filter-name>sitemesh</filter-name>
    7 <filter-class>org.sitemesh.config.ConfigurableSiteMeshFilter</filter-class>
    8 </filter>
    9 <filter-mapping>
    10 <filter-name>sitemesh</filter-name>
    11 <url-pattern>/*</url-pattern>
    12 </filter-mapping>
    13
    14 </web-app>
    复制代码
    4 . 准备两个页面:demo.html 和 decorator.html

    ① demo.html - “被装饰的页面”,实际要呈现的内容页。

    复制代码
    1 <!DOCTYPE html>
    2 <html>
    3 <head>
    4 <title>内容页的标题</title>
    5 </head>
    6 <body>
    7 内容页的body部分
    8 </body>
    9 </html>
    复制代码
    ② decorator.html - “装饰页面”,所谓的“母版页”。

    复制代码
    1 <!DOCTYPE html>
    2 <html>
    3 <head>
    4 <title>
    5 <sitemesh:write property='title' /> - ltcms
    6 </title>
    7 <sitemesh:write property='head' />
    8 </head>
    9 <body>
    10 <header>header</header>
    11 <hr />
    12 demo.html的title将被填充到这儿:
    13 <sitemesh:write property='title' /><br />
    14 demo.html的body将被填充到这儿:
    15 <sitemesh:write property='body' />
    16 <hr />
    17 <footer>footer</footer>
    18 </body>
    19 </html>
    复制代码
    5 . 添加 /WEB-INF/sitemesh3.xml

    复制代码
    1 <?xml version="1.0" encoding="UTF-8"?>
    2 <sitemesh>
    3 <!-- 指明满足“/*”的页面,将被“/WEB-INF/views/decorators/decorator.html”所装饰 -->
    4 <mapping path="/*" decorator="/WEB-INF/views/decorators/decorator.html" />
    5
    6 <!-- 指明满足“/exclude.jsp*”的页面,将被排除,不被装饰 -->
    7 <mapping path="/exclude.jsp*" exclue="true" />
    8 </sitemesh>
    复制代码
    6 . 运行效果

    访问 demo.html 页面,实际效果如下:

    7 . sitemesh3.xml 配置详解

    复制代码
    1 <sitemesh>
    2 <!--默认情况下,
    3 sitemesh 只对 HTTP 响应头中 Content-Type 为 text/html 的类型进行拦截和装饰,
    4 我们可以添加更多的 mime 类型-->
    5 <mime-type>text/html</mime-type>
    6 <mime-type>application/vnd.wap.xhtml+xml</mime-type>
    7 <mime-type>application/xhtml+xml</mime-type>
    8 ...
    9
    10 <!-- 默认装饰器,当下面的路径都不匹配时,启用该装饰器进行装饰 -->
    11 <mapping decorator="/default-decorator.html"/>
    12
    13 <!-- 对不同的路径,启用不同的装饰器 -->
    14 <mapping path="/admin/*" decorator="/another-decorator.html"/>
    15 <mapping path="/*.special.jsp" decorator="/special-decorator.html"/>
    16
    17 <!-- 对同一路径,启用多个装饰器 -->
    18 <mapping>
    19 <path>/articles/*</path>
    20 <decorator>/decorators/article.html</decorator>
    21 <decorator>/decorators/two-page-layout.html</decorator>
    22 <decorator>/decorators/common.html</decorator>
    23 </mapping>
    24
    25 <!-- 排除,不进行装饰的路径 -->
    26 <mapping path="/javadoc/*" exclue="true"/>
    27 <mapping path="/brochures/*" exclue="true"/>
    28
    29 <!-- 自定义 tag 规则 -->
    30 <content-processor>
    31 <tag-rule-bundle class="com.something.CssCompressingBundle" />
    32 <tag-rule-bundle class="com.something.LinkRewritingBundle"/>
    33 </content-processor>
    34 ...
    35
    36 </sitemesh>
    复制代码
    8 . 自定义 tag 规则

    Sitemesh 3 默认只提供了 body,title,head 等 tag 类型,我们可以通过实现 TagRuleBundle 扩展自定义的 tag 规则:

    复制代码
    1 public class MyTagRuleBundle implements TagRuleBundle {
    2 @Override
    3 public void install(State defaultState, ContentProperty contentProperty,
    4 SiteMeshContext siteMeshContext) {
    5 defaultState.addRule("myHeader", new ExportTagToContentRule(contentProperty.getChild("myHeader"), false));
    6
    7 }
    8
    9 @Override
    10 public void cleanUp(State defaultState, ContentProperty contentProperty,
    11 SiteMeshContext siteMeshContext) {
    12 }
    13 }
    复制代码
    最后在 sitemesh3.xml 中配置即可:

    1 <content-processor>
    2 <tag-rule-bundle class="com.lt.common.ext.sitemesh3.MyTagRuleBundle" />
    3 </content-processor>

  • 相关阅读:
    作业五:RE 模块模拟计算器
    python RE模块的使用
    python的命名空间
    python 正则表达式
    python-map的用法
    JavaScript 基础学习1-day14
    前端基础之CSS-Day13
    前端基础之html-Day12
    Python-进程与线程理论基础-Day10
    Angular2语法指南
  • 原文地址:https://www.cnblogs.com/LvLoveYuForever/p/5676683.html
Copyright © 2020-2023  润新知