介绍
- Jsp 在 JavaWeb 的世界中统治了很长一段时间。但是,由于血统不纯正,表现一般般,许多技术跃跃欲试,欲取代其统治地位, Thymeleaf 就是其中的一位。它是一个跟Velocity、FreeMarker类似的模板引擎
jsp缺点
- Jsp 标签和 Html 标签混在一起,生成的文档比较混乱
- 在 Web 浏览器或者 Html 编辑器中,查看未经渲染的 Jsp 页面和预想差别很大
- Jsp 和 Servlet 紧耦合,只能用在基于 Servlet 的 Web 项目中
Thymeleaf优点
- 具有开箱即用的特性,不依赖于标签库,能编辑 Html 的地方就能够使用 Thymeleaf。Thymeleaf 很大程度上就是Html, 没有特殊的标签和标签库
- Thymeleaf 命名空间中的很多属性对应标准的 Html 属性,并且具有相同的名称,但是会渲染一些计算后得到的值。
- 最大特点就是不需要启动整个web应用,且能正确的显示页面
- 它提供标准和spring标准两种方言,可以直接套用模板实现JSTL、 OGNL表达式效果,同时开发人员也可以扩展和创建自定义的方言
其实优点总结起来就一句话:原型即界面
Thymeleaf缺点
- 效率不是很高,它的渲染速度比不上 beetl
- 模板必须符合 xml 规范,调试信息有点不友好
- Jsp 是基于 Servet 进行数据解析转换形成的 Html, 而 Thymeleaf 则是将所对应的指定显示文件以 DOM 的形式读取为 xml 等并进行数据的解析和赋值后再重新映射到浏览器的
- 较为复杂的 Thymeleaf 较为消耗 Jvm 内存空间
用法
原理
- 在 spring 中使用 thymeleaf 需要配置三个视图解析器:
- ThymeleafViewResolver : 将视图名解析为 Thymeleaf 模板视图
- SpringTemplateEngine : 处理模板并且渲染结果
- TemplateResolver : 加载 Thymeleaf 模板,它使用 prefix 和 suffix 属性,将前缀、后缀、逻辑视图名进行结合,进而定位 Thymeleaf 引擎
用法
- 依赖的jar包:
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf</artifactId>
<version>2.1.4</version>
</dependency>
- 整合spring的时候,依赖的jar:
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring3</artifactId>
<version>2.1.4</version>
</dependency>
- Thymeleaf 的命名空间:
<xmlns:th="http://www.thymeleaf.org">
- 在Thymelea 中常见的表达式:
- ${…} : 变量表达式
- *{…} : 选择表达式
//以上表达式的用法
<div th:object="${user}">
<div th:text="*{name}"></div>
<div th:text="*{age}"></div>
</div>
等价于
<div th:text="${user.name}"></div>
<div th:text="${user.age}"></div>
等价于
<div th:text="*{user.name}"></div>
<div th:text="*{user.age}"></div>
- @{…}:链接 Url 表达式,同时该标签也能引用静态的文件
<script type="text/javascript" src="@{/js/blog/blog.js}">
<a th:href="@{http://www.baidu.com(pageNumber=${pageNumber})}">用法</a>
- 其余的标签用法详见官方开发文档:地址