一、sitemesh介绍

sitemesh是一种装饰器,是由一个基于Web页面布局、装饰及与现存Web应用整合的框架,类似于模板页的概念,可以整合页面输出。

二、springboot 整合

整合过程其实比较简单

1、导入依赖

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

2、写配置

这里采用配置类的形式编写
先创建一个类 WebSiteMeshFilter 继承自 ConfigurableSiteMeshFilter
代码及详细说明如下:

import org.sitemesh.builder.SiteMeshFilterBuilder;
import org.sitemesh.config.ConfigurableSiteMeshFilter;public class WebSiteMeshFilter extends ConfigurableSiteMeshFilter {/*** 需要装饰的访问路径*/private String contentPath="/testhello";/*** 装饰页面的路径*/private String decoratorPath="/layouts";/*** 不需要装饰的路径*/private String excludedPaths="*,js,*.css,*.jpg";@Overrideprotected void applyCustomConfiguration(SiteMeshFilterBuilder builder){if(contentPath==null){return;}String[] contentPaths=contentPath.split(",");//添加装饰路径for (String path : contentPaths) {builder.addDecoratorPath(path, decoratorPath);}if (excludedPaths == null) {return;}String[] paths = excludedPaths.split(",");//添加不需要装饰的路径for (String path : paths) {builder.addExcludedPath(path);}//这里是添加自定义标签类builder.addTagRuleBundle(new ScriptTagRuleBundle());}
}

注意代码的最后一行,这里是添加了一个自定义标签,因为默认标签太少,如果在模板中想要实现内容页面中定义的自定义标签,可以通过这里添加,那么我们实现 ScriptTagRuleBundle这个自定义类

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;public class ScriptTagRuleBundle implements TagRuleBundle {@Overridepublic void install(State state, ContentProperty contentProperty, SiteMeshContext siteMeshContext) {state.addRule("myheader",new ExportTagToContentRule(siteMeshContext,contentProperty.getChild("myheader"), false));}@Overridepublic void cleanUp(State state, ContentProperty contentProperty, SiteMeshContext siteMeshContext) {}
}

接下来,需要将sitemesh作为bean来声明,就是需要配置

import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration
public class WebConfig implements WebMvcConfigurer {/*** 装饰器** @return 2016年8月27日下午12:37:20*/@Beanpublic FilterRegistrationBean siteMeshFilter() {FilterRegistrationBean fitler = new FilterRegistrationBean();WebSiteMeshFilter siteMeshFilter = new WebSiteMeshFilter();fitler.setFilter(siteMeshFilter);return fitler;}//这个方法是用来配置静态资源的@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry){registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");     }
}

上面代码是一个典型配置类,实现了WebMvcConfigurer 的原因是我们这里需要配置下不需要 装饰的内容还包括静态内容,比如我们放置在 static目录下的所有文件。

3、定义controller

可以看到,定义的模板的路径是/layouts 所以需要配置controller对应这个路径,映射到 下一步定义的模板文件上。

@RequestMapping("/layouts")
public String layouts( ){return "/layouts/default";
}

4、定义模板

我们在templates目录下创建目录layouts,并声明装饰页面,装饰页面我们同样用 freemarker来实现,就叫 default.ftl。这里可以看到,其实sitemesh只是一个配置的装饰类,没有规定具体页面格式,可以结合freemarker来实现。

<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3"><head><title>装饰器页面</title></head><body><h1>这是装饰页面头部分</h1>
<div id="content"><sitemesh:write property='body' /></div><h1>这是装饰页面foot部分</h1>
</body>
<sitemesh:write property='body' /><sitemesh:write property='myheader' />
</html>

这里只是简单的定义了头和尾,中间将会导入被装饰页面的 body标签,如果想导入被装饰页面的 myheader,只需要写上

 <sitemesh:write property=”myheader“ />

即可,这里我们输出了两遍 body,一遍myheader。
回到内容页面,就是之前定义的 hello.ftl,我们这里这样定义:

<!DOCTYPE html><html lang="en"><body>
<h1>Hello ${name}</h1>
</body>看看这里会不会输出 其他<myheader>看看这里会不会输出 myheader
</myheader>
</html>

看下结果:

可以看到,按照我们定义的装饰格式输出了内容。 而内容页中的

看看这里会不会输出 其他 ,这部分没有输出。

springboot集成sitemesh相关推荐

  1. Windows下安装Mongodb SpringBoot集成MongoDB和Redis多数据源

    全文内容: Mongodb安装 说明:Mongodb和redis是开发中常用的中间件,Redis的安装使用比较简单就不写了,只说本地也就是Windows安装Mongodb. SpringBoot集成M ...

  2. SpringBoot集成FreeMarker

    给大家简单介绍一下springboot 集成FreeMarker 过程很简单,5分钟即可. 首先在项目中增添依赖spring-boot-starter-freemarker pom文件代码如下: &l ...

  3. springboot集成swagger2测试接口

    springboot集成swagger2测试接口 1.需要的依赖 2.开始编写一个swagger2 3.演示效果图片 1.需要的依赖 <dependency><groupId> ...

  4. springboot 集成logback

    springboot 集成logback 1.application.properties配置文件指定logback.xml logging.config=classpath:logback.xml ...

  5. springboot集成swagger2多模块中文配置详细步骤,解决集成mybatis或mybatis-plus无法正常使用问题

    springboot集成swagger2多模块中文配置详细步骤,解决集成mybatis或mybatis-plus无法正常使用问题 参考文章: (1)springboot集成swagger2多模块中文配 ...

  6. SpringBoot集成Quartz(解决@Autowired空指针Null问题即依赖注入的属性为null)

    SpringBoot集成Quartz(解决@Autowired空指针Null问题即依赖注入的属性为null) 参考文章: (1)SpringBoot集成Quartz(解决@Autowired空指针Nu ...

  7. SpringBoot集成全局异常处理

    2019独角兽企业重金招聘Python工程师标准>>> SpringBoot集成全局异常处理 前言 对于通常的MVC项目,大量的异常需要我们去处理,如此一来,我们的 Controll ...

  8. dubbo web工程示例_dubbo实战之二:与SpringBoot集成

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类和汇总,及配套源码,涉及Java.Docker.Kubernetes.DevO ...

  9. php 配置文件加密工具类,SpringBoot集成Jasypt安全框架以及配置文件内容加密(代码示例)...

    本篇文章给大家带来的内容是关于SpringBoot集成Jasypt安全框架以及配置文件内容加密(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 我们在SpringBoot项 ...

最新文章

  1. Cognos配置oracle类型内容库时报错
  2. python 加注拼音-又一个奇葩要求,Python是如何将“中文”转“拼音”的?
  3. flask读取数据库(mysql)并展示表格(讲解获取表头的方法)【附上flask好看点的helloworld】
  4. Linux du指令
  5. 1.Docker的安装以及配置国内源
  6. 哦豁?这个程序员…… 有、东西!
  7. ubuntu自动保存git账号和密码
  8. Spring整合基础
  9. Android NDK之静态/动态注册Native方法
  10. Maven多模块打包
  11. SQL中的CASE使用方法
  12. 搭建nfs共享存储服务之三客户端配置
  13. 挑战性题目DSCT401:全源最短路径Floyd算法的并行实现
  14. 制作课件需要哪些软件
  15. 【科研】如何查看自己期刊是不是SCI/EI(含期刊各种信息查询)
  16. 计算机设置从光盘启动怎么办,[光盘启动]BIOS设置从光盘光驱启动教程
  17. xp系统计算机蓝屏,xp系统电脑一直蓝屏重启循环的原因和解决方法
  18. 如何强制关闭进程linux,4种强制关闭Ubuntu中无响应应用程序的方法
  19. 采用Java编写一个软件,100以内的口算题,加减运算,运算结果位于[0,100]区间内,要求自动生成题库,实现自动判分,自动生成成绩,并且有图形化CUI界面
  20. react render相关 【类组件、函数组件 】

热门文章

  1. 拉卡拉支付瞄准线下蓝海持续创新
  2. Python大数据综合应用 :零基础入门机器学习、深度学习算法原理与案例
  3. Android APP加固混淆案例分享(解决风险提示问题)
  4. Android KeyCode对照表
  5. 用Selenium进行百度搜索结果简单提取
  6. 送5本新出Spring Boot书籍!
  7. SVM对图片的分类 搬家
  8. explode函数mysql_PHP数组和explode函数示例总结
  9. Java的垃圾回收机制介绍
  10. r 连接 mysql sqldf_R语言︱ 数据库SQL-R连接与SQL语句执行(RODBC、sqldf包)