欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

springboot对静态资源的映射规则

程序员文章站 2022-07-10 19:57:17
...

首先我们找到这个类:WebMvcAutoConfiguration,从他的后缀看出这是一个有关springmvc自动配置类。在源码中有一个addResourceHandlers方法,这个方法就是对静态资源的配置

@Override
		public void addResourceHandlers(ResourceHandlerRegistry registry) {
			if (!this.resourceProperties.isAddMappings()) {
				logger.debug("Default resource handling disabled");
				return;
			}
			Integer cachePeriod = this.resourceProperties.getCachePeriod();
			if (!registry.hasMappingForPattern("/webjars/**")) {
				customizeResourceHandlerRegistration(
						registry.addResourceHandler("/webjars/**")
								.addResourceLocations(
										"classpath:/META-INF/resources/webjars/")
						.setCachePeriod(cachePeriod));
			}
			String staticPathPattern = this.mvcProperties.getStaticPathPattern();
			if (!registry.hasMappingForPattern(staticPathPattern)) {
				customizeResourceHandlerRegistration(
						registry.addResourceHandler(staticPathPattern)
								.addResourceLocations(
										this.resourceProperties.getStaticLocations())
						.setCachePeriod(cachePeriod));
			}
		}

第一种情况,
所有 /webjars/** ,都去 classpath:/METAINF/resources/webjars/ 找资源;就是我们以jar包的方式导入静态资源,在pom文件里面导入对应jar的依赖就可以了,

<!--引入jquery‐webjar -->
		 <dependency> 
		 	<groupId>org.webjars</groupId>
		 	<artifactId>jquery</artifactId>
		 	<version>3.3.1</version>
		 </dependency>

添加完上面的依赖后,我们可以看到在依赖中有了这个jar。
springboot对静态资源的映射规则
那么怎么检验有没有成功导入jQuery呢?
我们启动项目,然后进入localhost:8080/webjars/jquery/3.3.1/jquery.js。发现是可以的。
springboot对静态资源的映射规则
第二种情况,自己的资源文件
“/**” 访问当前项目的任何资源,如果没有处理,都去(静态资源的文件夹)找映射,那么这些静态资源文件夹的名字都是什么呢?
springboot对静态资源的映射规则
然后再点这个
springboot对静态资源的映射规则

springboot对静态资源的映射规则
我们可以看出在ResourceProperties里面的静态代码块,初始化了RESOURCE_LOCATIONS数组。
所以我们可以得出,文件夹的名字

"classpath:/META‐INF/resources/",
"classpath:/resources/", 
"classpath:/static/", 
"classpath:/public/" 
"/":当前项目的根路径

这里我访问项目里面的Chart.min.js文件springboot对静态资源的映射规则
在地址栏输入http://localhost:8080/asserts/js/Chart.min.js,因为本身就是从static文件夹下面找的,所以不用写static
springboot对静态资源的映射规则
如果在配置文件里面自己定义静态文件夹的名称,那么上面配置的静态资源就用不了了

相关标签: springboot