Spring Boot Web应用程序目录映射

Spring Boot 会因为引用web配置,创建一个资源处理器,这个资源处理器把相对于Classpath根目录的
/static
/public
/resources
/META-INF/resources
里的静态内容提供出来。

本人理解:
spring boot 创建的maven项目的classpath 指的是src-main下的目录文件名称,每创建一个文件夹,classpath都会增加一个。

原因:
WebMvcAutoConfiguration里会添加

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

进一步看代码,下面的程序块会被添加到:ResourceHandlerRegistry

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    if (!registry.hasMappingForPattern("/webjars/**")) {
        registry.addResourceHandler("/webjars/**").addResourceLocations(
                "classpath:/META-INF/resources/webjars/");
    }
    if (!registry.hasMappingForPattern("/**")) {
        registry.addResourceHandler("/**").addResourceLocations(
                RESOURCE_LOCATIONS);
    }
}

注意:如果在@Configuration配置类里添加@EnableWebMvc,WebMvcAutoConfiguration里的配置将会失效,你必须逐一配置。
网上很多例子直接写了该注解,如果不是作者本意,那么很多配置都要自己重新配置了。

如果需要添加映射目录,需要定义WebMvcConfigurer接口的实现类。spring 5x和spring boot 2x 废弃了WebMvcConfigurerAdapter。

@Configuration
public class MyWebMvcConfg implements WebMvcConfigurer {

    //todo

}

添加某一目录:
如果你想增加如/mystatic/**映射到classpath:/mystatic/,你可以让你的配置类实现WebMvcConfigurer,然后重写如下方法:

public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/mystatic/**")
            .addResourceLocations("classpath:/mystatic/");
}

网上一些人的心得:
https://www.cnblogs.com/chen110xi/p/6198497.html
这个说的非常好,很清晰。

你可能感兴趣的:(Spring Boot Web应用程序目录映射)