目录

什么是模板引擎?

常见的模板引擎

Jsp

velocity

freemarker

Thymeleaf

Thymeleaf的常用指令介绍


什么是模板引擎?


       模板引擎是为了解决用户界面(显示)与业务数据(内容)分离而产生的。


他可以生成特定格式的文档,常用的如格式如 HTML 、 xml 以及其他格式的文本格式。其工作模式如下:




java模板引擎性能对比图 jsp和模板引擎_java


常见的模板引擎

Jsp


优点:


1 、功能强大,可以写 java 代码


2 、支持 jsp 标签( jsp tag )


3 、支持表达式语言( el 表达式, jstl 语法)


4 、官方标准,用户群广,丰富的第三方 jsp 标签库


5 、性能良好。 jsp 编译成 class 文件执行,有很好的性能表现


缺点:


jsp 没有明显缺点,由于可以编写 java 代码,如使用不当容易破坏结构。



velocity


是较早出现的用于代替 jsp 的模板语言


优点:


1 、不能编写 java 代码,可以实现严格的 mvc 分离


2 、性能良好,据说比 jsp 性能还要好些


3 、使用表达式语言,据说 jsp 的表达式语言就是学 velocity 的


缺点:


1 、不是官方标准


2 、用户群体和第三方标签库没有 jsp 多。


3 、对 jsp 标签支持不够好


freemarker


优点:


1 、不能编写 java 代码,可以实现严格的 mvc 分离


2 、性能非常不错


3 、对 jsp 标签支持良好


4 、内置大量常用功能,使用非常方便


5 、宏定义(类似 jsp 标签)非常方便


6 、使用表达式语言


缺点:


1 、不是官方标准


2 、用户群体和第三方标签库没有 jsp 多


Thymeleaf


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


Spring官方支持的服务的渲染模板中,并不包含jsp。而是Thymeleaf和 Freemarker等,而Thymeleaf与SpringMVC的视图技术,及SpringBoot的 自动化配置集成非常完美,几乎没有任何成本,你只用关注Thymeleaf的语法即可。


Thymeleaf的常用指令介绍

java模板引擎性能对比图 jsp和模板引擎_模板引擎_02

 


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


<table border="1"> 
    <tr>
        <th>编号</th>
        <th>姓名</th> 
        <th>生日</th> 
        <th>性别</th>
    </tr> 
        <tr th:each="t,stat:${stulist}"> 
        <td th:text="${stat.count}">1</td> 
        <td th:text="${t.sname}">二万</td> 
        <td th:text="${#dates.format(t.birthday,'yyyy-MM-dd')}">2222-2-22</td> 
        <td th:text="${t.ssex}==1?'男':'女'">2</td>
    </tr>
</table>


在之前做的数据表格中有对数据的删除或修改,需要用到超链接, 每个超链接中携带的参数的值是不同的。


语法: th:href=“@{xxxx(key=value,key2=value2,…)}”


<table border="1"> 
    <tr>
        <th>编号</th>
        <th>姓名</th> 
        <th>生日</th> 
        <th>性别</th>
    </tr> 
        <tr th:each="t,stat:${stulist}"> 
        <td th:text="${stat.count}">1</td> 
        <td th:text="${t.sname}">二万</td> 
        <td th:text="${#dates.format(t.birthday,'yyyy-MM-dd')}">2222-2-22</td> 
        <td th:text="${t.ssex}==1?'男':'女'">2</td>
        <td th:text="@{delstu.do(sid=${t.sid},sname=${t.sname})}">删除</td>
    </tr>
</table>