一 简单介绍

  • sitemesh是一种模板框架,是为了解决页面重复代码而设计的
  • sitemesh的设计思想是装饰者设计模式

二 简单使用

目录结构,因为我这个项目本来是用来学习flowable的,后面为了方便快速学习,直接把sitemesh集成到这里了,读者只需关心下方红框的文件即可

  1. 引用依赖(由于springboot默认使用的是themeleaf,不支持使用jsp,所以我们需要引入相关支持jsp的依赖,因为公司用的jsp,所以这里也是用jsp进行演示)
      <dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><scope>provided</scope></dependency><!--用于编译jsp--><dependency><groupId>org.apache.tomcat.embed</groupId><artifactId>tomcat-embed-jasper</artifactId><!--<scope>provided</scope>--></dependency><!-- 支持jsp结果 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><scope>provided</scope></dependency><dependency><groupId>org.sitemesh</groupId><artifactId>sitemesh</artifactId><version>3.0.0</version></dependency>
  1. 编写过滤器
    过滤器的作用:拦截所有的请求,默认通过读取/WEB-INF/sitemesh3.xml的方式来进行配置,当然也可以通过写java代码进行配置(后面讲到)
import org.sitemesh.config.ConfigurableSiteMeshFilter;
import org.springframework.context.annotation.Configuration;
import javax.servlet.annotation.WebFilter;@Configuration
@WebFilter(filterName="SitemeshFilter",urlPatterns="/*")
public class SitemeshFilter extends ConfigurableSiteMeshFilter {
}

附:ConfigurableSiteMeshFilter 部分代码

  1. 编写resources/application.yml文件
spring:mvc:view:prefix: /WEB-INF/app-jsp/suffix: .jsp
  1. 编写sitemesh3.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<sitemesh><!-- 默认装饰器,当下面的路径都不匹配时,启用该装饰器进行装饰 --><mapping decorator="/WEB-INF/app-jsp/decorators/header.jsp"/><!-- 排除,不进行装饰的路径 --><mapping path="/login" exclue="true"/><mapping path="/" exclue="true"/><!-- 对不同的路径,启用不同的装饰器 --><mapping path="/main" decorator="/WEB-INF/app-jsp/decorators/default.jsp" />
<!-- <mapping path="/decoratorsTest" decorator="/WEB-INF/app-jsp/decorators/decorators-test.jsp" />--><!-- 对不同的路径,使用同一个装饰器 --><mapping decorator="/WEB-INF/app-jsp/decorators/header.jsp"><path>/decoratorsTest2</path><path>/decoratorsTest3</path>
<!--     <decorator>/WEB-INF/app-jsp/decorators/header.jsp</decorator>--></mapping><!-- 对同一路径,启用多个装饰器 --><!-- 注意事项:当需要对同一个路径配置多个装饰器时,会从上往下进行装饰,也就是先使用default.jsp进行装饰,然后把装饰后的default.jsp的body作为整体被装饰的内容,再通过decorators-test.jsp进行装饰--><mapping path="/testHb">
<!--     <path>/testHb/*</path>--><decorator>/WEB-INF/app-jsp/decorators/default.jsp</decorator><decorator>/WEB-INF/app-jsp/decorators/decorators-test.jsp</decorator></mapping><!-- Sitemesh3 默认只提供了 body,title,head 等 tag 类型,我们可以通过实现 TagRuleBundle 扩展自定义的 tag 规则 --><content-processor><tag-rule-bundle class="com.yzy.flowable.sitemesh.decorators.DecoratorsTag" /></content-processor><!-- 使用自定义的tag --><mapping path="/decoratorsTest4" decorator="/WEB-INF/app-jsp/decorators/myTagTest.jsp" /></sitemesh>
  1. 编写SitemeshController,新增访问路径login
 @RequestMapping("login")public String login(){return "login";}
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head><title>登录页</title>
</head>
<body><h1>我是登录页面</h1>
</body>
</html>

对应sitemesh3.xml文件,访问路径为/login时,不进行装饰.
页面效果:

  1. 编写SitemeshController,新增访问路径main
    @RequestMapping("main")public String main(){return "main";}
main.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head><title>主页面</title>
</head>
<body><h1>我是主页面</h1>
</body>
</html>

对应sitemesh3.xml文件,访问路径为/main时,进行装饰.

default.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head><title><sitemesh:write property='title'/></title>
</head>
<body><h3>我是默认的页面</h3><hr>插入的内容:<br><sitemesh:write property='body'/><br/></body>
</html>
页面效果

分析:因为对/main进行了过滤,main.jsp的<title>和<body>内容被抽取出来,填充到default.jsp对应的位置上,最后,浏览器渲染的是default.jsp的内容

  1. 装饰器其它的配置参考sitemesh3.xml文件
不同的路径,使用同一个装饰器 或者 同一路径,启用多个装饰器等
  1. 自定义tag,参考sitemesh3.xml
  <!-- Sitemesh3 默认只提供了 body,title,head 等 tag 类型,我们可以通过实现 TagRuleBundle 扩展自定义的 tag 规则 --><content-processor><tag-rule-bundle class="com.yzy.flowable.sitemesh.decorators.DecoratorsTag" /></content-processor><!-- 使用自定义的tag --><mapping path="/decoratorsTest4" decorator="/WEB-INF/app-jsp/decorators/myTagTest.jsp" />
编写DecoratorsTag.java文件
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 DecoratorsTag implements TagRuleBundle {@Overridepublic void install(State state, ContentProperty contentProperty, SiteMeshContext siteMeshContext) {state.addRule("myBody", new ExportTagToContentRule(siteMeshContext,contentProperty.getChild("myBody"), false));}@Overridepublic void cleanUp(State state, ContentProperty contentProperty, SiteMeshContext siteMeshContext) {}
}

修改main.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head><title>主页面</title>
</head>
<body><h1>我是主页面</h1><myBody>我是自定义标签</myBody>
</body>
</html>
myTagTest.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head><title><sitemesh:write property='title'/></title>
</head>
<body><h3>我是头部</h3><hr>插入的内容:<br><sitemesh:write property='myBody'/><br/><!-- 引进尾部 --><jsp:include page="footer.jsp"></jsp:include>
</body>
</html>
页面效果

可知:myTagTest.jsp在进行装饰main.jsp时,只抽取了<myBody>标签的内容

以上就是sitemesh的简单用法,也足够了

sitemesh框架的简单使用(springboot+maven+jsp+sitemesh)相关推荐

  1. Java项目:在线课程会员系统(java+Springboot+Maven+JSP+Spring+Mysql+layui)

    一.项目简述 功能包括: 用户管理,课程管理,在线视频观看,评论,会员展示,会员充值等等. 二.项目运行 环境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe(Inte ...

  2. 基于华为云obs实现文件上传下载(技术栈mysql+springboot+Maven+jsp+java)的技术分享

    基于华为云obs实现文件上传下载(技术栈mysql+springboot+jsp+java)的技术分享 obs实现文件上传下载 前言 一.OBS是什么? 二.使用步骤 1.1 前期准备 2 工具的内容 ...

  3. eclipse maven项目 class类部署不到tomcat下_Springboot介绍以及用Eclipse搭建一个简单的Springboot项目教程

    简述 本文主要介绍Springboot以及用Eclipse搭建一个简单的Springboot项目. Springboot简介 Springboot是由Pivotal团队提供的全新框架,其设计目的是用来 ...

  4. SpringBoot框架实现简单业务逻辑

    SpringBoot框架实现简单业务逻辑 总述 Entity层 Dao层 Mapper.xml Service层 ServiceImpl Controller层 完整的业务逻辑实现写法示例 Dao层声 ...

  5. SpringBoot使用Jsp

    本文是简单总结一下SpringBoot使用Jsp的Demo. 前言 在早期做项目的时候,JSP是我们经常使用的java服务器页面,其实就是一个简化servlet的设计,在本文开始之前,回顾一下jsp的 ...

  6. jeesite 框架的简单应用

    jeesite 框架的简单应用 一个讲解jeesite的网站 https://www.w3cschool.cn/jeesite/ jeesite官网 http://jeesite.com/ 公司项目都 ...

  7. 第二章:SpringBoot与JSP间不可描述的秘密

    springboot内部对jsp的支持并不是特别理想,而springboot推荐的视图是Thymeleaf,对于java开发人员来说还是大多数人员喜欢使用jsp,接下来我们来讲解下springboot ...

  8. java 简单 框架_java简单框架设计

    设计框架包可以作为一个工具给大家用,需要有完全不同设计思路给出来,不同于我们去做一个web服务.网站. 或者一个业务微服务,需要从原来使用视角转换成一个构建者视角. 框架或者工具,更多是框架来管理或者 ...

  9. 2022-12-08 SSM项目转springboot整合jsp

    目录 1.添加springboot相关pom依赖 2.Springboot整合jsp 2.1.使用打jar包方式执行 2.2.打war包执行 3.多数据源xml文件配置提取 3.1.数据源bean提取 ...

  10. Java项目:宠物商城系统(java+Springboot+Maven+mybatis+Vue+mysql)

    源码获取:博客首页 "资源" 里下载! 一.项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclis ...

最新文章

  1. fckeditor 数据库 取值 显示
  2. WebServices 简介
  3. K8S完整部署项目实战案例
  4. 定时任务四种实现方式
  5. 程序观点下的线性代数
  6. html匹配属性正则表达式,正则表达式匹配html标签的属性值
  7. Delphi的MessageBox对话框使用
  8. 机器学习总结(一):线性回归、岭回归、Lasso回归
  9. 在vscode中使用opencv
  10. Google浏览器无法上网问题解决
  11. elixir元编程的quote与unquote
  12. css动画走马灯5秒,用animation制作走马灯
  13. 电影《小萝莉的猴神大叔》观后感
  14. 在Windows下安装和使用vim
  15. 基于观测器的T-S模糊系统故障分析simulink仿真
  16. Linux学习-Boot Loader: Grub2
  17. 计算机三级嵌入式开发技术总结
  18. 医学图像Dicom(.dcm)转换为NIFTI(.nii)格式
  19. Spring JdbcTemplate2-update和query
  20. C++ 性能优化篇二《影响优化的计算机行为》

热门文章

  1. 新手下载安装GitHub
  2. java生成word带多级标题,word自动生成多级标题的方法
  3. macOS devtools安装github包失败解决
  4. dmx512如何帧同步_stm32实现DMX512协议发送与接收(非标)
  5. raspberry pi4B ncnn cpu vulkan benchmark
  6. 攻防世界-WEB-新手-command_execution
  7. 简单sql存储过程实例、储过程实战
  8. 软考试题希赛网爬取过程分享一
  9. php wind8.5,PHPWind Forums下载
  10. Zint生成多种条码及二维码