Sitemesh 3 的使用及配置

本文介绍Sitemesh3框架的使用与配置方法,包括如何下载安装、在web.xml中配置过滤器、创建并装饰页面等内容。此外还详细介绍了sitemesh3.xml配置文件的各项参数及其作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Sitemesh 3 的使用及配置

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:

<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 . 准备两个页面:demo.html 和 decorator.html

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

<!DOCTYPEhtml>
<html>
    <head>
        <title>内容页的标题</title>
    </head>
    <body>
    内容页的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 .sitemesh配置方式

1)使用xml的配置方式:

添加 /WEB-INF/sitemesh3.xml

<?xmlversion="1.0"encoding="UTF-8"?>
<sitemesh>
    <!--指明满足“/*”的页面,将被“/WEB-INF/views/decorators/decorator.html”所装饰-->
    <mappingpath="/*"decorator="/WEB-INF/views/decorators/decorator.html"/>

    <!--指明满足“/exclude.jsp*”的页面,将被排除,不被装饰-->
    <mappingpath="/exclude.jsp*"exclue="true"/>
</sitemesh>

2)使用java代码的配置方式

java常用公共配置方式:

publicclassMySiteMeshFilterextendsConfigurableSiteMeshFilter{
    @Override
    protectedvoidapplyCustomConfiguration(SiteMeshFilterBuilder builder){
        //Mapdefaultdecorator.Thisshallbeappliedtoallpathsifnootherpathsmatch.
        builder.addDecoratorPath("/*","/default-decorator.html")
        //Mapdecoratorstopathpatterns.
        .addDecoratorPath("/admin/*","/another-decorator.html")
        .addDecoratorPath("/*.special.jsp","/special-decorator.html")
        //Mapmultipledecoratorstotheasinglepath.
        .addDecoratorPaths("/articles/*","/decorators/article.html",
        "/decoratos/two-page-layout.html",
        "/decorators/common.html")
        //Excludepathfromdecoration.
        .addExcludedPath("/javadoc/*")
        .addExcludedPath("/brochures/*");
    }
}

Note: If you also have an XML config file, SiteMesh will load this before calling applyCustomConfiguration(). This allows you to use XML for some configuration and Java for more advanced aspects.
注意:如果你同时拥有xml配置文件,sitemesh将会在调用applyCustomConfiguration() 前优先加载它。这种方式可以帮助你使用xml完成某些配置,然后使用java完成更高级的层面的配置

6 . 运行效果

访问 demo.html 页面,实际效果如下:
这里写图片描述

7 . sitemesh3.xml 配置详解

<sitemesh>
    <!--默认情况下,
    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>
    ...

    <!--默认装饰器,当下面的路径都不匹配时,启用该装饰器进行装饰-->
    <mappingdecorator="/default-decorator.html"/>

    <!--对不同的路径,启用不同的装饰器-->
    <mappingpath="/admin/*"decorator="/another-decorator.html"/>
    <mappingpath="/*.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>

    <!--排除,不进行装饰的路径-->
    <mappingpath="/javadoc/*"exclue="true"/>
    <mappingpath="/brochures/*"exclue="true"/>

    <!--自定义tag规则-->
    <content-processor>
        <tag-rule-bundleclass="com.something.CssCompressingBundle"/>
        <tag-rule-bundleclass="com.something.LinkRewritingBundle"/>
    </content-processor>
    ...

</sitemesh>

8 . 自定义 tag 规则

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

publicclassMyTagRuleBundleimplementsTagRuleBundle{
    @Override
    publicvoidinstall(State defaultState,ContentProperty contentProperty
    ,SiteMeshContext siteMeshContext){
      defaultState.addRule("myHeader",
      newExportTagToContentRule(contentProperty.getChild("myHeader"),false));

    }

    @Override
    publicvoidcleanUp(State defaultState,ContentProperty contentProperty,
    SiteMeshContext siteMeshContext){
    }
}

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

<content-processor>
     <tag-rule-bundle class="com.lt.common.ext.sitemesh3.MyTagRuleBundle" />
 </content-processor>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值