Sitemesh 3 的使用及配置

1 . Sitemesh 3 简介

Sitemesh(网页布局和修饰的框架) 是一个基于Web网页布局和装饰以及与现存Web应用整合的框架,它能够帮助我们在由大量页面构成的项目中创建一致的页面布局和外观,如一致的导航栏,一致的版权,它能处理动态和静态的页面,基于
Servlet 中的 Filter,即过滤流。它是通过截取response,并进行装饰后再交付给客户,sitemesh运行环境需要:servlet,
JDK 。

参考:百度百科,相关类似技术:Apache
Tiles

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

2 . Sitemesh 3 下载

最新版本:3.0.1-SNAPSHOT

Current version: 3.0.1

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

Available for download on Maven Central here:

http://central.maven.org/maven2/org/sitemesh/sitemesh/3.0.1/

② maven:

1 <dependency>
2   <groupId>org.sitemesh</groupId>
3   <artifactId>sitemesh</artifactId>
4   <version>3.0.1</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>
时间: 2024-10-22 11:55:04

Sitemesh 3 的使用及配置的相关文章

SiteMesh在项目中的配置

SiteMesh在项目中的配置 首先在web.xml里面增加siteMesh的配置: <filter> <filter-name>sitemesh</filter-name> <filter-class> com.opensymphony.module.sitemesh.filter.PageFilter </filter-class> </filter> <filter-mapping> <filter-name&

sitemesh

Sitemesh 3 的使用及配置 http://www.cnblogs.com/luotaoyeah/p/3776879.html 老版本的: http://blog.csdn.net/bluishglc/article/details/5969905 http://www.blogjava.net/gdufo/archive/2008/08/04/219996.html

springMvc sitemesh freemarker 整合总结

前言 由于个人喜欢springmvc对restful支持的完美,再加上配置简单和与spring的天然集成,故项目打算用springMvc; freemarker 尽管网上有众多评测,言之性能不挤,但对于我们项目的的环境而言是足够的,再加上其丰富的内建函数与指令,亦十分的方便; 至于sitemesh,简单的配置,对于中小型项目亦足够; 配置 先说web.xml,配置如下: <context-param> <param-name>contextConfigLocation</pa

sitemesh3.0的配置以及在静态html中的使用

sitemesh3配置.md 引言 白天的时候一直想使用sitemesh来整合spring mvc+velocity+mybatis架构,但是在度娘搜了很久都没搜到想要的资料,同时sitemesh官网又被伟大的GFW给屏蔽了(反正VPN之前我是经常访问不了),因此搞了好几个小时都没搞明白究竟如何在velocity中使用sitemesh来装饰我的页面.于是乎,晚上借着vpn的由头总算在google上很快搜到了想要的资料.Wiki中的资料很全,不过是英文版的,因此本文中的叙述会将原文档的一部分做一些

SiteMesh3整合SpringMVC+FreeMarker

SiteMesh3配置 添加maven依赖 添加filter 配置servlet 添加sitemesh配置文件 decorator示例 SpringMVC.FreeMarker配置(404问题处理) decorate源码 SiteMesh3文档 http://wiki.sitemesh.org/wiki/pages/viewpage.action?pageId=1081348 重新搭建项目偶然发现SiteMesh有了新版本SiteMesh3,本着用新不用旧原则果断升级,多少遇了点坑,顺便记录下

sitemesh2.x+velocity+springmvc乱码解决方案

sitemesh2.x+velocity乱码解决方案.md 引言 通常我们在采用springmvc+velocity架构的时候只需要跳转到action然后在转回html页面,此时即可通过velocity的固有语法在html中取出各种变量.当当我们想在以上的架构中加入sitemesh2.x 的时候会发现配置装饰页面时采用action会出现一些错误,而只能直接使用.vm来配置装饰器页面,可是这样直接跳转的做法很多时候会出现一些乱码问题. 正文 有人会说,可以在velocity的配置文件中加入字符集设

SiteMesh, SpringMVC, Shiro 配置

1. 首先在在web.xml文件中,加入SiteMesh和shiro的过滤器,保证SiteMesh的过滤器配置放在shiro的过滤器后面,不然的话,shiro的标签不能正确处理. <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.

使用 sitemesh/decorator装饰器装饰jsp页面(原理及详细配置)

摘要:首先这个Decorator解释一下这个单词:“装饰器”,我觉得其实可以这样理解,他就像我们用到的Frame,他把每个页面共有的东西提炼了出来,也可能我们也会用各种各样的include标签,将我们的常用页面给包括进来:比如说页面的top,bottom这些每个页面几乎都有,而且都一样,如果我们在每个页面都include,可以发现我们的程序有很多冗余,重复.相比之下装饰器给我们提供了一个较好的选择,他在你要显示的页面根本看不出任何include信息,可以说完全解耦. 一.SiteMesh介绍 S

Sitemesh 3使用及配置

1:Sitemesh简介 SiteMesh是一个网页布局和修饰的框架,利用它可以将网页的内容和页面结构分离,以达到页面结构共享的目的. SiteMesh是基于Servlet的filter的,即过滤流.它是通过截取response,并进行装饰后再交付给客户. 其中涉及到两个名词: 装饰页面(decorator page)和 "被装饰页面(Content page)" , 即 SiteMesh通过对Content Page的装饰,最终得到页面布局和外观一致的页面,并返回给客户. Sitem