Spring与后端模板引擎的故事

摘要:
更多信息,请关注微信公众号:小慧,全课程工程师。回复公众号上的关键词并获得免费学习材料。如今,许多开发商已经采用了前端和后端完全分离的模式。随着近年来前端工程工具和MVC框架的改进,这种模式的维护成本逐渐降低。然而,这种模式目前不利于SEO(前端和后端分离的SEO问题将逐步改善),在某些场景下使用模板引擎更方便,例如数据变化不频繁的电子邮件模板和后台系统。确切地说,Spring是Spring MVC

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

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

什么是模板引擎?

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

SpringMVC和模板引擎的关系

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
JSP视图解析器继承关系


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

FreeMarker视图解析器继承关系:
FreeMarker视图解析器继承关系
Velocity视图解析器继承关系:
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:性能最好,因为先翻译成源码再编译执行,性能优秀

哎呀,如果我的名片丢了。微信搜索“全菜工程师小辉”,依然可以找到我

免责声明:文章转载自《Spring与后端模板引擎的故事》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇mysql5.7服务器The innodb_system data file 'ibdata1' must be writable导致无法启动服务器MySql免安装版安装配置,附MySQL服务无法启动解决方案下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

WebService与CXF

一:Webservice  1:WebService是干什么的?有什么用? 一言以蔽之:WebService是一种跨编程语言和跨操作系统平台的远程调用规范。 比如,amazon,天气预报系统,淘宝网,校内网,百度等把自己的系统服务以webservice服务的形式暴露出来,让第三方网站和程序可以调用这些服务功能,这样扩展了自己系统的市场占有率 从表面上看,W...

SpringBoot入门 (四) 数据库访问之JdbcTemplate

  本文记录在SpringBoot中使用JdbcTemplate访问数据库。 一 JDBC回顾   最早是在上学时接触的使用JDBC访问数据库,主要有以下几个步骤: 1 加载驱动 Class.forName(Driver) 2 获取数据库连接 conn = DriverManager.getConnection(url, user,password) 3...

java web开发入门四(spring)基于intellig idea

spring  1.spring简介 Spring框架,可以解决对象创建以及对象之间依赖关系的一种框架。                           且可以和其他框架一起使用;Spring与Struts,  Spring与hibernate                           (起到整合(粘合)作用的一个框架) Spring提供了一...

Spring的模块组成

Spring的模块组成 1、核心容器:核心容器提供 Spring 框架的基本功能(Spring Core)。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。 BeanFactory 使用控制反转(IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。 2、Spring 上下文:Spring 上下文是一个配置文件,向 Spr...

Spring batch学习 (1)

          Spring Batch 批处理框架 埃森哲和Spring Source研发                          主要解决批处理数据的问题,包含并行处理,事务处理机制等。具有健壮性 可扩展,和自带的监控功能,并且支持断点和重发。让程序员更加注重于业务实现。           Spring Batch 结构如下      ...

JSP介绍

1. 概况答:1) 以文本为基础能够返回动态内容到客户端;2) Http是请求和响应的默认协议;3) 一个页面可以混和html代码、Java代码以及JSP标答;4) 允许访问组件;2. JSP的好处答:1) 通过组件使用支持组件模型和软件重用;2) 源文件改变自动编译;3) 用户自定义标签简化页面开发;4) 能把Web内容, Java代码分开(针对Serv...