欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

【spring】springboot静态资源导入探究

时间:2023-06-21

一个网站的搭建,避免不了静态资源的导入,哪在springboot中该如何配置静态资源呢?靠死记硬背?肯定不是,下面我将带大家从源码的角度分析出静态资源的配置文件夹

关键源码

@Overridepublic 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导入的依赖:

org.webjars.npm jquery 3.6.0

运行效果


源码三:

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/**

运行结果:

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。