【SpringBoot】Thymeleaf助力Web项目

2019-04-21  本文已影响0人  瑞瑞余之

Thymeleaf是个XML/XHTML/HTML5模板引擎,模版引擎怎么理解呢,想想jsp就可以理解。顺便声明一点的是Thymeleaf的发音:[taɪm lif]。

一说到Java Web的模版引擎,我们第一反应往往是jsp,但是如果你是基于Springboot搭建Java Web,官方建议尽量避免jsp哦:

|If possible, JSPs should be avoided. There are several known limitations when using them with embedded servlet containers.

对于Thymeleaf

**目录结构
Thymeleaf模版基于HTML或XML文件,学习成本与阅读成本相对较低,在工程项目resource中创建两个文件夹:static和template,其中static中存在静态文件,如项目所需的js、css文件,template中则存放后缀为html的模版文件。


image.png

当Springboot在启动过程中,会自动加载这两个文件夹中的对应文件。什么意思呢?从使用效果上看,Thymeleaf管理下的模版文件和Springboot中的业务代码是前后端分离的,这种机制实现了业务逻辑层和展示层的解耦,既然是分离,我们不妨思考一下它们两者之间如何实现数据交互。数据交互的方向是两条,一是后端Controller如何找到对应template并传送相应数据,二是template将业务请求给到Controller进而实现逻辑计算。

    public String getSampleResult(Model model) {
        model.addAttribute("name", "tony");
        return "customizeFolderUnderTemplate/index"
    }

有一个坑在这里提醒大家,在SpringBoot中我们使用注解时,如果有View层的渲染,应该使用@Cotroller类而非@RestCntroller,因为后者默认支持Restful,所以返回的数据形式是json而非View。以上实现了从后到前的页面渲染和数据传输。在渲染这个方面还存在fragment的渲染方式,这一点下一章进行介绍。

说说Thymeleaf的坏话
暂且不从性能方面考虑(Thymeleaf在性能方面比FreeMarker弱,比Enjoy要强,之后文章会介绍性能方面的测试方法)。但从程序员使用体验来讲,Thymeleaf不能算是很好的选择。其中主要体现在于引擎模版对于Javascript的使用。因为Thymeleaf模版基于Html,所以在展示曾没有问题,使用起来挺顺手。但是在Js方面,Thymeleaf直接使用js,必须是内联的方式,也就是必须通过以下方式进行封装

    <script th:inline="javascript"></script>

也就是说前端的显示(html)和逻辑层(js)不方便分离,因为必须在template中用内联的方式进行声明,举个例子:当我们对一个从后端传到前端的变量,希望经过前端处理之后展示在页面上时,按照Thymeleaf的设计,对这个变量的处理操作必须在html中完成,也就是在html的<script>中完成。当然我们可以通过调用external js中的方法的方式,把这个变量用传参的方式,给到对应的前端处理逻辑,但是在coding层面,我们需要在html手写调用的过程,从这个方面看是比较tricky的。
对Thymeleaf的使用,在第一篇中我是介绍了大概的流程和印象,接下来,我会从使用的方面来介绍支持一般的Web开发场景,如何使用Thymeleaf,尤其是使用过程中的坑及解决方法。

上一篇 下一篇

猜你喜欢

热点阅读