SpringBoot静态资源处理以及自定义静态资源映射
了解SpringBoot自动配置的都应该知道在SpringBoot中一些已经配置好的约定,都可以在XXXAutoConfiguration
中找到相应的源码
SpringBoot对静态资源处理也一样,直接看源码WebMvcAutoConfiguration
类中定义了一个静态内部类WebMvcAutoConfigurationAdapter
,该类有一个addResourceHandlers
方法,该方法就是对静态资源的处理
图片源码上半部分是通过webjars
的方法引入一些静态资源的依赖,如BootStrap
、Jquery
等
下面的配置就是处理项目中自己的静态资源文件了,追溯staticPathPattern
的值
@ConfigurationProperties(prefix = "spring.mvc")
public class WebMvcProperties {
/**
* Path pattern used for static resources.
*/
private String staticPathPattern = "/**";
}
默认“/**”
,当然我们可以在全局配置文件中修改(spring.mvc.staticPathPattern )
继续追溯this.resourceProperties.getStaticLocations()
的值
@ConfigurationProperties(prefix = "spring.resources", ignoreUnknownFields = false)
public class ResourceProperties {
private static final String[] CLASSPATH_RESOURCE_LOCATIONS = {
"classpath:/META-INF/resources/", "classpath:/resources/",
"classpath:/static/", "classpath:/public/" };
/**
* Locations of static resources. Defaults to classpath:[/META-INF/resources/,
* /resources/, /static/, /public/].
*/
private String[] staticLocations = CLASSPATH_RESOURCE_LOCATIONS;
}
默认{ "classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/" }
同样可以在全局配置文件中通过spring.resources.staticLocations
修改
registry.addResourceHandler(staticPathPattern)
.addResourceLocations(getResourceLocations(
this.resourceProperties.getStaticLocations()))
意思就是将所有的静态资源请求(/**)映射到指定的默认四个文件下
说白了就是静态资源的请求,默认都会到这四个文件夹下面去找
这就是为什么访问localhost:8080/login.html
就可以直接访问到static
(或者public
等)下的index.html
文件
从前面分析的默认配置源码可以很清楚的知道怎么修改默认的静态资源访问处理
-
在application.yml全局配置文件中,配置
spring.mvc.staticPathPattern
或者spring.resources.staticLocations
达到自己想要的结果
示例:#修改默认静态资源映射的路径 spring: resources: static-locations: ["classpath:/res/"]
将默认的四个路径替换成了自己配置的一个(默认的将不生效)
(注意数组对象的赋值)- 还可以自定义配置类(就相当于以前的spring项目中编写xml配置文件),然后该类实现
WebMvcConfigurer
接口,并重写addResourceHandlers
方法
示例
@Configuration public class MyWebMvc implements WebMvcConfigurer { /** * 自定义静态资源映射处理 * /** 将所有静态资源请求全部映射到 classpath:/res/ 目录下 * 取代了之前的静态文件映射路径(原来是支持四个路径) */ @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/**").addResourceLocations("classpath:/res/"); } }
效果和上面的是一样的
- 还可以自定义配置类(就相当于以前的spring项目中编写xml配置文件),然后该类实现
上一篇: HttpClient
下一篇: netopeer-manager手册翻译