模板引擎的一些介绍

模板引擎的一些介绍

模板引擎是为了解决**用户界面(显示)业务数据(内容)**分离而产生的。他可以生成特定格式的文档,常用的如格式如HTML、xml以及其他格式的文本格式。其工作模式如下

在这里插入图片描述

常见的模板引擎

1.jsp

优点:

1、功能强大,可以写java代码
2、支持jsp标签(jsp tag)
3、支持表达式语言(el表达式,jstl语法)
4、官方标准,用户群广,丰富的第三方jsp标签库
5、性能良好。jsp编译成class文件执行,有很好的性能表现
缺点:
jsp没有明显缺点,由于可以编写java代码,如使用不当容易破坏结构。

2.velocity

优点:
1、不能编写java代码,可以实现严格的mvc分离
2、性能良好,据说比jsp性能还要好些
3、使用表达式语言,据说jsp的表达式语言就是学velocity的
缺点:
1、不是官方标准
2、用户群体和第三方标签库没有jsp多。
3、对jsp标签支持不够好
4、已经很久很久没有维护了。

3.freemarker
优点:
1、不能编写java代码,可以实现严格的mvc分离
2、性能非常不错
3、对jsp标签支持良好
4、内置大量常用功能,使用非常方便
5、宏定义(类似jsp标签)非常方便
6、使用表达式语言
缺点:
1、不是官方标准
2、用户群体和第三方标签库没有jsp多

4.Thymeleaf

Thymeleaf是本次介绍的重点

Thymeleaf是用来开发Web和独立环境项目的服务器端的Java模版引擎

特点:

1.动静结合:Thymeleaf 在有网络和无网络的环境下皆可运行,即它可以让美工在浏
览器查看页面的静态效果,也可以让程序员在服务器查看带数据的动态页面效果。这是
由于它支持 html 原型,然后在 html 标签里增加额外的属性来达到模板+数据的展示
方式。浏览器解释 html 时会忽略未定义的标签属性,所以 thymeleaf 的模板可以静态
地运行;当有数据返回到页面时,Thymeleaf 标签会动态地替换掉静态内容,使页面动
态显示。

2.开箱即用:它提供标准和spring标准两种方言,可以直接套用模板实现JSTL、
OGNL表达式效果,避免每天套模板、该jstl、改标签的困扰。同时开发人员也可以扩展
和创建自定义的方言。

3.多方言支持:Thymeleaf 提供spring标准方言和一个与 SpringMVC 完美集成的
可选模块,可以快速的实现表单绑定、属性编辑器、国际化等功能。

4.与SpringBoot完美整合:SpringBoot提供了Thymeleaf的默认配置,并且
为Thymeleaf设置了视图解析器,我们可以像以前操作jsp一样来操作Thymeleaf。代
码几乎没有任何区别,就是在模板语法上有区别。

Thymeleaf的常用指令

Thymeleaf通过 ${…} 来获取model中的变量,这是一种 ognl 表达式。OGNL 是 Object Graphic Navigation Language( 对象图导航语言 ) 的缩写,他是一个开源项目。

1.Thymeleaf在页面的使用

1.在HTML中的标签上使用th:xx 指令来动态加载变量例如:

例子:

<h1 th:text="${username}">text</h1>

其中"th:text"是指令

"${username}"是数据

当servelt传递的是一个对象,我们要获取对象的属性值,我们可以这样写

/*学生对象*/
Student s = new Student();
s.setname(张三)....
/*将对象放入页面容器中*/
context.setVariable("s", s);
/*使用模板引擎解析模板*/
templateEngine.process("index", context,response.getWriter());

index.html

<div th:text="${s.sname}"></div>

当数据量很多的时候还有一种语法糖的写法

在父标签用 th:object="${s}"获取s的值

<div th:text="*{sname}"></div>

这样就可以省去s.的前缀

实体类中的方法也可以在页面中使用

public String show(){
	return "我是"+this.name;
}
<div th:text="${s.show()}"></div>

如果传入的是一个集合,在父标签用 th:object="${s}"获取s的值

<div th:object="${s}">
<div th:text="*{name}"></div>//获取学生姓名
</div>

循环也是非常频繁使用的需求,Thymeleaf中使用th:each指令来完成与java中的增强for循环类似

/*学生对象*/
ArrayList<Student> list = new ArrayList<>();

....
/*将集合放入页面容器中*/
context.setVariable("list", list);
/*使用模板引擎解析模板*/
templateEngine.process("index", context,response.getWriter());
<div  th:each="stulist:${list}">
    <div th:text="${stulist.name}"></div>//获取学生姓名
    ......
</div>

在用到超链接时,超链接需要携带参数时需要遵照以下写法。

<a th:href="@{stServelt.do(sfid=${stulist.sid})}" ></a>

img标签

<img th:src="|static/picture/${stulist.gfpic2}|">//img标签的写法比较特殊 

在html内容中使用动态数据

<h1>你好,我是[[${session.stu.name}]]</h1>

2.Thymeleaf 在页面的使用 – 内置对象

Thymeleaf中提供了一些内置对象,并且在这些对象中提供了一些方法。
获取这些对象,需要使用#对象名来引用 或者 使用语法糖。

使用#对象名:
<h1 th:text="${#session.getAttribute('stu')['sname']}"></h1>
语法糖:
<h1 th:text="${session.stu.sname}"></h1>

常用内置对象

#requset 如果是web程序,可以获取HttpServletRequest对象
#session 如果是web程序,可以获取HttpSession对象

3.Thymeleaf 在页面的使用 – 全局对象

Thymeleaf中提供一些便捷的对象来处理页面上的数据

处理日期格式

今天是:<span th:text=“${#dates.format(数据,'yyyy-MM-dd')}">日期</span>
对象作用
#dates处理java.util.date的工具对象
#calendars处理java.util.calendar的工具对象
#numbers用来对数字格式化的方法
#strings用来处理字符串的方法
#bools用来判断布尔值的方法
#arrays用来处理数组的方法
#lists用来处理List集合的方法
#sets用来处理set集合的方法
#maps用来处理map集合的方法

4.算数运算符

<span th:text="${session.stu.score} + 10"> 分数加10 </span>
<span th:text="${session.stu.score} - 10"> 分数减10 </span>
<span th:text="${session.stu.score} * 10"> 分数乘10 </span>
<span th:text="${session.stu.score} / 10"> 分数除10 </span>
<span th:text="${session.stu.score} % 10"> 分数取余10 </span>

5.逻辑运算符

支持的比较运算:>, <, >= , <= ,==, !=

(但是>, <不建议直接使用,因为xml会解析为标签,要使用别名。)

注意: == 和 != 不仅可以比较数值,类似于equals的功能。

比较:> , < , >= , <= ( gt , lt , ge , le )
等于:== , != ( eq , ne )

Thymeleaf中的三元运算符跟java中的三元运算符是一样的:

<span th:text="${session.stu.ssex} == 1?'':''"></span>

以上就是Thymeleaf的部分常用指令

但在实际开发过程中这些肯定是不够用的所以还是需要“常备”Thymeleaf的官方手册以便随时查看

< , >= , <= ( gt , lt , ge , le )
等于:== , != ( eq , ne )

Thymeleaf中的三元运算符跟java中的三元运算符是一样的:

<span th:text="${session.stu.ssex} == 1?'':''"></span>

以上就是Thymeleaf的部分常用指令

但在实际开发过程中这些肯定是不够用的所以还是需要“常备”Thymeleaf的官方手册以便随时查看

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值