栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

一个网站的搭建,避免不了静态资源的导入,哪在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导入的依赖:


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

运行结果:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/735071.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号