博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【spring boot2】第4篇:spring boot对静态资源的管理
阅读量:6761 次
发布时间:2019-06-26

本文共 3054 字,大约阅读时间需要 10 分钟。

spring boot 对 web 静态资源的配置管理是通过配置类 WebMvcAutoConfiguration 来实现的。

WebMvcAutoConfiguration 的理解

顾名思义,WebMvcAutoConfiguration 是web开发的相关配置都放在该类中的。那我们看看静态资源是如何配置的呢?

addResourceHandlers 方法中对静态资源路径做了说明

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();            if (!registry.hasMappingForPattern("/webjars/**")) {                customizeResourceHandlerRegistration(registry                        .addResourceHandler("/webjars/**")                        .addResourceLocations("classpath:/META-INF/resources/webjars/")                        .setCachePeriod(getSeconds(cachePeriod))                        .setCacheControl(cacheControl));            }            //staticPathPattern的值是 /**            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/**都去classpath:/META-INF/resources/webjars/路径下找静态资源

    • 什么是webjars :以jar包的形式引入静态资源文件
    • 比如我们现在要使用 jquery 框架,在webjars官网找到他的依赖放到你的项目当中即可
    org.webjars.bower
    jquery
    3.3.1
  2. 如果路径是/**时,就去以下

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

    类路径查找资源文件,idea 中的项目路径如下图所示:

    图片描述
    那我们如何访问静态资源呢?通过下面的url可直接访问

    http://localhost:8080/asserts/css/bootstrap.min.css

    但是注意,假如你把静态资源存放在classpath:/static/,试图通过http://localhost:8080/static/asserts/css/bootstrap.min.css 来访问静态资源是访问不到的。

3.欢迎页面的映射

private Resource getIndexHtml(String location) {        return this.resourceLoader.getResource(location + "index.html");    }

意思是只要在我们的静态资源文件夹中放有 index.html文件,就能自动访问到,比如::8080,静态文件目录指的是 2 中提到的目录。

如何自定义资源文件路径

我们的资源文件路径属性是有ResourceProperties中定义的。

@ConfigurationProperties(prefix = "spring.resources", ignoreUnknownFields = false)public class ResourceProperties {    private static final String[] CLASSPATH_RESOURCE_LOCATIONS = {            "classpath:/META-INF/resources/", "classpath:/resources/",            "classpath:/static/", "classpath:/public/" };    private String[] staticLocations = CLASSPATH_RESOURCE_LOCATIONS;}

所以自定路径只需要覆盖 staticLocations 的默认路径即可,在 application.properties 文件中设置该路径

spring.resources.static-locations=classpath:/hello,classpath:/test #可以设置多个路径

转载地址:http://qobeo.baihongyu.com/

你可能感兴趣的文章
知乎 node事件机制 转载
查看>>
学习JavaScript数据结构与算法 (一)
查看>>
vue预渲染prerender-spa-plugin解决首屏白屏问题
查看>>
生产系统 SQL 执行异常原因分析
查看>>
【CSS基础】--居中的方式总结
查看>>
关于app的登录退出内容
查看>>
基于 Laravel 的模块化开发框架 Notadd RC1 fix1 发布
查看>>
模拟new实现
查看>>
30分钟理解GraphQL核心概念
查看>>
git 的常用命令
查看>>
Nacos v0.7.0:对接CMDB,实现基于标签的服务发现能力
查看>>
阿里巴巴AI夺肝结节诊断两项世界冠军,至今无人超越
查看>>
Java架构-(四)整合spring cloud云服务架构 - 企业分布式微服务云架构构建
查看>>
【译】终极指南:变量提升、作用域和闭包
查看>>
库克正名最贵iPhone:没有比X系列更好用的手机了
查看>>
go-chassis 为 grpc-go 带来高级云原生特性
查看>>
JS中如何获取url中的某个参数的值
查看>>
Mobx 源码解析
查看>>
iOS开发 · 记——Runtime(二)交换方法
查看>>
二维码总结
查看>>