springboot静态资源导入

Posted Fire king

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springboot静态资源导入相关的知识,希望对你有一定的参考价值。

springboot静态资源导入

1.classpath:/META-INF/resources/webjars/

public void addResourceHandlers(ResourceHandlerRegistry registry) {
//如果自定义,那么下面源码中默认的就会失效
            if (!this.resourceProperties.isAddMappings()) {
            //默认资源处理不可用
                logger.debug("Default resource handling disabled");
            } else {
                Duration cachePeriod = this.resourceProperties.getCache().getPeriod();
                CacheControl cacheControl = this.resourceProperties.getCache().getCachecontrol().toHttpCacheControl();
                //只要访问访问localhost:port/webjars/就会映射到/META-INF/resources/webjars/,从依赖包/META-INF/resources/webjars/下获取相应的资源
                if (!registry.hasMappingForPattern("/webjars/**")) {
                //从依赖包/META-INF/resources/webjars/下获取相应的资源
                    this.customizeResourceHandlerRegistration(registry.addResourceHandler(new String[]{"/webjars/**"}).addResourceLocations(new String[]{"classpath:/META-INF/resources/webjars/"}).setCachePeriod(this.getSeconds(cachePeriod)).setCacheControl(cacheControl));
                }

                String staticPathPattern = this.mvcProperties.getStaticPathPattern();
                if (!registry.hasMappingForPattern(staticPathPattern)) {
                    this.customizeResourceHandlerRegistration(registry.addResourceHandler(new String[]{staticPathPattern}).addResourceLocations(WebMvcAutoConfiguration.getResourceLocations(this.resourceProperties.getStaticLocations())).setCachePeriod(this.getSeconds(cachePeriod)).setCacheControl(cacheControl));
                }

            }
        }

例子:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. this.staticPathPattern = "/**

 public void addResourceHandlers(ResourceHandlerRegistry registry) {
            if (!this.resourceProperties.isAddMappings()) {
                logger.debug("Default resource handling disabled");
            } else {
                Duration cachePeriod = this.resourceProperties.getCache().getPeriod();
                CacheControl cacheControl = this.resourceProperties.getCache().getCachecontrol().toHttpCacheControl();
                if (!registry.hasMappingForPattern("/webjars/**")) {
                    this.customizeResourceHandlerRegistration(registry.addResourceHandler(new String[]{"/webjars/**"}).addResourceLocations(new String[]{"classpath:/META-INF/resources/webjars/"}).setCachePeriod(this.getSeconds(cachePeriod)).setCacheControl(cacheControl));
                }

//追踪getStaticPathPattern()方法
                String staticPathPattern = this.mvcProperties.getStaticPathPattern();
                if (!registry.hasMappingForPattern(staticPathPattern)) {
                    this.customizeResourceHandlerRegistration(registry.addResourceHandler(new String[]{staticPathPattern}).addResourceLocations(WebMvcAutoConfiguration.getResourceLocations(this.resourceProperties.getStaticLocations())).setCachePeriod(this.getSeconds(cachePeriod)).setCacheControl(cacheControl));
                }

            }
        }

得到this.staticPathPattern = "/**"也就是说localhost:port/下所有资源都可以访问

 public WebMvcProperties() {
        this.localeResolver = WebMvcProperties.LocaleResolver.ACCEPT_HEADER;
        this.dispatchTraceRequest = false;
        this.dispatchOptionsRequest = true;
        this.ignoreDefaultModelOnRedirect = true;
        this.publishRequestHandledEvents = true;
        this.throwExceptionIfNoHandlerFound = false;
        this.logResolvedException = false;
        this.staticPathPattern = "/**";
        this.async = new WebMvcProperties.Async();
        this.servlet = new WebMvcProperties.Servlet();
        this.view = new WebMvcProperties.View();
        this.contentnegotiation = new WebMvcProperties.Contentnegotiation();
        this.pathmatch = new WebMvcProperties.Pathmatch();
    }
 public void addResourceHandlers(ResourceHandlerRegistry registry) {
            if (!this.resourceProperties.isAddMappings()) {
                logger.debug("Default resource handling disabled");
            } else {
                Duration cachePeriod = this.resourceProperties.getCache().getPeriod();
                CacheControl cacheControl = this.resourceProperties.getCache().getCachecontrol().toHttpCacheControl();
                if (!registry.hasMappingForPattern("/webjars/**")) {
                    this.customizeResourceHandlerRegistration(registry.addResourceHandler(new String[]{"/webjars/**"}).addResourceLocations(new String[]{"classpath:/META-INF/resources/webjars/"}).setCachePeriod(this.getSeconds(cachePeriod)).setCacheControl(cacheControl));
                }

                String staticPathPattern = this.mvcProperties.getStaticPathPattern();
                //追踪this.resourceProperties.getStaticLocations()方法
                if (!registry.hasMappingForPattern(staticPathPattern)) {
                    this.customizeResourceHandlerRegistration(registry.addResourceHandler(new String[]{staticPathPattern}).addResourceLocations(WebMvcAutoConfiguration.getResourceLocations(this.resourceProperties.getStaticLocations())).setCachePeriod(this.getSeconds(cachePeriod)).setCacheControl(cacheControl));
                }

            }
        }

在这里插入图片描述

3,classpath:/META-INF/resources/", “classpath:/resources/”, “classpath:/static/”, "classpath:/public/

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

共有5个路径,分别为"/**",“classpath:/META-INF/resources/”, “classpath:/resources/”, “classpath:/static/”, “classpath:/public/”;其中"classpath:/META-INF/resources/"为webjars路径

在这里插入图片描述
实操:
访问http://localhost:8081/1.js
在这里插入图片描述
在这里插入图片描述
实操2:访问http://localhost:8081/验证public和resources下的资源优先级
事实证明resources>public
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
实操3:验证3个目录的优先级
resources(mapper等配置文件)>static(静态资源)>public(公共资源)
在这里插入图片描述

1.说明resources是最高的
在这里插入图片描述
2.说明static>public
在这里插入图片描述
在这里插入图片描述
自定义路径:
源码中默认的就会失效
在这里插入图片描述
在这里插入图片描述

以上是关于springboot静态资源导入的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot--静态资源导入

入门SpringBoot-关于那些静态资源

SpringBoot - SpringBoot Web开发

SpringBoot静态资源

springspringboot静态资源导入探究

5.1 员工管理系统之导入静态资源