Spring Boot处理静态资源

导读:本篇文章讲解 Spring Boot处理静态资源,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

静态资源加载目录优先级

在这里插入图片描述

  • “classpath:/META-INF/resources/”
  • “classpath:/resources/”
  • “classpath:/static/”
  • “classpath:/public/”
  • webapp

静态资源拦截源码分析

分析WebMvcAutoConfiguration类:

addResourceHandler(registry, this.mvcProperties.getStaticPathPattern(), (registration) -> {
				registration.addResourceLocations(this.resourceProperties.getStaticLocations());
				if (this.servletContext != null) {
					ServletContextResource resource = new ServletContextResource(this.servletContext, SERVLET_LOCATION);
					registration.addResourceLocations(resource);
				}
			});

其中getStaticPathPattern()方法是拦截路径,staticPathPattern = “/**”,拦截所有的静态资源,getStaticLocations()方法是拿到静态资源的路径,其中有四个路径:

private static final String[] CLASSPATH_RESOURCE_LOCATIONS = { 
				"classpath:/META-INF/resources/",
				"classpath:/resources/", 
				"classpath:/static/", 
				"classpath:/public/" };

紧接着ServletContextResource resource = new ServletContextResource(this.servletContext, SERVLET_LOCATION),将根路径也加入路径数组中

private static final String SERVLET_LOCATION = "/";

这就组成了静态资源加载的所有目录

自定义资源加载目录

在这里插入图片描述
我们要访问dong文件夹下的01.html的时候,直接请求/dong/01.html是不可以进行访问的,所以我们必须要进行处理

  • application.properties配置
    在这里插入图片描述
    在这里插入图片描述
    增加配置:
spring.web.resources.static-locations=classpath:/

可以直接用请求/dong/01.html访问

spring.web.resources.static-locations=classpath:/dong/

可以直接用请求/01.html访问
在这里插入图片描述
在这里插入图片描述
增加配置:

spring.web.resources.static-locations=classpath:/
spring.mvc.static-path-pattern=/**

可以直接用请求/dong/01.html访问

spring.web.resources.static-locations=classpath:/dong/
spring.mvc.static-path-pattern=/**

可以直接用请求/01.html访问

spring.web.resources.static-locations=classpath:/dong/
spring.mvc.static-path-pattern=/dong/**

可以直接用请求/dong/01.html访问

总结一下就是,拿到请求路径中static-path-pattern中的配置/** 的 **部分,将这一部分加在static-locations路径后面,在项目中文件目录寻找静态资源

  • 对象配置
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/dong/**")
        .addResourceLocations("classpath:/dong/");
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/15765.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!