Spring Boot:静态资源导入源码分析、Thymeleaf 模板引擎、扩展 SpringMVC 配置

发布时间:2023年12月25日

Spring Boot - 02

一、静态资源导入

静态资源导入的相关源码在:自动配置类 WebMvcAutoConfiguration 中的 addResourceHandlers 方法。

注意:参数 pattern 和 location 相对应,根据 url 路径可以访问到项目中指定路径的静态资源

说明:默认有两种方式可以处理(找到)静态资源:

  • 方式一:webjars,需要导入依赖;
  • 方式二:自动配置好的,通过源码可以看到,这里默认
    • url/**
    • location 有四种为:
      • classpath:/META-INF/resources/
      • classpath:/resources/
      • classpath:/static/
      • classpath:/public/

可以发现,在类路径下可以创建 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 就可以进行自动装配。

注意

  1. 注册的 bean 的 id 为方法名,class 为返回值的类型
  2. Spring Boot 在自动装配组件时,用户自己配置的组件会优先装配,如果没有,则使用默认配置的。

总结:在 Spring Boot 中有非常多的 xxxConfiguration 配置类,作用是在自动配置类的基础上进行扩展配置增加配置或修改配置)。

补充:扩展 SpringMVC 配置不能加注解 @EnableWebMvc 声明,原因如下

注解 @EnableWebMvc 的作用是导入了 DelegatingWebMvcConfiguration 类,该类继承了 WebMvcConfigurationSupport

而 WebMvc 自动配置类 WebMvcAutoConfiguration 生效的条件之一就是:不导入 WebMvcConfigurationSupport

加了注解 @EnableWebMvc 就会使得 WebMvc 自动配置类 WebMvcAutoConfiguration 失效


注意:

  1. 将一个类中的所有方法折叠Ctrl + Shift + -单个方法折叠Ctrl + -展开方法+ 代替 -
  2. 查找类Shift + Shift在类中查找Ctrl + F
  3. Thymeleaf 官网:https://www.thymeleaf.org/
文章来源:https://blog.csdn.net/taiyang3285/article/details/135186462
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。