MarcosJava【SpringBoot⼊门(六)之Thymeleaf模板引擎的使⽤】
前⾔
本节呢给⼤家介绍⼀个新鲜 “玩意⼉” 叫做Thymeleaf,Thymeleaf翻译过来就是 “百⾥⾹叶” 的意思
我发现这些⼤佬⼉特别喜欢⽤叶⼦作为标识啊,不过我个⼈还是挺喜欢这绿叶⼦ (不是绿帽⼦!)。说了半天这东西是⼲啥的呢?客官们接着往下看~
什么是Thymeleaf模板
简单来说,Thymeleaf 是⼀个跟 Velocity、FreeMarker 类似的模板引擎,它可以完全替代 JSP,实现⽹页的 “动态化” ,相较与其他的⼏个模板引擎,它有如下三个吸引⼈的特点:
1)Thymeleaf在有⽹络和⽆⽹络的环境下皆可运⾏,即它可以让美⼯在浏览器查看页⾯的静态效果,也数字推盘游戏9格下载
properties文件用什么打开可以让程序员在服务器查看带数据的动态页⾯效果。这是由于它⽀持html 原型,然后在 html 标签⾥增加额外的属性来达到模板+数据的展⽰⽅式。浏览器解释html 时会忽略未定义的标签属性,所以thymeleaf 的模板可以静态地运⾏;当有数据返回到页⾯时,Thymeleaf 标签会动态地替换掉静态内容,使页⾯动态显⽰。
2)Thymeleaf 开箱即⽤的特性。它提供标准和spring标准两种⽅⾔,可以直接套⽤模板实现JSTL、
OGNL表达式效果,避免每天套模板、该jstl、改标签的困扰。同时开发⼈员也可以扩展和创建⾃定义的⽅⾔。
3)Thymeleaf 提供spring标准⽅⾔和⼀个与 SpringMVC完美集成的可选模块,可以快速的实现表单绑定、属性编辑器、国际化等功能。
总⽽⾔之在今后的开发中我们也不会再使⽤jsp,转⽽使⽤Thymeleaf模板替代它,毕竟它是为Spring “量⾝定做” 的。
Thymeleaf的相关语法
javascript数组自学1,简单表达式
  1、变量的表达式:${…}
  2、选择变量表达式:*{…}
  3、信息表达式:#{…}
  4、链接URL表达式:@{…}
2,字⾯值 th:text
  1、⽂本⽂字:‘one text’, ‘Another one!’,…
  2、⽂字数量:0, 34, 3.0, 12.3,…
  3、布尔型常量:true, false
  4、空的⽂字:null
  5、⽂字标记:one, sometext, main,… 
3,⽂本处理
  1、字符串并置:+
  2、⽂字替换:|The name is ${name}| 
html悬浮导航栏4,表达式基本对象
  1、#ctx:上下⽂对象
  2、#vars:上下⽂变量
  3、#locale:上下⽂语⾔环境
  4、#httpServletRequest:(只有在Web上下⽂)HttpServletRequest对象
  5、#httpSession:(只有在Web上下⽂)HttpSession对象。
5,实⽤⼯具对象 
  1、#dates: java.util的实⽤⽅法。对象:⽇期格式、组件提取等.
  2、#calendars:类似于#⽇期,但对于java.util。⽇历对象
  3、#numbers:格式化数字对象的实⽤⽅法。
  4、#strings:字符串对象的实⽤⽅法:包含startsWith,将/附加等。
  5、#objects:实⽤⽅法的对象。
  6、#bools:布尔评价的实⽤⽅法。
  7、#arrays:数组的实⽤⽅法。指针数组的数组名指向谁
  8、#lists:list集合。
  9、#sets:set集合。
  10、#maps:map集合。
  11、#aggregates:实⽤程序⽅法⽤于创建聚集在数组或集合.
  12、#messages:实⽤程序⽅法获取外部信息内部变量表达式,以同样的⽅式,因为它们将获得使⽤# {…}语法
  13、#ids:实⽤程序⽅法来处理可能重复的id属性(例如,由于迭代)。
SpringBoot项⽬Thymeleaf模板页⾯存放位置
之前我们的jsp页⾯都是存放在webapps中的/WEB-INF/view中,避免外部请求直接通过.jsp的⽅式访问到这个页⾯,那么Thymeleaf页⾯也应该有⾃⼰的储存的位置对吧?为了到答案,我们来看看它的源码,看看能否到些线索。咱们先到Thymeleaf模板在SpringBoot 中存放的位⼦,瞅瞅它⾥⾯的结构。
发现Thymeleaf包中有三个类,我们选择打开第⼀个⾃动配置的类来看看
根据之前的经验,我们可以初步的分析出ThymeleafAutoConfiguration是依赖TemplateMode.class, SpringTemplateEngine.class这两个类的,另外@AutoConfigureAfter({ WebMvcAutoConfiguration.class, WebFluxAutoConfiguration.class })这个注解之前没有讲过,我来提⼀下,它的意思就是当前类需要等待被{ }包裹的类加载完之后才能被加载。
那好奇⼼⼜勾起了我,到底是什么类这么⽜,这么有⾯⼦还需要先加载?
说时迟那时快,我点开WebMvcAutoConfiguration,发现这不正是我们之前分析SpringBoot不需要任何配置就能启动的 “灵魂之源”WebMvc⾃动装配器么?好吧,打扰了,确实Thymeleaf必须要等配置齐全了才能运⾏…
好,不能再跑偏了,别忘了我们还⾝负重任!仔细想想,要到存放你的 “窝” ,那肯定是放在配置⽂件中写死了的,看有没有啥和配置⽂件搭边的。按照刚才的推想,到⼀个properties⽂件?
private final ThymeleafProperties properties;
点开看看⾥⾯有没有我们想要的东西。
果然!到了Thymeleaf的⽼窝,根据上⾯的信息不难推断,存放Thymeleaf的地⽅就是classpath下的templates⽂件夹,并且他还默认的给我们后⾯加上了.html后缀,这和我们之前的视图解析器的⽤法是不是很类似?
通过这种⽅式,我们想要再控制器中实现页⾯的跳转,直接使⽤ return index(html页⾯的名字)的⽅式就⾏啦~
当然有的朋友想说,我已经习惯了之前存放jsp页⾯的位置,我念旧,不想变动,咋办?
施主既然有要求,贫道⾃然会帮你解决… 难不倒我的。既然我都知道了Thymeleaf内部是啥结构,我就可以改变它!解决以上问题的办法就是创建⼀个l,并完成下⽅的配置就可以了。
好啦,今⽇的开胃菜已经够多了,该上 “主⾷” 了,不然撑不下去的。
创建项⽬
插件下载完成之后,咱们先创建⼀个SpringBoot项⽬,我会带着⼤家看看如何使⽤Thymeleaf,⽐看概念强⼀万倍!
注意了,在Avalilable这⾥搜索thyme,勾选之后,SpringBoot会帮我们导⼊thyme的包
其实SpringBoot中默认的配置了thymeleaf,只不过被<dependencyManagement></dependencyManagement>包裹起来了,因此当我们需要的时候,直接配置,不⽤填写版本号。
Thymeleaf读取xxx.propertis⾥⾯的对象noone