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

 更新时间:2021年05月06日 11:04:54   作者:万里顾—程  
这篇文章主要介绍了SpringBoot通过源码探究静态资源的映射规则实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

我们开发一个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 静态资源映射规则内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • IDEA自动补全返回值的三种快捷方式

    IDEA自动补全返回值的三种快捷方式

    平常在编码的过程中,可能需要调用第三方Api接口,这个过程中可能涉及到不太熟悉第三方Api接口的返回值类型,平常在编码的过程中,可能需要调用第三方Api接口,这个过程中可能涉及到不太熟悉第三方Api接口的返回值类型,需要的朋友可以参考下
    2023-10-10
  • Java多线程案例之单例模式懒汉+饿汉+枚举

    Java多线程案例之单例模式懒汉+饿汉+枚举

    这篇文章主要介绍了Java多线程案例之单例模式懒汉+饿汉+枚举,文章着重介绍在多线程的背景下简单的实现单例模式,需要的小伙伴可以参考一下
    2022-06-06
  • Java设计模式中责任链模式详解

    Java设计模式中责任链模式详解

    责任链模式是将链中的每一个节点看做是一个对象,每个节点处理的请求均不相同,且内部自动维护下一个节点对象,当一个请求从链式的首段发出时,会沿着链的路径依次传递给每一个节点对象。本文将通过示例和大家详细聊聊责任链模式,需要的可以参考一下
    2022-11-11
  • mybatis-plus 查询时排除字段方法的两种方法

    mybatis-plus 查询时排除字段方法的两种方法

    我们在开发应用时,在某些应用场景下查询有时需要排除某些字段,本文主要介绍了两种方法,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • java判断是否为图片的步骤和方法

    java判断是否为图片的步骤和方法

    在本篇内容里小编给大家分享的是关于java判断是否为图片的做法和步骤,需要的朋友们学习下。
    2018-12-12
  • SpringBoot使用CORS实现无缝跨域的方法实现

    SpringBoot使用CORS实现无缝跨域的方法实现

    CORS 是一种在服务端设置响应头部信息的机制,允许特定的源进行跨域访问,本文主要介绍了SpringBoot使用CORS实现无缝跨域的方法实现,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • 关于Spring Cloud 本地属性覆盖的问题

    关于Spring Cloud 本地属性覆盖的问题

    这篇文章主要介绍了关于Spring Cloud 本地属性覆盖的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • 初识Java环境变量配置及IDEA

    初识Java环境变量配置及IDEA

    这篇文章主要介绍了Java环境变量配置及IDEA,本文通过图文实例相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • Java动态代理之拦截器的应用

    Java动态代理之拦截器的应用

    今天小编就为大家分享一篇关于Java动态代理之拦截器的应用,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • Java如何通过ssh远程连接主机并执行命令

    Java如何通过ssh远程连接主机并执行命令

    这篇文章主要介绍了Java如何通过ssh远程连接主机并执行命令问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07

最新评论