从零开始学习SpringBoot

SpringBoot - 对静态资源的映射规则

2018-05-09  本文已影响17人  BzCoder

一.SpringBoot对静态资源的映射规则

在正式开始使用SpringBoot开发Web应用之前,我们先来研究下SpringBoot的映射规则,要研究映射规则我们就得看Web相对应的自动配置类,也就是WebMvcAutoConfiguration:

@Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            if (!this.resourceProperties.isAddMappings()) {
                logger.debug("Default resource handling disabled");
                return;
            }
            Duration cachePeriod = this.resourceProperties.getCache().getPeriod();
            CacheControl cacheControl = this.resourceProperties.getCache()
                    .getCachecontrol().toHttpCacheControl();
            //在"classpath:/METAINF/resources/webjars/"中搜索Webjar资源
            if (!registry.hasMappingForPattern("/webjars/**")) {
                customizeResourceHandlerRegistration(registry
                        .addResourceHandler("/webjars/**")
                        .addResourceLocations(
                        "classpath:/METAINF/resources/webjars/")
                        .setCachePeriod(getSeconds(cachePeriod))
                        .setCacheControl(cacheControl));
            }
             //在staticPathPattern中搜索Webjar资源
            String staticPathPattern = this.mvcProperties.getStaticPathPattern();
            if (!registry.hasMappingForPattern(staticPathPattern)) {
                customizeResourceHandlerRegistration(
                        registry.addResourceHandler(staticPathPattern)
                                .addResourceLocations(getResourceLocations(
                        this.resourceProperties.getStaticLocations()))
                                .setCachePeriod(getSeconds(cachePeriod))
                                .setCacheControl(cacheControl));
            }
        }
   

在代码中我们可以发现,有两个静态资源导入的方式。

首先我们先看第一种Webjars方式,我们引入jquery

<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>jquery</artifactId>
    <version>3.3.1-1</version>
</dependency>

webjar:以jar包的方式引入静态资源。

首先我们来看WebMvc的自动配置类WebMvcAutoConfiguration:

@Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            if (!this.resourceProperties.isAddMappings()) {
                logger.debug("Default resource handling disabled");
                return;
            }
            Duration cachePeriod = this.resourceProperties.getCache().getPeriod();
            CacheControl cacheControl = this.resourceProperties.getCache()
                    .getCachecontrol().toHttpCacheControl();
            //在"classpath:/METAINF/resources/webjars/"中搜索Webjar资源
            if (!registry.hasMappingForPattern("/webjars/**")) {
                customizeResourceHandlerRegistration(registry
                        .addResourceHandler("/webjars/**")
                        .addResourceLocations(
                        "classpath:/METAINF/resources/webjars/")
                        .setCachePeriod(getSeconds(cachePeriod))
                        .setCacheControl(cacheControl));
            }
             //在staticPathPattern中搜索Webjar资源
            String staticPathPattern = this.mvcProperties.getStaticPathPattern();
            if (!registry.hasMappingForPattern(staticPathPattern)) {
                customizeResourceHandlerRegistration(
                        registry.addResourceHandler(staticPathPattern)
                                .addResourceLocations(getResourceLocations(
                        this.resourceProperties.getStaticLocations()))
                                .setCachePeriod(getSeconds(cachePeriod))
                                .setCacheControl(cacheControl));
            }
        }
   

从代码中我们可以看到有两种引入静态资源的方式。

1.Webjars

我们引入jquery为例

<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>jquery</artifactId>
    <version>3.3.1-1</version>
</dependency>

引入后可以看到如下目录


webjars目录结构

此时我们重启后请求 http://localhost:8080/webjars/jquery/3.3.1-1/jquery.js
( 对应 classpath:/METAINF/resources/webjars/格式路径),就可以请求到/jquery.js的内容了。

webjar:以jar包的方式引入静态资源。

2.本地导入

通过查看源码,我们可以看到

staticPathPattern = "/**"; //匹配路径下的任何文件

以下是SpringBoot默认的四个是静态资源文件夹,也就是说资源文件会到以下四个目录去查找

"classpath:/META-INF/resources/", 
"classpath:/resources/",
"classpath:/static/", 
"classpath:/public/" 

在静态资源文件夹中有几个文件名是默认的。
index:欢迎页
favicon.ico:顶端图标文件
只要将相关的文件放入目录中,我们输入路径后即可访问。

假如看了感觉还不错的话,可以点个喜欢哦。

上一篇下一篇

猜你喜欢

热点阅读