Spring与后端模板引擎的故事

AlgoStriderX
• 阅读 2056

更多内容,欢迎关注微信公众号:全菜工程师小辉。公众号回复关键词,领取免费学习资料。

现在很多开发,都采用了前后端完全分离的模式,随着近几年前端工程化工具和MVC框架的完善,使得这种模式的维护成本逐渐降低。但是这种模式目前并不利于SEO(前后端分离的SEO问题会慢慢改善),而且某些场景使用模板引擎会更方便,比如说邮件模板以及数据变化不频繁的后台系统。
Spring,确切来说是Spring MVC除了可以实现RESTful web服务之外,还可以使用它提供动态HTML内容。Spring MVC支持多种模板技术,包括Thymeleaf、FreeMarker和JSP等。

什么是模板引擎?

模板引擎(这里特指用于Web开发的模板引擎)是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的文档。
模板引擎的基本机理就是替换(转换),将指定的标签转换为需要的业务数据;将指定的伪语句按照某种流程来变换输出。
Spring与后端模板引擎的故事

SpringMVC和模板引擎的关系

SpringMVC处理请求的流程图:
Spring与后端模板引擎的故事
模板引擎发挥作用是在第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
Spring与后端模板引擎的故事


Freemarker和Velocity的视频解析器:FreemarkerViewResolver和VelocityViewResolver,两种解析器都继承了AbstractTemplateViewResolver

FreeMarker视图解析器继承关系:
Spring与后端模板引擎的故事
Velocity视图解析器继承关系:
Spring与后端模板引擎的故事

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 < JSP

Thymeleaf更接近h5语法,现代模板语法
  • 移植性:

Thymeleaf:移植性强,有Spring生态
Velocity:移植性强,缺少周边生态
JSP:必须是Servlet或者JSP容器

  • 性能:

Themeleaf:解释执行,性能较差(后台用,前台最好别用)
Velocity:解释执行,性能良好(采用了大量反射)
JSP:性能最好,因为先翻译成源码再编译执行,性能优秀

Spring与后端模板引擎的故事

点赞
收藏
评论区
推荐文章
kenx kenx
3年前
个人博客开发之技术选型规划
项目技术1.SpringBoot2.4.7技术栈2.MybatisPlus3.4.xORM框架3.Mysql8.0数据库4.IDEA2021开发工具5.Macpro电脑6.Redis缓存7.Thymeleaf模版引擎项目架构1.打算用现在最流行的架构模式,前后端分离,采用RESTfulAPI规范风格jsonapi
liam liam
3年前
先写API文档还是先写代码?
代码未动,文档先行其实大家都知道API文档先行的重要性,但是在实践过程中往往会遇到很多困难。程序员最讨厌的两件事:1.写文档,2.别人不写文档。大多数开发人员不愿意写API文档的原因是写文档短期收益远低于付出的成本,然而并不是所有人都能够坚持做有长期收益的事情的。作为一个前后端分离模式开发的团队,我们经常会看到这样的场景:前端开发和后端开发在一起
kenx kenx
2年前
SpringBoot定义优雅全局统一Restful API 响应框架
假如现在有一个Java项目,老板让你做项目组长,定义项目基础框架,系统技术架构选型,你应该如何设计一个规范的统一的RestfulAPI响应框架呢思考目前项目开发,都是基于前后端分离模式开发的,基于后端模板引擎那一套,可能已经不适用一些项目开发流程,和当下开
Souleigh ✨ Souleigh ✨
4年前
容易被忽略的5个HTML技巧
对于所有Web开发人员来说,无论你选择的是哪种框架或后端语言,都需要大量使用HTML(超文本标记语言)。各种框架和编程语言可能会此消彼长,但HTML永不会过时。只是,就算HTML的应用如此广泛,这种语言中还是有不少多数开发人员都不了解的标签和属性。而且,尽管市面上有各种模板引擎(例如Pug)可用,但你仍然需要对HTML和CSS
Wesley13 Wesley13
3年前
Java基础12:深入理解Class类和Object类
更多内容请关注微信公众号【Java技术江湖】这是一位阿里Java工程师的技术小站,作者黄小斜,专注Java相关技术:SSM、SpringBoot、MySQL、分布式、中间件、集群、Linux、网络、多线程,偶尔讲点Docker、ELK,同时也分享技术干货和学习经验,致力于Java全栈开发!(关注公众号后回复”资料“即可领取3T免费
Stella981 Stella981
3年前
ASP.NET Core 奇技淫巧之接口代理转发
前言先讲讲本文的开发背景吧..在如今前后端分离的大背景下,咱的客户又有要求啦~要前后端分离~然因为种种原因..没办法用用纯前端的框架(其实是学习成本高,又没钱请前端开发人员)...所以最终决定了一种方案..那就是采用MVC(只处理前端视图层,单纯是为了托管在.netcore上)Webapi的方式来实现前后端分离(讲真,很奇葩)..
Wesley13 Wesley13
3年前
Java基础10:全面解读Java异常
更多内容请关注微信公众号【Java技术江湖】这是一位阿里Java工程师的技术小站,作者黄小斜,专注Java相关技术:SSM、SpringBoot、MySQL、分布式、中间件、集群、Linux、网络、多线程,偶尔讲点Docker、ELK,同时也分享技术干货和学习经验,致力于Java全栈开发!(关注公众号后回复”资料“即可领取3T免费
Wesley13 Wesley13
3年前
Java后端工程师必备书单(从Java基础到分布式)
Java开发工程师一般负责后端开发,当然也有专门做JavaWeb的工程师,但是随着前后端的分离,越来越多的Java工程师需要往大后端方向发展。今天我们就来介绍一下Java后端开发者的书单。首先要感谢一下江南白衣大大的后端书架,让我在初学阶段读到了很多好书,直到现在都印象深刻。我在两年的学习历程中看了很多的书,其中不乏XXX入门到精通,XXX王者
Stella981 Stella981
3年前
DevOps 视角的前后端分离与实战
本文作者:CODING廖红坤前言随着微前端、微服务等技术理念和架构的蓬勃发展,我们已经没必要去讨论为什么要前后端分离这种话题,前后端分离已成为互联网项目开发的标准模式。前后端在各自的领域发展越来越纵深。!1(https://static.oschina.net/uploads/img/202011/03155102_VGNk.
Wesley13 Wesley13
3年前
Java网络编程和NIO详解3:IO模型与Java网络编程模型
微信公众号【Java技术江湖】一位阿里Java工程师的技术小站。(关注公众号后回复”Java“即可领取Java基础、进阶、项目和架构师等免费学习资料,更有数据库、分布式、微服务等热门技术学习视频,内容丰富,兼顾原理和实践,另外也将赠送作者原创的Java学习指南、Java程序员面试指南等干货资源)!(https://imgblog.
Velocity不用愁!Velocity系统的前端工程化之路 | 京东云技术团队
Velocity是一个基于Java的Web页面模版引擎。十多年前,Velocity将Java代码从Web页面中分离出来,使得开发者能够并行网页开发和Java开发。随着十年前后端分离的浪潮涌动,回首再面对这些基于Velocity的旧系统,无论是后端还是前端人员维护,都会存在诸多问题:
AlgoStriderX
AlgoStriderX
Lv1
离别家乡岁月多,近来人事半消磨。
文章
3
粉丝
0
获赞
0