springspringboot静态资源导入探究
Posted 我想月薪过万
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springspringboot静态资源导入探究相关的知识,希望对你有一定的参考价值。
一个网站的搭建,避免不了静态资源的导入,哪在springboot中该如何配置静态资源呢?靠死记硬背?肯定不是,下面我将带大家从源码的角度分析出静态资源的配置文件夹
关键源码
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry)
if (!this.resourceProperties.isAddMappings())
logger.debug("Default resource handling disabled");
return;
addResourceHandler(registry, "/webjars/**", "classpath:/META-INF/resources/webjars/");
addResourceHandler(registry, this.mvcProperties.getStaticPathPattern(), (registration) ->
registration.addResourceLocations(this.resourceProperties.getStaticLocations());
if (this.servletContext != null)
ServletContextResource resource = new ServletContextResource(this.servletContext, SERVLET_LOCATION);
registration.addResourceLocations(resource);
);
源码讲解与展示
源码一:
if (!this.resourceProperties.isAddMappings())
logger.debug("Default resource handling disabled");
return;
这句话表示 是否添加了路径映射,如果没有添加,代码将不会继续往下执行。这个值默认是true,大家可以自己点进去看看
源码二:
addResourceHandler(registry, "/webjars/**", "classpath:/META-INF/resources/webjars/");
在浏览其中访问 /webjars/xxx文件 等价于 /META-INF/resources/webjars/xxx文件
补充:webjars其实是一个包管理网站:WebJars - Web Libraries in Jarshttps://www.webjars.org/
所以这行代码告诉我们静态资源可以放置两个位置:
- 位置一:
效果展示:
- 位置二:
上面这个包是我儿通过maven导入的依赖:
<dependency>
<groupId>org.webjars.npm</groupId>
<artifactId>jquery</artifactId>
<version>3.6.0</version>
</dependency>
运行效果
源码三:
addResourceHandler(registry, this.mvcProperties.getStaticPathPattern(), (registration) ->
registration.addResourceLocations(this.resourceProperties.getStaticLocations());
if (this.servletContext != null)
ServletContextResource resource = new ServletContextResource(this.servletContext, SERVLET_LOCATION);
registration.addResourceLocations(resource);
);
这句代码的含义和源码二的含义很想:this.mvcProperties.getStaticPathPattern() ==》/** 点击源码可查看
this.resourceProperties.getStaticLocations() ==》 "classpath:/META-INF/resources/",
"classpath:/resources/", "classpath:/static/", "classpath:/public/" ;
所以意思就是浏览器访问 /xxx文件 等价于访问 "classpath:/META-INF/resources/",
"classpath:/resources/", "classpath:/static/", "classpath:/public/" 这四个文件夹下的文件,优先级为:数组第一个优先级最高
这个大家可以自己新建几个文件夹试试
动态修改
在 application.yaml 中也提供了修改 this.mvcProperties.getStaticPathPattern() 的值,其值默认是 /** , 你也可以自己修改为 例如:/yiqi
spring:
mvc:
static-path-pattern: /yiqi/**
运行结果:
以上是关于springspringboot静态资源导入探究的主要内容,如果未能解决你的问题,请参考以下文章