在 Web 应用中会涉及到大量的静态资源,例如 JS、CSS 和 HTML 等。我们知道,Spring MVC 导入静态资源文件时,需要配置静态资源的映射;但在 SpringBoot 中则不再需要进行此项配置,因为 SpringBoot 已经默认完成了这一工作。

Spring Boot 默认为我们提供了 3 种静态资源映射规则:
WebJars 映射
默认资源映射
静态首页(欢迎页)映射
WebJars 映射
为了让页面更加美观,让用户有更多更好的体验,Web 应用中通常会使用大量的 JS 和 CSS,例如 jQuery,Backbone.js 和 Bootstrap 等等。通常我们会将这些 Web 前端资源拷贝到 Java Web 项目的 webapp 相应目录下进行管理。但是 Spring Boot 项目是以 JAR 包的形式进行部署的,不存在 webapp 目录,那么 Web 前端资源该如何引入到 Spring Boot 项目中呢?

WebJars 可以完美的解决上面的问题,它可以 Jar 形式为 Web 项目提供资源文件。

WebJars 可以将 Web 前端资源(JS,CSS 等)打成一个个的 Jar 包,然后将这些 Jar 包部署到 Maven 中央仓库中进行统一管理,当 Spring Boot 项目中需要引入 Web 前端资源时,只需要访问 WebJars 官网,找到所需资源的 pom 依赖,将其导入到项目中即可。

所有通过 WebJars 引入的前端资源都存放在当前项目类路径(classpath)下的“/META-INF/resources/webjars/” 目录中。

下图展示如何通过 WebJars 查找 JQuery 的 pom 依赖的过程。

图1:WebJars 查找 JQuery 的 POM 依赖

Spring Boot 通过 MVC 的自动配置类 WebMvcAutoConfiguration 为这些 WebJars 前端资源提供了默认映射规则,部分源码如下。
public void addResourceHandlers(ResourceHandlerRegistry registry) {
if (!this.resourceProperties.isAddMappings()) {
logger.debug(“Default resource handling disabled”);
} else {
//WebJars 映射规则
this.addResourceHandler(registry, “/webjars/**”, “classpath:/META-INF/resources/webjars/”);
this.addResourceHandler(registry, this.mvcProperties.getStaticPathPattern(), (registration) -> {
registration.addResourceLocations(this.resourceProperties.getStaticLocations());
if (this.servletContext != null) {
ServletContextResource resource = new ServletContextResource(this.servletContext, “/”);
registration.addResourceLocations(new Resource[]{resource});
}
});
}
}

通过以上源码可知,WebJars 的映射路径为“/webjars/”,即所有访问“/webjars/”的请求,都会去“classpath:/META-INF/resources/webjars/”查找 WebJars 前端资源。
示例 1

  1. 在 Spring Boot 项目 spring-boot-springmvc-demo1 的 pom.xml 中添加以下依赖,将 jquery 引入到该项目中。

org.webjars jquery 3.6.0

  1. Spring Boot 项目中引入的 jquery 的 Jar 包结构如下图。

WebJars JQUERY
图2:WebJars jquery Jar 包结构

  1. 启动 Spring Boot,浏览器访问“http://localhost:8080/webjars/jquery/3.6.0/jquery.js”访问 jquery.js,结果如下图。

图3:WebJars jquery 访问结果
默认静态资源映射
当访问项目中的任意资源(即“/**”)时,Spring Boot 会默认从以下路径中查找资源文件(优先级依次降低):
classpath:/META-INF/resources/
classpath:/resources/
classpath:/static/
classpath:/public/

这些路径又被称为静态资源文件夹,它们的优先级顺序为:classpath:/META-INF/resources/ > classpath:/resources/ > classpath:/static/ > classpath:/public/ 。

当我们请求某个静态资源(即以“.html”结尾的请求)时,Spring Boot 会先查找优先级高的文件夹,再查找优先级低的文件夹,直到找到指定的静态资源为止。
示例 2

  1. 在 spring-boot-springmvc-demo1 的 src/main/resources 下的 static 目录中创建一个 hello.html,代码如下。

欢迎您来到唐宇V(tangyu9880)

  1. 启动 Spring Boot,浏览器访问 “http://localhost:8080/hello.html”,结果如下图。

默认资源映射
图4:默认资源映射
静态首页(欢迎页)映射
静态资源文件夹下的所有 index.html 被称为静态首页或者欢迎页,它们会被被 /** 映射,换句话说就是,当我们访问“/”或者“/index.html”时,都会跳转到静态首页(欢迎页)。
注意,访问静态首页或欢迎页时,其查找顺序也遵循默认静态资源的查找顺序,即先查找优先级高的目录,在查找优先级低的目录,直到找到 index.html 为止。

示例 3

  1. 在 spring-boot-springmvc-demo1 的 src/main/resources 下的 public 目录中创建一个 index.html,代码如下。

Title

首页

  1. 启动 Spring Boot,使用浏览器访问“http://localhost:8080/”,结果如下图。

Spring Boot 欢迎页映射

Spring Boot静态资源映射相关推荐

  1. Spring Boot 静态资源映射与上传文件路由配置

    默认静态资源映射目录 默认映射路径 在平常的 web 开发中,避免不了需要访问静态资源,如常规的样式,JS,图片,上传文件等;Spring Boot 默认配置对静态资源映射提供了如下路径的映射 /st ...

  2. Spring Boot静态资源映射规则

    目录 理论 演示 理论 使用Spring Boot: 1. 创建Spring Boot应用,选中需要的模块: 2. Spring Boot已默认将这些场景配置好,只需要在配置文件中指定少量配置就可以运 ...

  3. Spring Boot静态资源访问和配置全解析

    在web开发中,静态资源的访问时必不可少的,比如image.css.js等.SpringBoot对静态资源访问提供了很好的支持,使用其提供的基本默认配置基本可以满足开发需求,同时,又支持开发人员进行自 ...

  4. Spring Boot 静态资源处理,妙!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:cnblogs.com/paddix/p/8301331.h ...

  5. springboot的jsp应该放在哪_web项目jsp放在哪里 Spring Boot 静态资源处理(4)

    Spring Boot 默认将 /webjars/** 映射到 classpath:/META-INF/resources/webjars/ ,结合我们上面讲到的访问资源的规则,便可以得知我们在JSP ...

  6. Spring Boot 静态资源处理,原来如此!

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"加群"加入公众号专属技术群 来源:rrd.me/faAmu 做web开发的时候,我们往 ...

  7. Spring Boot 静态资源访问原理解析

    一.前言 springboot配置静态资源方式是多种多样,接下来我会介绍其中几种方式,并解析一下其中的原理. 二.使用properties属性进行配置 应该说 spring.mvc.static-pa ...

  8. spring boot静态资源文件的访问以及自定义

    上一节出现的页面是不是很丑?我才不告诉你,我把背景都处理了, 相关的项目结构,如下 好吧.来看看最终的页面源码 <!DOCTYPE HTML> <html><head&g ...

  9. Spring Boot 静态资源修改立即生效

    前两天在玩spring boot的时候,发现修改静态资源时总是不能立即生效,弄了好长时间,今天将解决方案分享给大家,希望对大家有所帮助,废话少说,直接上教程 第一步:项目maven中需要的maven包 ...

最新文章

  1. 一站式论文提升服务,助您顺利发文章!
  2. spring 注解说明以及@Resource和@Autowired的区别
  3. 静态时序分析——On-chip Variation
  4. 数据结构---邻接表的DFS
  5. C++学习之路 | PTA乙级—— 1082 射击比赛 (20 分)(精简)
  6. 动态规划(三)——最少硬币和所有硬币问题
  7. 深度相机---(1)TOF总结
  8. 显卡算力排行2020_AMD正式发布RX6000系列显卡
  9. tomcat容器启动
  10. Java实现在线打开word文档加盖印章/盖章/签名功能
  11. 从敏思博客的倒闭事件看历史重现...
  12. ORCLE导出数据,加不加owner,ORACLE常用的导出语句
  13. 中小学计算机网络培训心得体会,计算机网络培训心得体会
  14. 有效应对广发逾期催收这样做
  15. 计算机一级考试操作题知识点,计算机一级考操作题知识点归纳.doc
  16. 阿里云1核1G内存1M宽带可以支持多少IP访问量?
  17. linux网卡驱动离线安装_Linux下网卡驱动的安装
  18. 编写一个函数isprime(n).判断整数n是否为素数.编写程序使用此函数,当输入一个整数时,对它进行判断,当为素数时,输出1.否则,输出0....
  19. 新版H5小游戏管理平台系统+适用于商家活动
  20. Ogre天龙八部地形mesh部分的C++源码

热门文章

  1. 四、EasyExcel实现Excel读写,封装工具类
  2. pandas使用merge函数将多个dataframe数据连接起来、设置how参数为left指定左连接(left join)、on参数指定连接字段
  3. php 7.1.0 下载,PHP 7.1.1和7.0.15正式发布:源码下载 - IT之家
  4. 单片机实验秒表设计程序c语言,单片机数字计时器的系统设计与型式试验
  5. 超级鹰:selenium专门用来破解各种验证码
  6. python科研用哪个软件好_有哪些好的科研工具软件?
  7. 传智播客的百度网盘,海量资源
  8. 初学者如何学习单片机
  9. Flink实战(八十):flink-sql使用(七)Flink SQL Clien读取Kafka数据流式写入Hive(用hive 管理kafka元数据)
  10. 在甲骨文云容器实例(Container Instances)上部署Oracle Linux 8 Desktop加强版(包括Minio,ssh登录等)