what is 模板引擎?

1.模板引擎是啥

概念
模板引擎(这里特指用于Web开发的模板引擎)是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档。

用途
模板引擎可以让(网站)程序实现界面与数据分离,业务代码与逻辑代码的分离,这就大大提升了开发效率,良好的设计也使得代码重用变得更加容易。
我们司空见惯的模板安装卸载等概念,基本上都和模板引擎有着千丝万缕的联系。模板引擎不只是可以让你实现代码分离(业务逻辑代码和用户界面代码),也可以实现数据分离(动态数据与静态数据),还可以实现代码单元共享(代码重用),甚至是多语言、动态页面与静态页面自动均衡(SDE)等等与用户界面可能没有关系的功能。

原理
简单来说,模板的诞生是为了将显示与数据分离,模板技术多种多样,但其本质是将模板文件和数据通过模板引擎生成最终的HTML代码。
在这里插入图片描述
举个栗子,hello,<%=name%>
数据是{name: ‘tom’},那么通过模板引擎解析后,我们希望得到Hello, tom。模板的前半部分是普通字符串,后半部分是模板标识,我们需要将其中的标识符替换为表达式。模板的渲染过程如下
在这里插入图片描述
模板引擎利用正则表达式识别模板标识,并利用数据替换其中的标识符。

当然以上只是一个小的功能,对于复杂的模板引擎来说,还会具备其他更高级的功能。

如果你之前有学习过jsp的话,你现在也许会思考,jsp是不是也是一种模版引擎呢?毕竟从他们功能来看,都是通过解析获得数据,最后将数据和页面结合起来生成html文件。
确实,jsp的确也是一种模板引擎。但是目前开发中已经很少用jsp了,原因是jsp的前后端耦合比较高。

2.模板引擎有啥

模板引擎分前端模板引擎和后端模板引擎,主要区别在于前端模板就是替换操作在浏览器用 js 执行,比如vue的template部分,react的jsx。而后端模板则是指替换操作在后端执行。

1、Thymeleaf
Thymeleaf是一个适用于Web和独立环境的现代服务器端Java模板引擎,能够处理HTML,XML,JavaScript,CSS甚至纯文本。
Thymeleaf 在有网络和无网络的环境下皆可运行,即它可以让美工在浏览器查看页面的静态效果,也可以让程序员在服务器查看带数据的动态页面效果。这是由于它支持 html 原型,然后在 html 标签里增加额外的属性来达到模板+数据的展示方式。浏览器解释 html 时会忽略未定义的标签属性,所以 thymeleaf 的模板可以静态地运行;当有数据返回到页面时,Thymeleaf 标签会动态地替换掉静态内容,使页面动态显示。
Thymeleaf是SpringBoot官方推荐方案。
优点:静态html嵌入标签属性,浏览器可以直接打开模板文件,便于前后端联调。
官方教程:https://www.thymeleaf.org/doc/tutorials/2.1/usingthymeleaf.html#what-is-thymeleaf
推荐教程:https://blog.csdn.net/u012706811/article/details/52185345
https://blog.csdn.net/qq_24598601/article/details/89190411
https://www.cnblogs.com/jiangbei/p/8462294.html

2、FreeMarker
FreeMarker最初的设计,是被用来在MVC模式的Web开发框架中生成HTML页面的,它没有被绑定到 Servlet或HTML或任意Web相关的东西上,与web容器无关,因此它可以用于非Web应用环境中。
模板编写为FreeMarker Template Language (FTL)。在模板中,你可以专注于如何展现数据, 而在模板之外可以专注于要展示什么数据。
在这里插入图片描述
官方中文教程:http://freemarker.foofun.cn/

3、Velocity
Velocity是一个基于Java的模板引擎,其提供了一个Context容器,在java代码里面我们可以往容器中存值,然后在vm文件中使用特定的语法获取,这是velocity基本的用法,其与jsp、freemarker并称为三大视图展现技术,相对于jsp而言,velocity对前后端的分离更加彻底:在vm文件中不允许出现java代码,而jsp文件中却可以。velocity是较早出现的用于代替jsp的模板语言。
优点:
1、不能编写java代码,可以实现严格的mvc分离
2、性能良好,据说比jsp性能还要好些
3、使用表达式语言,据说jsp的表达式语言就是学velocity的
缺点:
1、不是官方标准
2、用户群体和第三方标签库没有jsp多。
3、对jsp标签支持不够好
4、已经很久很久没有维护了。

教程:http://www.blogjava.net/alexwan/archive/2008/06/07/206473.html
https://www.jianshu.com/go-wild?ac=2&url=http%3A%2F%2Fwww.ibm.com%2Fdeveloperworks%2Fcn%2Fjava%2Fj-lo-velocity1%2F

4、JSP
JSP,全称JavaServer Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,在传统的网页HTML(标准通用标记语言的子集)文件中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件。
JSP与HTML不同,JSP是动态页面,HTML是静态页面。换言之,HTML可以直接访问,而JSP需要在服务器上经历一次动态资源(JSP)到静态资源(HTML)的转化,服务器会自动帮我们把JSP中的HTML片段和数据拼接成静态资源响应给浏览器,最后响应给客户端的则是已经转换好的HTML文件,然后客户端通过浏览器解析、展示。
优点:方便、简单、前后端一人搞定
缺点:前后端耦合严重,依赖servlet和tomcat。

如何选择合适的模板引擎?
1.标签是否足够
2.生态是否完善,有没有相对较多的使用群体
3.项目需求

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值