jsp、freemarker、velocity、thymeleaf模板引擎优缺点

news/2024/7/8 4:21:07

 

1、概述

在java领域,表现层技术主要有三种, 
(1)jsp; 
(2)freemarker; 
(3)velocity; 
(4)thymeleaf;

 

2、jsp

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

 

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

 

4、velocity

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

 

5、thymeleaf

Thymeleaf是个XML/XHTML/HTML5模板引擎,可以用于Web与非Web应用。

Thymeleaf的主要目标在于提供一种可被浏览器正确显示的、格式良好的模板创建方式,因此也可以用作静态建模。你可以使用它创建经过验证的XML与HTML模板。相对于编写逻辑或代码,开发者只需将标签属性添加到模板中即可。接下来,这些标签属性就会在DOM(文档对象模型)上执行预先制定好的逻辑。Thymeleaf的可扩展性也非常棒。你可以使用它定义自己的模板属性集合,这样就可以计算自定义表达式并使用自定义逻辑。这意味着Thymeleaf还可以作为模板引擎框架。

thymeleaf优点:静态html嵌入标签属性,浏览器可以直接打开模板文件,便于前后端联调。springboot官方推荐方案。thymeleaf缺点:模板必须符合xml规范,就这一点就可以判死刑!太不方便了!js脚本必须加入/


--------------------- 
作者:chun_soft 
来源:CSDN 
原文:https://blog.csdn.net/ztchun/article/details/76407612 
版权声明:本文为博主原创文章,转载请附上博文链接!


http://www.niftyadmin.cn/n/3648127.html

相关文章

X Window研究笔记(22)

X Window研究笔记(22)转载时请注明出处和作者联系方式作者联系方式:李先静 22.X Window 简单示例对大多数linux程序员来说,很少有机会直接用Xlib去开发应用程序,那样开发效率太低,一般都是使用基于像GTK+和QT这样的too…

discord china_如何在Ubuntu 18.04上使用Discord Webhooks获取有关您的网站状态的通知

discord chinaThe author selected the Apache Software Foundation to receive a donation as part of the Write for DOnations program. 作者选择了Apache Software Foundation作为Write for DOnations计划的一部分来接受捐赠。 介绍 (Introduction) When you have critica…

Java中transient关键字

Java中transient关键字1.只要这个类实现了Serilizable接口,这个类的所有属性和方法都会自动序列化。 2.如果在实现了Serilizable接口的类中,对该类的某属性添加transient关键字,那么在序列化对象的时候,这个属性就不会被序列化。…

蓝牙协议读书笔记

蓝牙协议读书笔记转载时请注明出处和作者联系方式作者联系方式:李先静 昨天翻了一下Multimedia.Wireless.Networks.Technologies.Standards.and.QoS,看了其中的bluetooth一章,虽然还有很多细节没有搞明白,不过基本框架还是清楚了&…

如何在Ubuntu 20.04上使用Postgres,Nginx和Gunicorn设置Django

介绍 (Introduction) Django is a powerful web framework that can help you get your Python application or website off the ground. Django includes a simplified development server for testing your code locally, but for anything even slightly production related…

linux蓝牙驱动代码阅读笔记

linux蓝牙驱动代码阅读笔记转载时请注明出处和作者联系方式作者联系方式:李先静 昨天看了一下介绍蓝牙协议文档,今天索性对照看了看kernel里的代码(bluez),这里记点笔记,还是继承了老毛病,只关注整体流程而忽略细节&am…

acme.sh 更换dns_如何在Ubuntu 18.04上使用acme-dns-certbot使用DNS验证来获取让我们加密证书

acme.sh 更换dnsThe author selected the COVID-19 Relief Fund to receive a donation as part of the Write for DOnations program. 作者选择了COVID-19救济基金来接受捐赠,这是Write for DOnations计划的一部分。 介绍 (Introduction) The majority of Let’s …

如何应对HashMap线程不安全的问题?

1、使用Hashtable替代HashMap 当一个线程访问HashTable的同步方法时,其他线程如果也要访问同步方法,会被阻塞住。举个例子,当一个线程使用put方法时,另一个线程不但不可以使用put方法,连get方法都不可以。效率很低&…