文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

SpringBoot通过源码探究静态资源的映射规则实现

2024-04-02 19:55

关注

我们开发一个Spring Boot项目,肯定要导入许多的静态资源,比如css,js等文件

如果我们是一个web应用,我们的main下会有一个webapp,我们以前都是将所有的页面导在这里面的,对吧!但是我们现在的pom呢,打包方式是为jar的方式,那么这种方式SpringBoot能不能来给我们写页面呢?当然是可以的,但是SpringBoot对于静态资源放置的位置,是有规定的!

1、静态资源映射规则

1.1、第一种映射规则

SpringBoot中,SpringMVC的web配置都在 WebMvcAutoConfiguration 这个配置类里面;

WebMvcAutoConfigurationAdapter 中有很多配置方法;其中就有一个添加资源处理方法:addResourceHandlers (),源码如下。


@Override
		protected void addResourceHandlers(ResourceHandlerRegistry registry) {
			super.addResourceHandlers(registry);
			if (!this.resourceProperties.isAddMappings()) {
				logger.debug("Default resource handling disabled");
				return;
			}
			ServletContext servletContext = getServletContext();
			addResourceHandler(registry, "/webjars/**", "classpath:/META-INF/resources/webjars/");
			addResourceHandler(registry, this.mvcProperties.getStaticPathPattern(), (registration) -> {
				registration.addResourceLocations(this.resourceProperties.getStaticLocations());
				if (servletContext != null) {
					registration.addResourceLocations(new ServletContextResource(servletContext, SERVLET_LOCATION));
				}
			});
		}

通过分析上面源码可得,添加的静态资源映射路径为/webjars/**,资源路径为classpath:/META-INF/resources/webjars/

什么是webjars

WebJars是将客户端(浏览器)资源(JavaScript,Css等)打成jar包文件,以对资源进行统一依赖管理。WebJars的jar包部署在Maven中央仓库上。

webjars官网

我们可以到webjars官网上找到自己需要的资源,在自己的工程中添加入maven依赖,即可直接使用这些资源了。

比如,我们要导入jquery资源


<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>jquery</artifactId>
    <version>3.6.0</version>
</dependency>

导入后我们可以通过资源路径找到资源的存放位置并访问,我们在webjars网站导入的资源都符合下图的结构

在这里插入图片描述

通过路径访问,成功访问到静态资源!

在这里插入图片描述

1.2、第二种映射规则

下面我们继续分析源码

在这里插入图片描述

getStaticPathpattern():获得静态路径模式,点进去看一下源码


public String getStaticPathPattern() {
		return this.staticPathPattern;
	}

再看一下staticPathPattern的源码

在这里插入图片描述

/**就是当前目录下的所有静态资源都能识别,但是当前目录下具体指的又是什么呢?我们点开resourceProperties的源码便可看出来。源码如下:

在这里插入图片描述

上面源码很清楚的给出了我们四个静态资源路径,所以只要是这四个目录下的静态资源,都可以直接获取。

我们来测试一下,先补齐上面的目录,然后再resource目录放一个js资源

在这里插入图片描述

启动springboot应用测试:成功访问到静态资源!

在这里插入图片描述

1.3、总结

以下四个目录存放的静态资源可以被我们识别:


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

注意:

第一个目录的访问路径为localhost:8080/webjars/资源目录结构,后面三个访问路径为localhost:8080/资源名

第二种映射规则的优先级为:resources>static(默认)>public

2、自定义静态资源路径

我们可以自己通过配置文件来指定一下,哪些文件夹是需要我们放静态资源文件的,在application.properties中配置;


spring.resources.static-locations=classpath:/coding/,classpath:/cheng/

但是通过下面源码我们可以看出,如果自定义了资源路径,那么上面默认的四个路径就失效了,所以最好不要自定义路径,使用springboot帮我们自动配置好的就行。


if (!this.resourceProperties.isAddMappings()) {
				logger.debug("Default resource handling disabled");
				return;
			}

到此这篇关于SpringBoot通过源码探究静态资源的映射规则实现的文章就介绍到这了,更多相关SpringBoot 静态资源映射规则内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯