Spring Boot:静态资源导入源码分析、Thymeleaf 模板引擎、扩展 SpringMVC 配置
Spring Boot - 02
一、静态资源导入
静态资源导入的相关源码在:自动配置类 WebMvcAutoConfiguration
中的 addResourceHandlers 方法。
注意:参数 pattern 和 location 相对应,根据 url 路径可以访问到项目中指定路径的静态资源。
说明:默认有两种方式可以处理(找到)静态资源:
- 方式一:webjars,需要导入依赖;
- 方式二:自动配置好的,通过源码可以看到,这里默认:
- url 为
/**
; - location 有四种为:
classpath:/META-INF/resources/
;classpath:/resources/
;classpath:/static/
;classpath:/public/
。
- url 为
可以发现,在类路径下可以创建 resources、static、public 文件夹放置静态资源,在 url 中输入文件名就可进行访问。
二、Thymeleaf 模板引擎
背景:
-
现在 Spring Boot 项目是不支持 jsp 的,因为项目打包方式为 jar,并且 Tomcat 服务器为嵌入式的;
-
不支持 jsp 页面,如果直接用纯静态的页面,将不利于开发,因此 Spring Boot 推荐使用 Thymeleaf 模板引擎;
-
模板引擎种类有很多,例如有 jsp、Thymeleaf、freemarker 等等,作用都是可以将数据进行解析,填充到指定的位置。
Thymeleaf 官网:点此进入。
1. 使用
使用 Thymeleaf 模板引擎需要导入启动器:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
<version>2.7.11</version>
</dependency>
打开 Thymeleaf 的自动配置类和属性配置类,可以看到 Thymeleaf 模板引擎需要放到类路径下的 templates 目录下,并且后缀为 html
在 templates 目录下的所有页面,只能通过 controller 来跳转
2. 语法
在头文件中导入约束:xmlns:th="http://www.thymeleaf.org"
具体表达式和语法见 Thymeleaf 的官方参考文档:表达式点此进入、语法点此进入。
所有的 html 元素都可以使用 th + 元素名
来让 Thymeleaf 替换接管
运行
三、扩展 SpringMVC 配置
扩展 SpringMVC 配置的方法:
- 编写一个配置类,实现 WebMvcConfigurer 接口;
- 配置类由注解 @Configuration 声明,表示该类为配置类;
- 可以实现接口的方法,也可以自定义一些特定的功能封装为方法,然后在方法上加注解 @Bean 声明,将 bean 注册在容器中;
- 将组件注册在容器中后,Spring Boot 就可以进行自动装配。
注意:
- 注册的 bean 的 id 为方法名,class 为返回值的类型;
- Spring Boot 在自动装配组件时,用户自己配置的组件会优先装配,如果没有,则使用默认配置的。
总结:在 Spring Boot 中有非常多的 xxxConfiguration
配置类,作用是在自动配置类的基础上进行扩展配置(增加配置或修改配置)。
补充:扩展 SpringMVC 配置不能加注解 @EnableWebMvc 声明,原因如下:
注解 @EnableWebMvc 的作用是导入了 DelegatingWebMvcConfiguration
类,该类继承了 WebMvcConfigurationSupport
类
而 WebMvc 自动配置类 WebMvcAutoConfiguration
生效的条件之一就是:不导入 WebMvcConfigurationSupport
类
加了注解 @EnableWebMvc 就会使得 WebMvc 自动配置类 WebMvcAutoConfiguration
失效。
注意:
- 将一个类中的所有方法折叠:
Ctrl + Shift + -
,单个方法折叠:Ctrl + -
,展开方法用+
代替-
; - 查找类:
Shift + Shift
,在类中查找:Ctrl + F
; - Thymeleaf 官网:https://www.thymeleaf.org/
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!