SpringBoot静态资源处理以及自定义静态资源映射

了解SpringBoot自动配置的都应该知道在SpringBoot中一些已经配置好的约定,都可以在XXXAutoConfiguration中找到相应的源码
SpringBoot对静态资源处理也一样,直接看源码
WebMvcAutoConfiguration类中定义了一个静态内部类WebMvcAutoConfigurationAdapter,该类有一个addResourceHandlers方法,该方法就是对静态资源的处理
在这里插入图片描述
图片源码上半部分是通过webjars的方法引入一些静态资源的依赖,如BootStrapJquery
下面的配置就是处理项目中自己的静态资源文件了,追溯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/");
        }
    }
    

    效果和上面的是一样的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值