spring boot 对 web 静态资源的管理

经过前两篇文章我们知道spring boot最大的功能就是自动配置。主要是通过以下两个类实现该功能:

  • xxxxAutoConfiguration :帮我们给容器中自动配置组件
  • xxxxProperties : 配置类来封装配置文件的内容

进行web应用开发的时候,也是需要这两个类来给我们自动配置,这两个类是:WebMvcAutoConfigurationResourceProperties ,通过它们来管理一些静态资源。

WebMvcAutoConfiguration是如何映射静态资源的呢

以jar包的方式引入静态资源

(1) 什么是以jar包形式管理静态资源呢?
我们进行web项目开发时,经常会用到 jquery.js ,以前的做法是把 jquery 源文件放到项目的类路径资源文件中,现在可以不用这么做,可以以jar包的形式引入到项目中:访问webjar的官网:https://www.webjars.org/,找到 jquery ,然后引入到 pom 文件中

clipboard.png
(2) 那当web项目启动时,是如何找 jquery 的呢?看源码 WebMvcAutoConfiguration 中有一个 addResourceHandlers 方法:

clipboard.png

红色线框中的这段代码告诉我们如果项目路径 classpath:/META-INF/resources/webjars/ 存在,先去这里找静态资源文件。

clipboard.png
然后可以通过:localhost:8080/webjars/jquery/3.3.1-1/jquery.js 访问静态资源

项目的资源文件夹中管理静态资源文件

如果我们的项目没有通过webjar的形式引入静态资源文件,我们只能去类路径下的资源文件夹中找静态资源了,看 WebMvcAutoConfigurationaddResourceHandlers 方法

clipboard.png

this.resourceProperties.getStaticLocations() 是什么?

clipboard.png

表示我们可以去以下路径中找资源文件:

classpath:/META‐INF/resources/
classpath:/resources/
classpath:/static/
classpath:/public/

spring mvc 的自动配置

spring boot 默认对 spring mvc做了如下配置

  • ContentNegotiatingViewResolver and BeanNameViewResolver
  • 默认支持静态资源文件夹,webjar形式访问静态资源
  • 自动注册了Converter, GenericConverter 和 Formatter
  • 默认支持 HttpMessageConverters
  • 默认支持 MessageCodesResolver
  • 默认使用 ConfigurableWebBindingInitializer

扩展spring mvc

自定义一个配置类(@Configuration),该配置类是 WebMvcConfigurer 接口的实现类,且该配置类不能使用 @EnableWebMvc 标注

spring boot对spring mvc的自动配置介绍


一只小小鸟
144 声望25 粉丝

如何做一个深层次的思考者,从简单开始、从记录开始。