专栏首页后端开发你必须学会的干货Spring与后端模板引擎的故事

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

Thymeleaf更接近h5语法,现代模板语法

  • 移植性: Thymeleaf:移植性强,有Spring生态 Velocity:移植性强,缺少周边生态 JSP:必须是Servlet或者JSP容器
  • 性能: Themeleaf:解释执行,性能较差(后台用,前台最好别用) Velocity:解释执行,性能良好(采用了大量反射) JSP:性能最好,因为先翻译成源码再编译执行,性能优秀

本文分享自微信公众号 - 全菜工程师小辉(mseddl),作者:全菜工程师小辉

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 快速了解TCP的流量控制与拥塞控制

    数据的传送过程中很可能出现接收方来不及接收的情况,这时就需要对发送方进行控制以免数据丢失。利用滑动窗口机制可以很方便地在TCP连接上对发送方的流量进行控制。TC...

    全菜工程师小辉
  • JVM内存模型和垃圾回收机制

    有的博客称方法区是永久代,那是因为前者是JVM的规范,而后者则是JVM规范的一种实现,并且只有HotSpot才有永久代,

    全菜工程师小辉
  • Redis的高级特性一览

    慢查询只记录Redis在处理存储的时间计数(图中的3步骤),并不包含网络通信时间和排队时间,所以客户端超时分析时要综合每个因素。

    全菜工程师小辉
  • 浅谈重构中踩过的坑

    ? 最近重构了公司一个将近10年的核心功能模块,踩了不少坑。在做这个重构的时候好几次都觉得做不下去,好几次压力都非常大,心想着我该不会做着做着就退出编程届了吧...

    陈树义
  • AI改变社交媒体的5种方式:美国最顶尖的社交媒体如何使用AI技术

    AI领域的投资一直在增长,预计今年余下时间将会增长约300%。超过25亿人都在使用社交媒体,占世界人口的三分之一。而且AI在帮助企业与网络潜在客户进行沟通方面发...

    新智元
  • 5️⃣蛋白质的特征信息3:卷曲螺旋预测

    Y大宽
  • 探索G1垃圾回收器

    最近王子因为个人原因有些忙碌,导致文章更新比较慢,希望大家理解,之后也会持续和小伙伴们一起共同分享技术干货。

    HUC思梦
  • Web安全之SQL注入及弱口令

    Web安全之SQL注入实战一、概述 按照百科解释,所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执...

    企鹅号小编
  • 蓝牙AVDTP协议

    AVDTP协议指定音频或视频分发的传输协议,简称AVDTP,通过蓝牙空中传输流媒体音频或视频。音频和视频数据流需要同步的数据传输能力,A/V分发传输协议的传输机...

    心跳包
  • 看好VR社交的并不只有Facebook,YouTube、SteamVR也进来掺了一脚

    VRPinea

扫码关注云+社区

领取腾讯云代金券