Spring与后端模板引擎的故事
更多内容,欢迎关注微信公众号:全菜工程师小辉。公众号回复关键词,领取免费学习资料。
现在很多开发,都采用了前后端完全分离的模式,随着近几年前端工程化工具和MVC框架的完善,使得这种模式的维护成本逐渐降低。但是这种模式目前并不利于SEO(前后端分离的SEO问题会慢慢改善),而且某些场景使用模板引擎会更方便,比如说邮件模板以及数据变化不频繁的后台系统。
Spring,确切来说是Spring MVC除了可以实现RESTful web服务之外,还可以使用它提供动态HTML内容。Spring MVC支持多种模板技术,包括Thymeleaf、FreeMarker和JSP等。
什么是模板引擎?
模板引擎(这里特指用于Web开发的模板引擎)是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的文档。
模板引擎的基本机理就是替换(转换),将指定的标签转换为需要的业务数据;将指定的伪语句按照某种流程来变换输出。
SpringMVC和模板引擎的关系
SpringMVC处理请求的流程图:
模板引擎发挥作用是在第8,9,10步骤。
版本支持
重点介绍Velocity,因为其2010年以后连续6年没有更新,版本停留在1.7,直到最近两年才有更新,最新版本是2019年3月更新的2.1,但是变化并不大。
Spring官网原文:
As of Spring Framework 4.3, Velocity support has been deprecated due to six years without active maintenance of the Apache Velocity project. We recommend Spring’s FreeMarker support instead, or Thymeleaf which comes with Spring support itself.
Spring Framework 4.3、SpringBoot 1.5删除了对Velocity的支持, 所以想在后续版本使用,需要手动引入。
模板的继承关系
JSP使用的视图解析器:InternalResourceViewResovler继承了UrlBasedViewResolver
Freemarker和Velocity的视频解析器:FreemarkerViewResolver和VelocityViewResolver,两种解析器都继承了AbstractTemplateViewResolver
FreeMarker视图解析器继承关系:
Velocity视图解析器继承关系:
JSP的局限
JSP只能运行在servlet容器中,其他模板引擎没有限制,而且其他模板引擎并不是只用于web开发(由于提前编译,JSP的速度也最快)
当SpringBoot启用一个内嵌的servlet容器启动时,对JSP的支持有一些限制:
- 使用tomcat或者使用jetty时,需要使用war包。tomcat/jetty中由于硬编码了文件模式,可执行jar不能运行JSP
- Undertow不支持JSP
- 创建的自定义error.jsp无法覆盖默认的错误处理
在docker中使用JSP要注意:由于jsp渲染后会生成java文件和class文件存放在磁盘,如果使用docker需要指定环境变量中的temp目录
后端模板引擎对比
学习难度:
Thymeleaf < Velocity < JSPThymeleaf更接近h5语法,现代模板语法
移植性:
Thymeleaf:移植性强,有Spring生态
Velocity:移植性强,缺少周边生态
JSP:必须是Servlet或者JSP容器性能:
Themeleaf:解释执行,性能较差(后台用,前台最好别用)
Velocity:解释执行,性能良好(采用了大量反射)
JSP:性能最好,因为先翻译成源码再编译执行,性能优秀
Spring与后端模板引擎的故事的更多相关文章
- 浅谈 Web 中前后端模板引擎的使用
前言 这篇文章本来不打算写的,实话说楼主对前端模板的认识还处在非常初级的阶段,但是为了整个 源码解读系列 的完整性,在深入 Underscore _.template 方法源码后,觉得还是有必要记下此 ...
- spring boot: freemarket模板引擎
spring boot: freemarket模板引擎 freemarket模板引擎,可以和thymeleaf模板引擎共存 pom.xml引入 <!-- Freemarket --> &l ...
- spring boot: thymeleaf模板引擎使用
spring boot: thymeleaf模板引擎使用 在pom.xml加入thymeleaf模板依赖 <!-- 添加thymeleaf的依赖 --> <dependency> ...
- SpringBoot系列:Spring Boot使用模板引擎FreeMarker
一.Java模板引擎 模板引擎(这里特指用于Web开发的模板引擎)是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档. 在jav ...
- SpringBoot系列:Spring Boot使用模板引擎Thymeleaf
一.Java模板引擎 模板引擎(这里特指用于Web开发的模板引擎)是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档. 在jav ...
- SpringBoot系列:Spring Boot使用模板引擎JSP
一.Java模板引擎 模板引擎(这里特指用于Web开发的模板引擎)是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档. 在jav ...
- Spring Boot Thymeleaf 模板引擎的使用
Spring Boot 中可以支持很多模板引擎,Thymeleaf 是 Spring Boot 官方推荐使用的模板引擎,虽然在社区 Thymeleaf 的性能被许多人所吐糟,但这仍然不影响大量的开发人 ...
- Spring Boot整合模板引擎thymeleaf
项目结构 引入依赖pom.xml <!-- 引入 thymeleaf 模板依赖 --> <dependency> <groupId>org.springframew ...
- Spring Boot整合模板引擎freemarker
jsp本质是servlet,渲染都在服务器,freemarker模板引擎也是在服务器端渲染. 项目结构 引入依赖pom.xml <!-- 引入 freemarker 模板依赖 --> &l ...
随机推荐
- C#2.0新增功能07 getter/setter 单独可访问性
连载目录 [已更新最新开发文章,点击查看详细] 属性是一种成员,它提供灵活的机制来读取.写入或计算私有字段的值. 属性可用作公共数据成员,但它们实际上是称为访问器的特殊方法. 这使得可以轻松访问 ...
- 2019牛客多校第二场F-Partition problem(搜索+剪枝)
Partition problem 题目传送门 解题思路 假设当前两队的对抗值为s,如果把红队中的一个人a分配到白队,s+= a对红队中所有人的对抗值,s-= a对白队中所有人的对抗值.所以我们可以先 ...
- VMware里装XP 没有找到硬盘驱动器
遇到问题: 解决:要给虚拟机配上一个虚拟的硬盘驱动器.在VMWare的虚拟机配置里面给这个虚拟机增加硬盘,选IDE模式,而非SCSI,设定硬盘大小和文件名就可以了.
- TP框架基础(一)
[使用框架] 官网:thinkphp.cn. 目前建议使用thinkPHP3.2版本 一.结构目录>Thinkphp文件夹,是thinkPHP的核心文件,里面的内容是不允许我们修改的 > ...
- .Net微信网页开发之使用微信JS-SDK调用微信扫一扫功能
前言: 之前有个项目需要调用微信扫描二维码的功能,通过调用微信扫码二维码功能,然后去获取到系统中生成的二维码信息.正好微信JS-SDK提供了调用微信扫一扫的功能接口,下面让我们来看看是如何实现的吧. ...
- gRPC in ASP.NET Core 3.0 -- Protocol Buffer(1)
现如今微服务很流行,而微服务很有可能是使用不同语言进行构建的.而微服务之间通常需要相互通信,所以微服务之间必须在以下几个方面达成共识: 需要使用某种API 数据格式 错误的模式 负载均衡 ... 现在 ...
- NPM - 检查并更新项目依赖的版本
原文地址:https://acme.top/nodejs-npm-check-updates 前言 经常会遇到 package.json 中的库有更新,但是太多一个一个的来很费事,幸好有个工具 npm ...
- iOS Xcode6 新建OC Category文件
首先:File -> New File 接下来界面如下,选择Objective-C File,然后Next 在这里选择 Category 即可
- Ping、Traceroute工作原理
在工作开发过程中,我们经常会使用到ping和traceroute.在这里,我们将细述其工作原理,让你在会用的基础之上理解其内部工作过程. ICMP应用实例--Ping Ping 是 ICMP 的一个重 ...
- mysql5.7.18-winx64安装
win10下装mysql-5.7.18-winx64 步骤1 官网下载地址:https://dev.mysql.com/downloads/mysql/ 选择手动安装版: 解压到D盘mysql文件夹下 ...