SpringBoot中的五种对静态资源的映射规则的实现

作者:宜春 时间:2023-06-21 08:31:47 

SpringBoot中的SpringMVC配置功能都是在WebMvcAutoConfiguration类中,xxxxAutoConfiguration就是帮我们给容器中自动配置组件的;idea全局搜索的快捷键是两次shift,查看webMvcAutoConfiguration 查看webMvc自动配置类

SpringBoot中的五种对静态资源的映射规则的实现

WebMvcAutoConfiguration类的原理以后至少还要稍微掌握,而这里文章只是来看它的具体的关键代码,这里只例举部分关键代码,多了看着也头疼,看不懂没关系哈哈哈可跳过源码阶段,何必徒增烦扰?


public void addResourceHandlers(ResourceHandlerRegistry registry) {
 if (!this.resourceProperties.isAddMappings()) {
   logger.debug("Default resource handling disabled");
 } else {
   Duration cachePeriod = this.resourceProperties.getCache().getPeriod();
   CacheControl cacheControl = this.resourceProperties.getCache().getCachecontrol().toHttpCacheControl();
   if (!registry.hasMappingForPattern("/webjars/**")) {
     this.customizeResourceHandlerRegistration(registry.addResourceHandler(new String[]{"/webjars/**"}).addResourceLocations(new String[]{"classpath:/META-INF/resources/webjars/"}).setCachePeriod(this.getSeconds(cachePeriod)).setCacheControl(cacheControl));
   }

String staticPathPattern = this.mvcProperties.getStaticPathPattern();
   if (!registry.hasMappingForPattern(staticPathPattern)) {
     this.customizeResourceHandlerRegistration(registry.addResourceHandler(new String[]{staticPathPattern}).addResourceLocations(WebMvcAutoConfiguration.getResourceLocations(this.resourceProperties.getStaticLocations())).setCachePeriod(this.getSeconds(cachePeriod)).setCacheControl(cacheControl));
   }

}
}

好了到这里,以下部分内容则是本篇文章的核心内容了!打起劲来奥利给!!!!

1、 webjars:以jar包的方式引入静态资源

我们之前在web项目中有个webapp的目录中存放静态资源,虽然springboot中没有这个文件路径但是springboot还是有它自己的规则,从上面的代码可以看出所有的/webjars/** ,都会去classpath:/META-INF/resources/webjars/中找资源。那么什么是webjars呢?webjars就是以jar包的方式引入静态资源;

webjars的官网: https://www.webjars.org/ 【直接百度webjars也行】,进入之后,如下操作:

SpringBoot中的五种对静态资源的映射规则的实现

把上面的依赖拷进maven项目的依赖中即可,如下


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

之后所有的/webjars/** 都会去classpath:/META-INF/resources/webjars/中找资源,这个路径则在下面这个目录中

SpringBoot中的五种对静态资源的映射规则的实现

SpringBoot中的五种对静态资源的映射规则的实现

去掉勾之后右边的小框框就是我们对应的classpath:/META-INF/resources/webjars/中的路径。

以上步骤完成之后比如我们开始访问一下jQuery中的jquery.js这个资源直接运行项目,然后在地址栏输入http://localhost:8080/webjars/jquery/3.4.1/jquery.js就可以访问对应路径下的jquery.js文件,页面效果如下:

SpringBoot中的五种对静态资源的映射规则的实现

说明访问静态资源成功了。是的上面的这种方式是导入jar包的方式,如果我们要用自己的一些JS、CSS、jQuery文件可不可以呢?答案是可以的,所以就有了我们下面的第二种方式出现。

2、/** 访问当前项目的任何资源

如果是自己的静态资源文件,比如自己的一些JS、CSS、jQuery文件,SpringBoot默认是从以下这些路径中读取的


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

http://localhost:8080/jquery.js如果没有任何代码处理,就相当于直接 去静态资源文件夹里面访问jquery.js,如下

SpringBoot中的五种对静态资源的映射规则的实现

3、首页index.html,被" /** "映射

在SpringBoot默认静态资源访问路径下添加名为index.html文件,那么访问localhost:8080,会自动跳转到这个index.html。也就是说SpringBoot默认首页面为index.html,被" /** "映射。如下:

SpringBoot中的五种对静态资源的映射规则的实现

4、自定义图标 / favicon.ico

在SpringBoot中,可以把ico格式的图标放在默认静态资源文件路径下,并以favicon.ico命名,应用图标会自动变成指定的图标。所有的 /favicon.ico 都会在静态资源文件下找; 如下:

SpringBoot中的五种对静态资源的映射规则的实现

5、在application.properties中手动配置静态资源访问路径

在application.properties配置文件中如下编辑:


# 自定义静态资源访问路径,可以指定多个,之间用逗号隔开
spring.resources.static-locations=classpath:/myabc/,classpath:/myhhh

正如上面注释所描述的一样,自定义静态资源访问路径,可以指定多个,之间用逗号隔开,其中使用这种方式特别要注意:自定义静态资源后,SpringBoot默认的静态资源路径将不再起作用!

来源:https://www.cnblogs.com/yichunguo/p/12115550.html

标签:SpringBoot,静态资源,映射规则
0
投稿

猜你喜欢

  • Java+MySQL实现学生信息管理系统源码

    2023-11-28 04:29:31
  • C# 位运算符整理

    2022-12-28 15:59:35
  • Java深入讲解异常处理try catch的使用

    2023-11-04 13:00:32
  • Java 8新增的方法参数反射实例分析

    2021-11-20 05:55:30
  • Android沉浸式状态栏 + actionBar渐变 + scrollView顶部伸缩效果

    2021-09-12 01:04:16
  • java发起http请求获取返回的Json对象方法

    2022-06-20 04:00:00
  • Java 数据结构链表操作实现代码

    2021-08-12 17:57:58
  • Flutter进阶之实现动画效果(六)

    2023-09-15 15:13:50
  • Android开发中记一个SwipeMenuListView侧滑删除错乱的Bug

    2021-08-02 04:24:21
  • 使用@ConfigurationProperties实现类型安全的配置过程

    2023-07-01 00:26:05
  • Java基本数据类型(动力节点java学院整理)

    2022-09-26 12:14:13
  • java控制台输出百分比进度条示例

    2023-08-21 22:58:20
  • java线程池:获取运行线程数并控制线程启动速度的方法

    2022-06-30 23:22:57
  • java 反射调用Service导致Spring注入Dao失效的解决方案

    2021-06-30 15:47:58
  • Android Glide的简单使用

    2022-12-22 01:37:14
  • IDEA的Swing可视化插件JFormDesigner详解

    2023-09-23 08:02:54
  • Android界面 NotificationManager使用Bitmap做图标

    2023-06-13 11:59:42
  • Java非法字符: ‘\\ufeff‘问题及说明

    2023-02-01 09:06:07
  • Java计算文本MD5加密值的方法示例

    2023-11-15 13:18:48
  • 学生信息管理系统java版

    2023-06-16 15:48:10
  • asp之家 软件编程 m.aspxhome.com