sitemesh框架的简单使用(springboot+maven+jsp+sitemesh)
一 简单介绍
- sitemesh是一种模板框架,是为了解决页面重复代码而设计的
- sitemesh的设计思想是装饰者设计模式
二 简单使用
目录结构,因为我这个项目本来是用来学习flowable的,后面为了方便快速学习,直接把sitemesh集成到这里了,读者只需关心下方红框的文件即可
- 引用依赖(由于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>
- 编写过滤器
过滤器的作用:拦截所有的请求,默认通过读取/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 部分代码
- 编写resources/application.yml文件
spring:mvc:view:prefix: /WEB-INF/app-jsp/suffix: .jsp
- 编写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>
- 编写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时,不进行装饰.
页面效果:
- 编写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的内容
- 装饰器其它的配置参考sitemesh3.xml文件
不同的路径,使用同一个装饰器 或者 同一路径,启用多个装饰器等
- 自定义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)相关推荐
- Java项目:在线课程会员系统(java+Springboot+Maven+JSP+Spring+Mysql+layui)
一.项目简述 功能包括: 用户管理,课程管理,在线视频观看,评论,会员展示,会员充值等等. 二.项目运行 环境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe(Inte ...
- 基于华为云obs实现文件上传下载(技术栈mysql+springboot+Maven+jsp+java)的技术分享
基于华为云obs实现文件上传下载(技术栈mysql+springboot+jsp+java)的技术分享 obs实现文件上传下载 前言 一.OBS是什么? 二.使用步骤 1.1 前期准备 2 工具的内容 ...
- eclipse maven项目 class类部署不到tomcat下_Springboot介绍以及用Eclipse搭建一个简单的Springboot项目教程
简述 本文主要介绍Springboot以及用Eclipse搭建一个简单的Springboot项目. Springboot简介 Springboot是由Pivotal团队提供的全新框架,其设计目的是用来 ...
- SpringBoot框架实现简单业务逻辑
SpringBoot框架实现简单业务逻辑 总述 Entity层 Dao层 Mapper.xml Service层 ServiceImpl Controller层 完整的业务逻辑实现写法示例 Dao层声 ...
- SpringBoot使用Jsp
本文是简单总结一下SpringBoot使用Jsp的Demo. 前言 在早期做项目的时候,JSP是我们经常使用的java服务器页面,其实就是一个简化servlet的设计,在本文开始之前,回顾一下jsp的 ...
- jeesite 框架的简单应用
jeesite 框架的简单应用 一个讲解jeesite的网站 https://www.w3cschool.cn/jeesite/ jeesite官网 http://jeesite.com/ 公司项目都 ...
- 第二章:SpringBoot与JSP间不可描述的秘密
springboot内部对jsp的支持并不是特别理想,而springboot推荐的视图是Thymeleaf,对于java开发人员来说还是大多数人员喜欢使用jsp,接下来我们来讲解下springboot ...
- java 简单 框架_java简单框架设计
设计框架包可以作为一个工具给大家用,需要有完全不同设计思路给出来,不同于我们去做一个web服务.网站. 或者一个业务微服务,需要从原来使用视角转换成一个构建者视角. 框架或者工具,更多是框架来管理或者 ...
- 2022-12-08 SSM项目转springboot整合jsp
目录 1.添加springboot相关pom依赖 2.Springboot整合jsp 2.1.使用打jar包方式执行 2.2.打war包执行 3.多数据源xml文件配置提取 3.1.数据源bean提取 ...
- Java项目:宠物商城系统(java+Springboot+Maven+mybatis+Vue+mysql)
源码获取:博客首页 "资源" 里下载! 一.项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclis ...
最新文章
- fckeditor 数据库 取值 显示
- WebServices 简介
- K8S完整部署项目实战案例
- 定时任务四种实现方式
- 程序观点下的线性代数
- html匹配属性正则表达式,正则表达式匹配html标签的属性值
- Delphi的MessageBox对话框使用
- 机器学习总结(一):线性回归、岭回归、Lasso回归
- 在vscode中使用opencv
- Google浏览器无法上网问题解决
- elixir元编程的quote与unquote
- css动画走马灯5秒,用animation制作走马灯
- 电影《小萝莉的猴神大叔》观后感
- 在Windows下安装和使用vim
- 基于观测器的T-S模糊系统故障分析simulink仿真
- Linux学习-Boot Loader: Grub2
- 计算机三级嵌入式开发技术总结
- 医学图像Dicom(.dcm)转换为NIFTI(.nii)格式
- Spring JdbcTemplate2-update和query
- C++ 性能优化篇二《影响优化的计算机行为》