【串线篇】spring boot对静态资源的映射规则

WebMvcAutoConfiguration的内部类
WebMvcAutoConfigurationAdapter

 

其中ResourceProperties点进去

其中addResourceHandlers方法

规定了静态资源(jQuery.js/html)的引用位置  

              WebMvcAuotConfiguration:

                       @Override

                       public  void  addResourceHandlers(ResourceHandlerRegistry  registry)  {

                               if  (!this.resourceProperties.isAddMappings())  {

                                        logger.debug("Default  resource  handling  disabled");

                                        return;

                               }

                              Integer  cachePeriod  =  this.resourceProperties.getCachePeriod();

                               if  (!registry.hasMappingForPattern("/webjars/**"))  {

                                        customizeResourceHandlerRegistration(

                                                         registry.addResourceHandler("/webjars/**")

                                                                          .addResourceLocations(

                                                                                            "classpath:/META‐INF/resources/webjars/")

                               .setCachePeriod(cachePeriod)); 15 }

                               String  staticPathPattern  =  this.mvcProperties.getStaticPathPattern();

                               //静态资源文件夹映射

                               if  (!registry.hasMappingForPattern(staticPathPattern))  {

                                        customizeResourceHandlerRegistration(

                                                         registry.addResourceHandler(staticPathPattern)

                                                                          .addResourceLocations(

                                                                                            this.resourceProperties.getStaticLocations())

                               .setCachePeriod(cachePeriod)); 24 }

                      }


  //配置欢迎页映射

                      @Bean

                      public  WelcomePageHandlerMapping  welcomePageHandlerMapping(

                                      ResourceProperties  resourceProperties)  {

                              return  new WelcomePageHandlerMapping(resourceProperties.getWelcomePage(),

                        this.mvcProperties.getStaticPathPattern());

       }

 

 

  //配置喜欢的图标

                      @Configuration

                      @ConditionalOnProperty(value  =  "spring.mvc.favicon.enabled",  matchIfMissing  =  true)


   public  static  class  FaviconConfiguration  {

        private  final  ResourceProperties  resourceProperties;
        public  FaviconConfiguration(ResourceProperties  resourceProperties)  { 

        this.resourceProperties resourceProperties;

}


 


@Bean


public  SimpleUrlHandlerMapping  faviconHandlerMapping()  

 

  SimpleUrlHandlerMapping  mapping  =  new  SimpleUrlHandlerMapping();mapping.setOrder(Ordered.HIGHEST_PRECEDENCE  +  1);

// 所 有 **/favicon.ico

mapping.setUrlMap(Collections.singletonMap("**/favicon.ico"faviconRequestHandler()));

return  mapping;


}


 

@Bean


public  ResourceHttpRequestHandler  faviconRequestHandler()  ResourceHttpRequestHandler  requestHandler  =  new ResourceHttpRequestHandler();

requestHandler.setLocations(this.resourceProperties.getFaviconLocations());

return  requestHandler;

}

}

 

 


 

 

1)、所有 /webjars/** ,都去 classpath:/META-INF/resources/webjars/ 找资源;

 


webjars:以jar包的方式引入静态资源(选择maven方式); http://www.webjars.org/

localhost:8080/webjars/jquery/3.3.1/jquery.js

    <!‐‐引入jquery‐webjar‐‐>在访问的时候只需要写webjars下面资源的名称即可
    <dependency>
    <groupId>org.webjars</groupId>
    <artifactId>jquery</artifactId>
    <version>3.3.1</version>
    </dependency>

2)、"/**" 访问当前项目的任何资源,都去(静态资源的文件夹)找映射

类路径classpath就是Java 与resources

    "classpath:/META‐INF/resources/",即resources下再建/META‐INF/resources/
    "classpath:/resources/",即resources下再建resources
    "classpath:/static/",即resources下再建static
    "classpath:/public/"即resources下再建public
    "/":当前项目的根路径

localhost:8080/abc === 去静态资源文件夹里面找abc

3)、欢迎页; 静态资源文件夹下的所有index.html页面;被"/**"映射;

localhost:8080/ 找index页面

4)、所有的 **/favicon.ico 都是在静态资源文件下找;

 

 

 

 

原文地址:https://www.cnblogs.com/yanl55555/p/12091341.html