thymeleaf和freemarker的⽐较选择
thymeleaf和freemarker的⽐较选择
引⾔
公司项⽬由于之前编写⽅法的代码复⽤性低,可维护性不⾼,需要重构。项⽬的主要功能包装、传输xml,主要是采⽤SringBuilder拼接xml。
选型
⽬前流⾏的表现层技术主要有:
1. jsp
2. freemarker
3. thymeleaf
4. velocity
然后在thymeleaf和freemarker中选择。
thymeleaf介绍:
Thymeleaf是⼀种⽤于Web和独⽴环境的现代服务器端的Java模板引擎。
Thymeleaf的主要⽬标是将优雅的⾃然模板带到开发⼯作流程中,并将HTML在浏览器中正确显⽰,并且可以作为静态原型,让开发团队能更容易地协作。Thymeleaf能够处理HTML,XML,JavaScript,CSS甚⾄纯⽂本。
Thymeleaf使⽤Spring框架的模块,与许多常见的⼯具集成在⼀起,并且可以插⼊⾃⼰的功能,是现代HTML5 JVM Web开发的理想选择,尽管Thymeleaf还有更多其它的功能。
Thymeleaf建⽴在⾃然模板的概念之上,以不影响模板作为设计原型的⽅式将其逻辑注⼊到模板⽂件中。 这改善了设计沟通,弥合了前端设计和开发⼈员之间的理解偏差。
freemarker介绍:
FreeMarker 是⼀个模板引擎,⼀个基于模板⽣成⽂本输出的通⽤⼯具,使⽤纯 Java 编写,FreeMarker 被设计⽤来⽣成 HTML Web 页⾯,特别是基于 MVC 模式的应⽤程序,虽然 FreeMarker 具有⼀些编程的能⼒,但通常由 Java 程序准备要显⽰的数据,由FreeMarker ⽣成页⾯,通过模板显⽰准备的数据。符合MVC模式,采⽤哈希表存储,你可以专注于如何展现数据, ⽽在模板之外可以专
注于要展⽰什么数据。
⽐较
freemarker
freeMarker是⼀个⽤Java语⾔编写的模板引擎,它基于模板来⽣成⽂本输出。FreeMarker与Web容器⽆关,即在Web运⾏时,它并不知道Servlet或HTTP。它不仅可以⽤作表现层的实现技术,⽽且还可以⽤于⽣成XML,JSP或Java 等。
⽬前企业中:主要⽤Freemarker做静态页⾯或是页⾯展⽰
优点:
1、不能编写java代码,可以实现严格的mvc分离
2、性能⾮常不错
3、对jsp标签⽀持良好
4、内置⼤量常⽤功能,使⽤⾮常⽅便
5、宏定义(类似jsp标签)⾮常⽅便
6、使⽤表达式语⾔
缺点:
1、不是官⽅标准
2、⽤户体和第三⽅标签库没有jsp多
选择freemarker的原因:
1、宏定义⽐jsp tag⽅便
2、内置⼤量常⽤功能。⽐如html过滤,⽇期⾦额格式化等等,使⽤⾮常⽅便
3、⽀持jsp标签
4、可以实现严格的mvc分离
thymeleaf
Thymeleaf是个XML/XHTML/HTML5模板引擎,可以⽤于Web与⾮Web应⽤。
Thymeleaf的主要⽬标在于提供⼀种可被浏览器正确显⽰的、格式良好的模板创建⽅式,因此也可以⽤作静态建模。你可以使⽤它创建经过验证的XML与HTML模板。相对于编写逻辑或代码,开发者只需将标签属性添加到模板中即可。接下来,这些标签属性就会在DOM(⽂档对象模型)上执⾏预先制定好的逻辑。Thymeleaf的可扩展性也⾮常棒。你可以使⽤它定义⾃⼰的模板属性集合,这样就可以计算⾃定义表达式并使⽤⾃定义逻辑。这意味着Thymeleaf还可以作为模板引擎框架。
thymeleaf优点:静态html嵌⼊标签属性,浏览器可以直接打开模板⽂件,便于前后端联调。springboot官⽅推荐⽅案。
thymeleaf缺点:模板必须符合xml规范,就这⼀点就可以判死刑!太不⽅便了!js脚本必须加⼊/
选择freemarker
1. 我们需要⾃定义⽅法,将某些节点进⾏值或者类型格式的转换,Thymaleaf的⾃定义⽅法较难实现完美的数据转换(简易元素⽆法拥
有属性,即节点中不能有函数的转化),尝试多次后失败。最后选择使⽤freemarker
2. 需要⾃定义转换节点数据的⽅法函数,freemarker容易实现,具体如下 :
public final class Translation implements TemplateMethodModelEx {
private Translation(){
}
@Override
public Object exec(List list)throws TemplateModelException {
/*
*开始空值处理
*/
SimpleScalar codeType =(SimpleScalar) (0);//获取第⼀个参数
Object o = (1);//获取第⼆个参数
if(o == null){
return null;
}
/*
*业务逻辑处理
*/
return result;//返回处理结果
}
}
继承TemplateMethodModelEx,并重写其exec⽅法,然后添加到需要渲染的数据中
dataMap.put("translation ",new Translation ());
模板的编写(demo.ftl)
<data>
<!--定义变量-->
<#assign myList=[2,5,56,78,1,2,5,6,3]/>
未转化:
<#list myList as item>
${item}
</#list></br>
已转化:
<!--调⽤⽅法-->
<#list translation(myList,2) as item>
${item}
thymeleaf用法
</#list>
</data>
渲染数据
public String render(Map<String, Object> dataMap)
throws IOException, TemplateException {
StringWriter writer =new StringWriter();
String();//返回渲染结果数据
}
结语
这次选择了freemarker,看重了其宏的强⼤和⾃定义节点转换⽅法函数。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。