一、thymeleaf和freemarker谁更好用?

大多数程序员更倾向于freemarker这种模板引擎,两者的设计思路本就不同。我已经习惯了类似于freemarker这种编程式模板引擎,比如常见的判断会这么写:

<#if ${isOpen}> Open!</#if>

而在thymeleaf中,你首先要考虑的问题是:我的DOM是什么,而不是将 if 的逻辑放在哪里。在thymeleaf中判断会写出下面代码:

<div th:switch="${user.role}"> 
  <p th:case="'admin'">User is an administrator</p>
  <p th:case="#{roles.manager}">User is a manager</p>
  <p th:case="*">User is some other thing</p> 
</div>

二、thymeleaf优点:

(1)与其它模板引擎相比,Thymeleaf最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个Web应用。Thymeleaf是通过HTML的标签属性渲染标签内容。采用标签属性来进行模板的定义,没有破坏基本的html文档结构,这样就可以直接在浏览器中打开查看布局效果,也为前后端的分离开发奠定基础,前端只需要掌握thymeleaf,就可以单独开发,测试。

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

(2)springboot官方推荐方案。这是 thymeleaf 自己讲,spring boot 默认推荐的是它们,但是从源码的层面来说,spring 团队很开放,它们只是不推荐 jsp 和 velocity,并没有明确表示默认应该是 Thymeleaf。Spring官方支持的服务的渲染模板是Thymeleaf和Freemarker等。

三、thymeleaf缺点:

实际的开发体验也并不好,模板必须符合xml规范,就这一点就可以判死刑!太不方便了!直接当静态文件打开和以web服务器运行效果也不一样。这些细小的差别出现问题,很难进行排查。

另外,js脚本必须加入/<![CDATA[/标识,否则一个&符号就会导致后台模板合成抛异常,而且错误信息很不友好,害得大家调试了好几个小时才明白是怎么回事。js里面还好办,这样是在html里面含有&等符号,还需要转义,非常麻烦了!

四、freemarker优点:

1、性能。velocity应该是最好的,其次是jsp,普通的页面freemarker性能最差(虽然只是几毫秒到十几毫秒的差距)。但是在复杂页面上(包含大量判断、日期金额格式化)的页面上,freemarker的性能比使用tag和el的jsp好。
2、宏定义比jsp tag方便
3、内置大量常用功能。比如html过滤,日期金额格式化等等,使用非常方便。
4、支持jsp标签
5、可以实现严格的mvc分离

五、freemarker缺点:

1、不是官方标准
2、用户群体和第三方标签库没有jsp多

六、参考:

https://www.zhihu.com/question/64039553/answer/215942472