简介
- 相对html+js的传统设计,现在很多网站都采用div&css+标签化+模块化的设计。模板引擎一定的语义,将数据填充到模板中,产生最终的的HTML页面。模板引擎主要分两种:客户端引擎和服务端引擎。
- 客户端渲染:模板和数据分别传送到客户端,在客户端由JavaScript模板引擎渲染出最终的HTML视图。将模板渲染放置在客户端做,可以降低服务端的压力,并且如果前端内容分别来自多个后台系统,而这些后台的架构各不相同(Java、.Net、Ruby等),则服务器端渲染需要采用不同的技术,模板资源无法共享。
- 服务端渲染:引擎在服务器端将模板和数据合成,返回最终的html页面,相对于客户端渲染,数据存储更加安全。主要有freemarker、velocity、thymeleaf等。
- 原理:将显示与数据分离,其本质是将模板文件和数据通过模板引擎生成最终的HTML代码。
- 模板引擎以简单为主,其主要目的是为了让程序开发和美工设计人员分工明确;在代码生成过程中减少大量机械重复工作,大大提高开发效率,良好的设计使得代码重用,后期维护都降低成本。一个好的模板引擎的使用要考虑的方面无外乎:功能是否强大,使用是否简单,整合性、扩展性与灵活性,性能。
JSP、freemarker、velocity、thymeleaf性能对比
JSP
优点:
- 功能强大,可以写java代码
- 支持jsp标签(jsp tag)
- 支持表达式语言(el)
- 官方标准,用户群广,丰富的第三方jsp标签库
- 性能良好。jsp编译成class文件执行,有很好的性能表现
缺点:
- 由于可以编写java代码,如果使用不当,容易破坏MVC结构
freemarker
FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或Http。它不仅可以用作表现层的实现技术,而且还可以用于生成XML、JSP或Java等。
目前企业中,主要使用FreeMarker做静态页面或是页面展示.
优点:
- 不能编写java代码,可以实现严格的mvc分离
- 性能非常不错
- 对jsp标签支持良好
- 内置大量常用功能,使用非常方便
- 宏定义(类似jsp标签)非常方便
- 使用表达式语言
缺点:
- 不是官方标准
- 用户群体和第三方标签库没有jsp多
选择使用freemarker的原因:
- 性能。velocity应该是最好的,其次是jsp,普通的页面freemarker性能最差(虽然只是几毫秒到十几毫秒的差距)。但是在复杂页面上(包含大量判断、日期金额格式化)的页面上,freemarker的性能比使用tag和el的jsp好。
- 宏定义比jsp tag方便
- 内置大量常用功能。比如html过滤,日期金额格式化等等,使用非常方便
- 支持jsp标签
- 可以实现严格的MVC分离
velocity
优点:
- 不能编写java代码,可以实现严格的MVC分离
- 性能良好,据说比jsp性能还要好些
- 使用表达式语言,据说jsp的表达式语言就是学velocity的
缺点:
- 不是官方标准
- 用户群体和第三方标签库没有jsp多
- 对jsp标签支持不够好
thymeleaf
Thymeleaf是个XML/XHTML/HTML5模板引擎,可以用于Web与非Web应用。
Thymeleaf的主要目标在于提供一种可被浏览器正确显示的、格式良好的模板创建方式,因此也可以用作静态建模。你可以使用它创建经过验证的XML与HTML模板。相对于编写逻辑或代码,开发者只需将标签属性添加到模板中即可。接下来,这些标签属性就会在DOM(文档对象模型)上执行预先制定好的逻辑。Thymeleaf的可扩展性也非常棒。你可以使用它定义自己的模板属性集合,这样就可以计算自定义表达式并使用自定义逻辑。这意味着Thymeleaf还可以作为模板引擎框架。
优点:
- 静态html嵌入标签属性,浏览器可以直接打开模板文件,便于前后端联调
- springboot官方推荐方案
缺点:
- 模板必须符合xml规范
- js脚本必须加入/