熊dei们,别着急,咱们先来谈谈为啥开始用Thymeleaf模板引擎,先照顾照顾下咱们这些可爱的小白童鞋....javascript
为啥开始用Thymeleaf模板引擎?jsp她不香嘛?
首先前端交给咱们的页面,是html页面,若是是咱们以前开发,咱们须要把他们转成jsp页面,jsp好处就是当咱们查出一些数据转发到JSP页面之后,咱们能够用jsp轻松实现数据的显示,及交互等。jsp支持很是强大的功能,包括能写Java代码.......是的先给jsp一顿夸。html
可是呢,SpringBoot项目是以jar的方式,不是war方式,并且SpringBoot用的仍是嵌入式的Tomcat,因此呢,他如今默认是不支持jsp的.......是的而后给jsp反手一嘴巴子。前端
那不支持jsp,若是咱们直接用纯静态页面的方式,那给咱们开发会带来很是大的麻烦,那怎么办呢,SpringBoot推荐使用模板引擎。模板引擎有不少种,好比Thymeleaf
、Velocity
、FreeMarker
,不过思想都是一致的,这个就没必要担忧,springboot推荐使用Thymeleaf
,固然基本上程序员用的都是Thymeleaf模板引擎,在业界Thymeleaf模板引擎是业界的一致好评。java
如今不都先后端分离了么?Vue她不香嘛?
虽然如今慢慢在流行先后端分离开发,可是仍是有一些“灵玩不灵”
的公司依旧在作先后端不分的开发,而在先后端不分的开发中,咱们就会须要后端页面模板引擎【实际上,即便先后端分离,也会在一些场景下须要使用页面模板,举个典型的栗子:邮件发送模板
】。程序员
随着科技的发展,社会在进步,企业在奔跑,程序员在咆哮。醒醒吧年轻人,如今都2020年,在以前不免会听到或者看到网上的文章什么的说第一步要导入Thymeleaf模板依赖包,说啥在以往的版本中默认是Thymeleaf 是2.1.6x , 开发要基于3.x,而后又要在pom.xml的properties标签中写下如下两句代码web
<thymeleaf.version>3.0.9.RELEASE</thymeleaf.version> <thymeleaf-layout-dialect.version>2.2.2</thymeleaf-layout-dialect.version>
说是布局功能的支持程序须要 thymeleaf3主程序、 layout2以上版本,也就是说手动把3.x的thymeleaf覆盖掉依赖中的2.x。spring
说了一大堆,我只想说一句:如今的版本基本默认都是thymeleaf3.x,如今2020年了,就算是学生仔学习基本都是SpringBoot2.X版本了。若是你还在用SpringBoot1.X,那咱们不合适,你是个好人。编程
若是仍是不肯定,你大可进行以下操做,检查检查thymeleaf版本:
后端
得,说(扯)了一大堆,不如来整:
想上面,可能不一样的idea版本会出现选择SpringBoot版本不一样的状况,这很正常,人生建议:无论啥都不要追求最新版,你用起来好像很牛皮很高端,同时一根烟一行bug改一天的样子也是很是潇洒~狼狈~的,这里我就很少概述了。设计模式
勾选Thymeleaf以后,建立完成后,pom.xml 依赖会默认以下:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
也就是说,以及导入Thymeleaf依赖了,不须要再导了。到这里基本上能够说是整合完成了,接下来说讲Thymeleaf的强大功能。
Thymeleaf渲染规则,能够找到它的自动配置文件便可查看它的使用规则,以下:
关键代码:
@ConfigurationProperties(prefix = "spring.thymeleaf") public class ThymeleafProperties { private static final Charset DEFAULT_ENCODING = StandardCharsets.UTF_8; public static final String DEFAULT_PREFIX = "classpath:/templates/"; public static final String DEFAULT_SUFFIX = ".html"; private boolean checkTemplate = true; private boolean checkTemplateLocation = true; private String prefix = DEFAULT_PREFIX; private String suffix = DEFAULT_SUFFIX; private String mode = "HTML"; private Charset encoding = DEFAULT_ENCODING; private boolean cache = true; //...
分析源码,过程以下:
一、首先经过 @ConfigurationProperties 注解,将 application.properties 前缀为 spring.thymeleaf 的配置和这个类中的属性绑定。
二、前三个 static 变量,定义了默认的编码格式、视图解析器的前缀、后缀等。
三、根据前三行配置,能够看出,Thymeleaf 模板的默认位置在 resources/templates 目录>下,默认的后缀是 html 。
注意:这些配置,若是开发者不本身提供,则使用 默认的,若是本身提供,则在 application.properties 中以 spring.thymeleaf 开始相关的配置。
是的,简单来讲默认规则以下:
默认前缀:
DEFAULT_PREFIX = "classpath:/templates/"
默认后缀:
DEFAULT_SUFFIX = ".html"
彻底相似 Spring MVC 的映射,固然若是要修改这些配置只须要在全局配置文件中覆盖修改便可,咱们通常不覆盖,除非特殊需求。
还须要说起一点的是Spring Boot 为 Thymeleaf 提供的自动化配置类 org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration
,其中部分关键源码以下:
@Configuration @EnableConfigurationProperties(ThymeleafProperties.class) @ConditionalOnClass({ TemplateMode.class, SpringTemplateEngine.class }) @AutoConfigureAfter({ WebMvcAutoConfiguration.class, WebFluxAutoConfiguration.class }) public class ThymeleafAutoConfiguration { //.... }
分析:
从源码中能够看到,这个自动化配置类中,首先
@EnableConfigurationProperties
导入 ThymeleafProperties ,而后@ConditionalOnClass
注解表示当前系统中存在 TemplateMode 和 SpringTemplateEngine 类时,当前的自动化配置类才会生效,即只要项目中引入了 Thymeleaf 相关的依赖,这个配置就会生效。
这些默认的配置咱们几乎不须要作任何更改就能够直接使用了。若是有特殊需求,则能够在 application.properties
中配置以 spring.thymeleaf
开头的属性就能够本身量身定制了,固然我是不可能有这种需求的,除非有人要打我,不然想不想要想我会有这种需求癖好。若是非要改建议参考SpringBoot官方文档
是的,以上步骤谁都会,只有测试整合Thymeleaf成功以后才算是整合完成了,也就是这个阶段各类缘由的错误就出来了。
首先编写Controller代码,咱也不写的那么复杂,demo怎么简单怎么来
@Controller public class HelloController { @GetMapping("/su") public String success(){ return "success"; // 至关于访问 classpath:/templates/success.html } }
编写页面代码,千万注意这个页面代码要在classpath:/templates/
目录下
代码以下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>整合Thymeleaf已经success哈哈哈哈</h1> </body> </html>
访问http://localhost:8080/su
如上效果则说明整合成功。
这种异常很常见具体的还得看异常的信息,好比上面说是页面路由出现了环,等同于循环引用了,多是本身的访问路径名和HTML文件重名了,不妨改个请求路径试试。
再好比,下面总的来讲具体看打印信息
这里概括一下异常缘由并解决:
一、Application启动类的位置不对:要将Application类放在最外侧,即包含全部子包 ,spring-boot会自动加载启动类所在包下及其子包下的全部组件。若是启动类没有放在最外侧就会报错,正确位置以下:
二、springboot的配置文件有误:关于application.yml
或application.properties
文件中视图解析器的配置问题。在pom
文件下的spring-boot-starter-paren
版本较高时使用配置:spring.mvc.view.prefix/spring.mvc.view.suffix
版本较低时使用配置:spring.view.prefix/spring.view.suffix
三、控制器的url访问路径与注解@XXXMapping("/xxxx")不匹配,以下图所示:
四、最后这个缘由就特别坑了喔,你会发现上面你都符合了可是依旧仍是报错,这就很神奇了,其实我就是这个缘由被坑了一上午————版本过高了 。可能你会说idea默认选择的时候都是2.1.X往上,基本没有本身想要的版本,其实这都不是很大的问题,其实能够在pom.xml中修改便可,以下:
若是这过程还有异常发生,让你参生恐惧,记住,打败恐惧的最好办法就是面对恐惧,醒醒吧年轻人,一giao我哩giaogiao嗷..嗷嗷嗷..嗷嗷嗷嗷..嗷嗷嗷嗷嗷............................奥利给!!!
若是本文对你有一点点帮助,那么请点个赞呗,谢谢~
最后,如有不足或者不正之处,欢迎指正批评,感激涕零!若是有疑问欢迎留言,绝对第一时间回复!
欢迎各位关注个人公众号,里面有一些java学习资料和一大波java电子书籍,好比说周志明老师的深刻java虚拟机、java编程思想、核心技术卷、大话设计模式、java并发编程实战.....都是java的圣经,不说了快上Tomcat车,咋们走!最主要的是一块儿探讨技术,向往技术,追求技术,说好了来了就是盆友喔...
参考:
SpringBoot官方文档:https://docs.spring.io/spring-boot/docs/2.0.3.RELEASE/
http://www.imooc.com/article/293021
https://blog.csdn.net/qushaming/article/details/94593675