模板引擎总结
(Thymeleaf,FreeMarker,Enjoy,Velocity,JSP等)
⼀.⾸先我们可以了解下为什么要⽤模板引擎:
因为模板引擎可以让(⽹站)程序实现界⾯与数据分离,业务代码与逻辑代码的分离,这就⼤⼤提升了开发效率,良好的设计也使得代码重⽤变得更加容易。我们司空见惯的模板安装卸载等概念,基本上都和模板引擎有着千丝万缕的联系。模板引擎不只是可以让你实现代码分离(业务逻辑代码和⽤户界⾯代码),也可以实现数据分离(动态数据与静态数据),还可以实现代码单元共享(代码重⽤),甚⾄是多语⾔、动态页⾯与静态页⾯⾃动均衡(SDE)等等与⽤户界⾯可能没有关系的功能。
⼆.⼏个常见的模板引擎分析:
1.Thymeleaf
特性:
1.Thymeleaf 在有⽹络和⽆⽹络的环境下皆可运⾏,即它可以让美⼯在浏览器查看页⾯的静态效果,也可以让程序员在服务器查看带数据的动态页⾯效果。这是由于它⽀持 html 原型,然后在 html 标签⾥
增加额外的属性来达到模板+数据的展⽰⽅式。浏览器解释html 时会忽略未定义的标签属性,所以 thymeleaf 的模板可以静态地运⾏;当有数据返回到页⾯时,Thymeleaf 标签会动态地替换掉静态内容,使页⾯动态显⽰。
2.Thymeleaf 开箱即⽤的特性。它提供标准和spring标准两种⽅⾔,可以直接套⽤模板实现JSTL、 OGNL表达式效果,避免每天套模板、该jstl、改标签的困扰。同时开发⼈员也可以扩展和创建⾃定义的⽅⾔。
3. Thymeleaf 提供spring标准⽅⾔和⼀个与 SpringMVC 完美集成的可选模块,可以快速的实现表单绑定、属性编辑器、国际化等功能。
(⽬前主流的模板引擎之⼀,Spring Boot推荐)
优点:语法简洁,功能强⼤。
缺点:性能差。
使⽤(SpringBoot+IDEA):
直接在pom⽂件中引⼊如下依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
导进相关依赖后
然后只要将html⽂件放⼊classpath:templates⽂件下,thymeleaf就能⾃动完成渲染(例如控制器中返回的字符串会直接到该⽂件夹中到对应的页⾯)
导⼊Thymeleaf命名空间:在html⽂件中添加如下代码
<html lang="en" xmlns:th="">
语法:
获取变量的值${...}
链接@{...}
⽂本替换th:text=${...} (这⾥可以替换id值,class值以及内容等)
判断语句th:if th:unless th:switch等
遍历th:each
......可参考下图,如果需要了解更多可以查看对应的API⽂档
2.FeeMaker
特性:
在所有采⽤⽹页静态化⼿段的⽹站中,FreeMarker使⽤的⽐例⼤⼤的超过了其他的⼀些技术。HTML静态化也是某些缓存策略使⽤的⼿段,对于系统中频繁使⽤数据库查询但是内容更新很⼩的应⽤,可以使⽤FreeMarker将HTML静态化。⽐如⼀些⽹站的公⽤设置信息,这些信息基本都是可以通过后台来管理并存储在数据库中,这些信息其实会⼤量的被前台程序调⽤,每⼀次调⽤都会去查询⼀次数据库,但是这些信息的更新频率⼜会很⼩,因此也可以考虑将这部分内容进⾏后台更新的时候进⾏静态化,这样就避免了⼤量的数据库访问请求,提⾼了⽹站的性能。
(⽬前主流的模板引擎之⼀)
优点:
FreeMarker的⼀个优点在于不能轻易突破模板语⾔开始编写Java代码,因此降低了领域逻辑漏进视图层的危险⼏率,也提⾼了⽹站的性能。
缺点:
需要⼀点附加配置来将其平稳地集成到应⽤程序中,⼀些IDE可能并不完全⽀持它,当然还有开发者或设计者也许需要学习⼀门陌⽣的模板语⾔。
使⽤:
导⼊相关依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
在配置⽂件中添加FreeMaker的配置如下后就可以使⽤了
# 设定ftl⽂件路径
palte-loader-path=classpath:/templates
# 关闭缓存,及时刷新
spring.freemarker.cache=false
spring.freemarker.charset=UTF-8
spring.freemarker.check-template-location=true
t-type=text/html
pose-request-attributes=true
pose-session-attributes=true
quest-context-attribute=request
#设置FreeMaker⽂件的后缀
spring.freemarker.suffix=.ftl
语法:可以参考API⽂档
jsp用什么前端框架 3.Enjoy
特性:
Enjoy 是基于 Java 语⾔的极轻量极模板引擎且不依赖任何第三⽅。极简设计仅 if、for、switch、set、define、include、render 七个核⼼指令,让学习成本低到极致。独创 DKFF(Dynamic Key Feature Forward) 词法分析算法与 DLRD (Double Layer Recursive Descent)语法分析算法,避免使⽤ javacc、antlr、jflex ⽣成器,令代码量少到极致。
优点:功能强⼤,扩展性强,与Java⾮常契合,学习成本低,轻量级等。
缺点:
4.Velocity
特性:Velocity是⼀个基于Java的模板引擎。它允许任何⼈使⽤简单但功能强⼤的模板语⾔来引⽤Java代码中定义的对象。
优点:使⽤了模板缓冲,在模板缓冲机制的作⽤下,模板不再是每次出现请求的时候从磁盘读取,⽽是以最理想的⽅式在内存中保存和解析。在开发期间,模板缓冲通常处于禁⽤状态,因为这时请求数量较少,⽽且要求对页⾯的修改⽴即产⽣效果。开发完毕之后,模板⼀般不再改变,此时就可以启⽤模板缓冲功能。因此Velocity执⾏速度明显优于JSP。
缺点:不是官⽅标准 ⽤户体和,第三⽅标签库较少且对JSP标签⽀持不够好。
使⽤:本⼈尚未使⽤过,可以参考官⽅⽂档。
5.JSP
虽然是⼀款功能⽐较强⼤的模板引擎,并被⼴⼤开发者熟悉,但它前后端耦合⽐较⾼。⽐如说前端的html页⾯还要⼿动修改成jsp页⾯,⼤⼤加重了⼯作量,⽽且动态和静态资源也是耦合性太⾼。
其次是JSP页⾯的效率没有HTML⾼,因为JSP是同步加载。⽽且JSP需要tomcat,但⼜不⽀持nginx等,已经跟不上时代的潮流。
综上:⽬前开发中已经很少⽤JSP了,只是我们很多时候会在碰到⼀些以前的框架⾥有⽤到JSP技术,但是技多不压⾝,推荐还是学⼀下。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论