Sitemesh 3 配置和使用(最新)
Sitemesh 3 配置和使用(最新)
一 Sitemesh简介
- Sitemesh是一个页面装饰器,可以快速的创建有统一外观Web应用 -- 导航 加 布局 的统一方案~
- Sitemesh可以拦截任何动态或则静态的HTML页面的请求,Sitemesh处理后把一个或多个装饰器组装成最后结果返回
- Sitemesh可以把一个大页面分成很多小的页面来布局

Sitemesh官网简介图片简单明了,一目了然 .. welcome Page和search Page包含两部分 Meta-Data 和 Body-Content , 通过装饰器后被装饰返回一个最终的页面 final pages.
官网 : http://wiki.sitemesh.org/wiki/display/sitemesh3/Home
二 Maven中使用Sitemesh 3
在Maven工程的Pom中添加依赖 ~
<dependency>
    <groupId>org.sitemesh</groupId>
    <artifactId>sitemesh</artifactId>
    <version>3.0.0</version>
</dependency>
三 在web.xml中配置Sitemesh 3 拦截器
<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 的配置
sitemesh 3 有两种配置方式 XML和Java
1 XML配置详解
添加一个 ~ /WEB-INF/sitemesh3.xml
<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>
4 Java的配置方式
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());
    }
}
五 Sitemesh 3 的使用
下面是使用 intellij + Maven + Sitemsehxml的配置方式的一个使用
1 配置Maven的pom 和web.xml按照上面的方式
2 配置sitemseh.xml
<sitemesh>
    <!-- 拦截任何路径配置装饰器 -->
    <mapping path="/*" decorator="/WEB-INF/jsp/layouts/decorator.jsp"/>
    <!-- 这里配置自定义的tag -->
    <content-processor>
        <tag-rule-bundle class="com.erma.common.MySiteMeshFilter"/>
    </content-processor>
</sitemesh>
3 配置自定义的tag
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) {
    }
}
4 配置模板
<%@ 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>
5 home.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>我是标题~</title>
</head>
<body>
<myTag>
    我是自定义的tag
</myTag>
嗨喽嗨喽 ~
</body>
</html>
6 效果

Sitemesh 3 配置和使用(最新)的更多相关文章
- Cassandra概念学习系列之Windows里下载且安装配置Cassandra(最新的3.11.1版本)(图文详解)
		不多说,直接上干货! 最近我开始在windows环境中使用Cassandra,虽然在Cassandra站点的安装命令非常清楚和精简,我仍然在环境配置上遇到一些问题.所以我想为后来者分享下我的经验. ... 
- SpringBoot第二集:注解与配置(2020最新最易懂)
		2020最新SpringBoot第二集:基础注解/基础配置(2020最新最易懂) 一.Eclipse安装SpringBoot插件 Eclipse实现SpringBoot开发,为便于项目的快速构建,需要 ... 
- mongodb 3.0下载安装、配置及mongodb最新特性、基本命令教程详细介绍
		mongoDB简介(本文由www.169it.com搜集整理) MongoDB是一个高性能,开源,无模式的文档型数据库,是目前在IT行业非常流行的一种非关系型数据库(NoSql).它在许多场景下可用于 ... 
- 为pc编译配置安装当前最新的内核
		搜索公众号:itxxgh (IT学习干货),全公益.免费.定期,提供,<IT学习教程>.不会骚扰大家,仅仅需轻点关注,也会传播<中华传统文化>传播正能量. 或扫描二维码 1 ... 
- 配置友盟最新SDK遇到的问题
		编译报错 Undefined symbols for architecture i386:原因:i386是代表模拟器,显示i386错误说明静态库不支持模拟器,只支持真机.友盟最新SDK可能不支持模拟 ... 
- 配置Orchard Core 最新的包资源
		添加预览包源 在本文中,我们将添加一个指向预览包的新包源. 与从主分支构建的NuGet上的代码相比,每次在dev分支上提交一些代码时都会构建预览包. 它们是最新的版本,但不是最稳定的,可以包含突破性的 ... 
- JDK下载安装与环境变量配置【全网最新】
		1.下载安装JDK 下载地址:(https://www.oracle.com/java/technologies/downloads/) 最好选择解压版,解压即可(说删就删) 解压:例如我解压目录为 ... 
- 使用 sitemesh/decorator装饰器装饰jsp页面(原理及详细配置)
		摘要:首先这个Decorator解释一下这个单词:“装饰器”,我觉得其实可以这样理解,他就像我们用到的Frame,他把每个页面共有的东西提炼了出来,也可能我们也会用各种各样的include标签,将我们 ... 
- SiteMesh在项目中的配置
		SiteMesh在项目中的配置 首先在web.xml里面增加siteMesh的配置: <filter> <filter-name>sitemesh</filter-nam ... 
随机推荐
- springmvc 获取request 和 java路径分隔符 在windows 和linux 下自动判断的方法
			//获取requert HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestA ... 
- Linux JDK 的安装卸载
			用root用户登陆到系统,打开一个终端输入 # rpm -qa|grep gcj显示内容其中包含下面两行信息# java-1.4.2-gcj-compat-1.4.2.0-27jpp# java-1. ... 
- 每天一个linux命令(46)--rcp命令
			rcp代表“remote file copy”(远程文件拷贝).该命令用于在计算机之间拷贝文件.rcp命令有两种格式.第一种格式用于文件到文件的拷贝,第二种格式用于文件或目录拷贝到另一个目录中. 1. ... 
- Memcached【第二篇】高可用集群搭建
			第一步:准备 1. 架构信息 利用 magent 搭建 memcached 集群,实现性能的高可用. IP Port 主从 192.168.6.129 11211 主节点 192.168.6.130 ... 
- thinkphp join加别名
			//此段代码在某个Model里面$tbpre = $this->tableprefix;$Aaa = M('aaa');$Aaa->table(array("{$tbpre}aa ... 
- AR入门系列-05-Vuforia识别目标视频播放
			在识别目标后播放视频我们需要一个插件 Easy Movie Texture 2.36.unitypackage 百度网盘下载地址:http://pan.baidu.com/s/1skT8Xp7 将Ea ... 
- lucene倒排索引缓冲池的细节
			倒排索引要存哪些信息 提到倒排索引,第一感觉是词到文档列表的映射,实际上,倒排索引需要存储的信息不止词和文档列表.为了使用余弦相似度计算搜索词和文档的相似度,需要计算文档中每个词的TF-IDF值, ... 
- html to pdf
			C++ Library to Convert HTML to PDF html2pdf PrinceXML 收费 CutePDF Ghostscript PDFDoc VisPDF PDFDoc Sc ... 
- python list 切片实验
			list[start:stop:step] >>> a_list=['hito','bb','cc','dd','ee','ff']>>> a_list[::-1] ... 
- 用JavaScript和jQuery实现瀑布流
			▓▓▓▓▓▓ 大致介绍 在慕课网上学习了用原生js和jQuery实现瀑布流,在这里做个笔记 ▓▓▓▓▓▓ 用JavaScript实现 基本结构: <div id="main" ... 
