模板引擎:为了解决用户界面(显示)与业务数据(内容)分离而产生的。
可以生成特定格式的文档,常用的格式例如:HTML、xml以及其他格式的文本格式。
具体的工作模式如下:
二、常见模板引擎jsp、freemarker、velocity、themleaf
jsp
优点:
1.功能强大,可以写Java代码
2.支持jsp标签(jsp tag)
3.支持表达式语言(el表达式,jstl语法)
4.官方标准,用户群广泛,有丰富的第三方jsp标签库
5.性能良好。jsp编译成class文件执行,有很好的性能表现
缺点:
没有明显的缺点,由于可以编写java代码,如果使用不当容易破坏结构。
freemarker(目前主流的模板引擎之一)
优点:
1.不能编写java代码,实现严格的mvc分离
2.性能非常不错
3.对jsp标签支持良好
4.内置大量常用功能,使用非常方便
5.宏定义(类似jsp标签)非常方便
6.使用表达式语言
缺点:
1.不是官方的标准
2.用户群体和第三方标签库没有jsp多
velocity(较早代替jsp的模板语言)
一个基于Java的模板引擎。它允许任何人使用简单但功能强大的模板语言来引用Java代码中定义的对象。
优点:
1.不能编写java代码,可以实现严格的mvc分离
2.性能良好,执行速度明显优于jsp
3.使用表达式语言
缺点:
1.不是官方标准
2.用户群体和第三方标签库没有jsp多
3.对jsp标签支持不够好
4.很久已经没有进行维护
themleaf
Themleaf是用来开发Web和独立环境项目的服务器的Java模板引擎。
· Spring官方支持的服务的渲染模板中,并不包含jsp。而是Themleaf和Freemarker等,而Themleaf与SpringMVC的视图技术,及SpringBoot的自动化配置集成非常完美,成本较低,只需要关注Themleaf的语法就行了。
特点一:
动静结合:Themleaf在有无网络的环境下皆可运行,它可以让美工在浏览器查看页面的静态效果,也可以让程序员在服务器查看带数据的动态页面效果。由于它支持html原型,然后在html标签里增加额外的属性来达到模板+数据的展示方式。浏览器解释html时会忽略未定义的标签属性,所以Themleaf的模板可以静态地运行;当有数据返回到页面时,Themleaf标签会动态地替换掉静态内容,使页面动态显示。
开箱即用:提供标准和spring标准两种方言,可以直接套用模板实现JSTL、OGNL表达式效果,避免每天套模板、改jstl、改标签的困扰。同时也可以方便开发人员扩展和创建自定义的方言。
特点二:
多方言支持:Themleaf提供spring标准方言和一个与SpringMVC完美集成的可选模块,可以快速的实现表单绑定、属性编辑器、国际化等功能。
与SpringBoot完美整合:SpringBoot提供了Themleaf的默认配置,而且为Themleaf设置了视图解析器,我们可以像以前操作jsp一样来操作Themleaf。代码几乎没有任何的区别,只是在模板语法上存在区别。
三、thymeleaf的常用指令下面我们主要说一下Themleaf的常用指令:
1. th:xx 指令(Themleaf在页面的使用)
2. ${}(使用WebContext中的变量,Themleaf通过${..}来获取model中的变量,这是一种ognl表达式)
静态内容
3. 自动变量语法糖
Student s = new Student();
s.setBirthday(new Date());
s.setScore(90.0);
s.setSname("张三三");
s.setBj(new Banji(1,"超越班"));
WebContext context = new WebContext(request, response, getServletContext());
context.setVariable("stu", s);
templateEngine.process("index", context, response.getWriter());
Ognl 也给我们提供了类似js的语法:
学生姓名
学生生日
成绩
班级名
4. 对象语法糖
我们发现频繁的写stu会比较麻烦所以我们可以进行以下操作:
首先:在父标签上用th:object="${student}"获取student的值,并保存
然后:之后我们就可以在子标签上通过*{属性名}的方式,获取student中的属性。
5. 全局对象
今天是:日期
6. 三元运算符
Thymeleaf中的三元运算符和java中的三元运算符是一样的:
特殊的三元元素夫——值 ?: 默认值
注意:当表达式的值为null时,会使用后面的默认值; ?: 之间没有空格
7. 逻辑判断
使用 th:if 或者 th:unless 进行逻辑判断(th:if 和 th:unless 表达相反的结果)
未成年 = 18">成年
8..1 循环控制 (***)
Thymeleaf中使用 th:each 指令完成与java中的增强for循环类似
| 编号 | 姓名 | 生日 | 性别 |
|---|---|---|---|
| 1 | -- 元素个数 (与数据库表中的主键无关)汤姆 | 2222-2-22 | 2 |
8.2 循环控制
th:each = "变量,状态 :集合"
状态对象包含以下属性:
• index,从0开始的角标
• count,元素的个数,从1开始
• size,总元素个数
• current,当前遍历到的元素
• even/odd,返回是否为奇偶,boolean值 even偶数,odd奇数
• first/last,返回是否为第一或最后,boolean值
9. 字符串拼接
普通字符串的拼接: 简化后:
10. 在超链接中使用动态数据
对表中的数据进行修改删除时,我们需要用到超链接,并且每个超链接中携带的参数值是不同的。
语法:th:href = "@{xxx(key=value,key2=value2,...)}"
| 学生编号 | 学生姓名 | 学生生日 | 学生性别 | 操作 |
|---|---|---|---|---|
| -- 学生个数 | 2222-2-22 | 删除 |
11. 在html内容中使用动态数据
语法:[[${xxx}]]
你好,我是[[${session.stu.sname}]]
以上我个人对引擎模板的了解和介绍,同时针对Thymeleaf中常用的指令进行的简单的介绍,希望对大家有所帮助。



