美文网首页程序员
Spring Boot Web应用程序目录映射

Spring Boot Web应用程序目录映射

作者: 柳源居士 | 来源:发表于2018-06-03 22:57 被阅读6次

    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应用程序目录映射

        本文链接:https://www.haomeiwen.com/subject/zlmgrftx.html