SpringBoot Web开发静态资源处理

Web开发探究

简介

其实SpringBoot的东西用起来非常简单,因为SpringBoot最大的特点就是自动装配

使用SpringBoot的步骤:

1、创建一个SpringBoot应用,选择我们需要的模块,SpringBoot就会默认将我们的需要的模块自动配置好

2、手动在配置文件中配置部分配置项目就可以运行起来了

3、专注编写业务代码,不需要考虑以前那样一大堆的配置了。

要熟悉掌握开发,之前学习的自动配置的原理一定要搞明白!

比如SpringBoot到底帮我们配置了什么?我们能不能修改?我们能修改哪些配置?我们能不能扩展?

  • 向容器中自动配置组件 :*** Autoconfiguration
  • 自动配置类,封装配置文件的内容:***Properties

静态资源处理

静态资源映射规则

首先,我们搭建一个普通的SpringBoot项目,回顾一下HelloWorld程序!

写请求非常简单,那我们要引入我们前端资源,我们项目中有许多的静态资源,比如css,js等文件,这个SpringBoot怎么处理呢?

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

我们先来聊聊这个静态资源映射规则:

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

  • 我们可以去看看 WebMvcAutoConfigurationAdapter 中有很多配置方法;

  • 有一个方法:addResourceHandlers 添加资源处理

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {if (!this.resourceProperties.isAddMappings()) {// 已禁用默认资源处理logger.debug("Default resource handling disabled");return;}// 缓存控制Duration cachePeriod = this.resourceProperties.getCache().getPeriod();CacheControl cacheControl = this.resourceProperties.getCache().getCachecontrol().toHttpCacheControl();// webjars 配置if (!registry.hasMappingForPattern("/webjars/**")) {customizeResourceHandlerRegistration(registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/").setCachePeriod(getSeconds(cachePeriod)).setCacheControl(cacheControl));}// 静态资源配置String staticPathPattern = this.mvcProperties.getStaticPathPattern();if (!registry.hasMappingForPattern(staticPathPattern)) {customizeResourceHandlerRegistration(registry.addResourceHandler(staticPathPattern).addResourceLocations(getResourceLocations(this.resourceProperties.getStaticLocations())).setCachePeriod(getSeconds(cachePeriod)).setCacheControl(cacheControl));}
    }
    

    读一下源代码:比如所有的 /webjars/** , 都需要去 classpath:/META-INF/resources/webjars/ 找对应的资源;

什么是webjars 呢?

Webjars本质就是以jar包的方式引入我们的静态资源 , 我们以前要导入一个静态资源文件,直接导入即可。

第一种静态资源映射规则

使用SpringBoot需要使用Webjars,我们可以去搜索一下:

网站:https://www.webjars.org

要使用jQuery,我们只要要引入jQuery对应版本的pom依赖即可!

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

导入完毕,查看webjars目录结构,并访问Jquery.js文件!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vqjq7CV4-1691585140637)(SpringBoot10:Web开发静态资源处理.assets/1595506633980.png)]

访问:只要是静态资源,SpringBoot就会去对应的路径寻找资源,我们这里访问:http://localhost:8080/webjars/jquery/3.4.1/jquery.js

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QYYxIL1C-1691585140638)(SpringBoot10:Web开发静态资源处理.assets/1595506019658.png)]

第二种静态资源映射规则(常用)

1、那我们项目中要是使用自己的静态资源该怎么导入呢?我们看下一行代码;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3TysT33O-1691585140639)(SpringBoot10:Web开发静态资源处理.assets/1595516976999.png)]

2、我们去找staticPathPattern发现第二种映射规则 :/** , 访问当前的项目任意资源,它会去找 resourceProperties 这个类,我们可以点进去看一下分析:

// 进入方法
public String[] getStaticLocations() {return this.staticLocations;
}
// 找到对应的值
private String[] staticLocations = CLASSPATH_RESOURCE_LOCATIONS;
// 找到路径
private static final String[] CLASSPATH_RESOURCE_LOCATIONS = { "classpath:/META-INF/resources/","classpath:/resources/", "classpath:/static/", "classpath:/public/" 
};

3、ResourceProperties 可以设置和我们静态资源有关的参数;这里面指向了它会去寻找资源的文件夹,即上面数组的内容。

4、所以得出结论,以下四个目录存放的静态资源可以被我们识别:

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

5、我们可以在resources根目录下新建对应的文件夹,都可以存放我们的静态文件;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FvsvpBPU-1691585140639)(SpringBoot10:Web开发静态资源处理.assets/1595517831392.png)]

6、比如我们访问 http://localhost:8080/1.js , 他就会去这些文件夹中寻找对应的静态资源文件;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UdGKTzPi-1691585140640)(SpringBoot10:Web开发静态资源处理.assets/1595517869049.png)]

自定义静态资源路径(知道这种方式就行一般不会用)

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

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

总结

  1. 在springboot,我们可以使用以下方式处理静态资源
    • webjars localhost:8080/webjars/
    • public,static,/**,resources localhost:8080/
  2. 优先级:resources > static(默认) > public

首页处理

静态资源文件夹说完后,我们继续向下看源码!可以看到一个欢迎页的映射,就是我们的首页!

@Bean
public WelcomePageHandlerMapping welcomePageHandlerMapping(ApplicationContext applicationContext,FormattingConversionService mvcConversionService, ResourceUrlProvider mvcResourceUrlProvider) {WelcomePageHandlerMapping welcomePageHandlerMapping = new WelcomePageHandlerMapping(new TemplateAvailabilityProviders(applicationContext), applicationContext, getWelcomePage(),this.mvcProperties.getStaticPathPattern());welcomePageHandlerMapping.setInterceptors(getInterceptors(mvcConversionService, mvcResourceUrlProvider));welcomePageHandlerMapping.setCorsConfigurations(getCorsConfigurations());return welcomePageHandlerMapping;
}

点进去继续看

private Optional<Resource> getWelcomePage() {String[] locations = getResourceLocations(this.resourceProperties.getStaticLocations());// ::是java8 中新引入的运算符// Class::function的时候function是属于Class的,应该是静态方法。// this::function的funtion是属于这个对象的。// 简而言之,就是一种语法糖而已,是一种简写return Arrays.stream(locations).map(this::getIndexHtml).filter(this::isReadable).findFirst();
}
// 欢迎页就是一个location下的的 index.html 而已
private Resource getIndexHtml(String location) {return this.resourceLoader.getResource(location + "index.html");
}

截图说明

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ISJX1DTC-1691585140641)(SpringBoot10:Web开发静态资源处理.assets/1595550098734.png)]

  • 欢迎页,静态资源文件夹下的所有 index.html 页面;被 /** 映射。

  • 比如我访问 http://localhost:8080/ ,就会找静态资源文件夹下的 index.html

  • 新建一个 index.html ,在我们上面的3个目录( public,static,resources)中任意一个;然后访问测试 http://localhost:8080/ 看结果!

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y2HoCVKQ-1691585140642)(SpringBoot10:Web开发静态资源处理.assets/1595550394178.png)]

1、关于网站图标说明

欢迎页面(Welcome Page)

Spring Boot supports both static and templated welcome pages. It first looks for an index.html file in the configured static content locations. If one is not found, it then looks for an index template. If either is found, it is automatically used as the welcome page of the application.

自定义应用图标(Custom Facicon)

Spring Boot looks for a favicon.ico in the configured static content locations and the root of the classpath (in that order). If such a file is present, it is automatically used as the favicon of the application.

2、首页图标

2.2.x之前的版本(如2.1.7)springboot是这样

与其他静态资源一样,Spring Boot在配置的静态内容位置中查找 favicon.ico。如果存在这样的文件,它将自动用作应用程序的favicon。

  1. 关闭SpringBoot默认图标

    #关闭默认图标
    spring.mvc.favicon.enabled=false
    
  2. 自己放一个图标在静态资源目录下,我放在 public 目录下

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JjMKn6B7-1691585140643)(SpringBoot10:Web开发静态资源处理.assets/1595554357772.png)]

  3. 清除浏览器缓存Ctrl + F5!刷新网页,发现图标已经变成自己的了!

2.2.x之后的版本(如2.3.0)直接执行2和3就可以了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ED7PgQjp-1691585140644)(SpringBoot10:Web开发静态资源处理.assets/1595554118099.png)]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/59497.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

爬虫获取电影数据----以沈腾参演电影为例

数据可视化&分析实战 1.1 沈腾参演电影数据获取 文章目录 数据可视化&分析实战前言1. 网页分析2. 构建数据获取函数2.1 网页数据获取函数2.2 网页照片获取函数 3. 获取参演影视作品基本数据4. 电影详细数据获取4.1 导演、演员、描述、类型、投票人数、评分信息、电影海…

windows下redis的下载和安装

文章目录 1 下载2 打开解压文件&#xff0c;可以看到以下内容3 使用命令进行安装和注册redis到window服务4 查看服务 1 下载 https://github.com/MicrosoftArchive/redis/releases 2 打开解压文件&#xff0c;可以看到以下内容 3 使用命令进行安装和注册redis到window服务 …

ChatGPT 作为 Python 编程助手

推荐&#xff1a;使用 NSDT场景编辑器 助你快速搭建可编辑的3D应用场景 简单的数据处理脚本 我认为一个好的起点是某种数据处理脚本。由于我打算让 ChatGPT 之后使用各种 Python 库编写一些机器学习脚本&#xff0c;这似乎是一个合理的起点。 目标 首先&#xff0c;我想尝试…

异常的使用

第一章 异常 1、异常概念 异常&#xff0c;就是不正常的意思。在生活中&#xff1a;医生说&#xff0c;你的身体某个部位有异常&#xff0c;该部位和正常相比有点不同&#xff0c;该部位的功能将受影响&#xff0c;在程序中的意思就是&#xff1a; 异常&#xff1a;指的是程序…

【福利】免费白嫖Notability订阅版,无需越狱,支持无限笔记!

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 视频教程&#xff1a;【福利】免费白嫖Notability订阅版&#xff0c;无需越狱&#xff0c;支持无限笔记&#xff01;_哔哩哔哩_bilibili 下载爱思助手 连接iPad 搜索并安装12.1.8版本的notability iPad上打开软件…

Unity 基础函数

Mathf&#xff1a; //1.π-PI print(Mathf.PI); //2.取绝对值-Abs print(Mathf.Abs(-10)); print(Mathf.Abs(-20)); print(Mathf.Abs(1)); //3.向上取整-Ce il To In t float f 1.3f; int i (int)f; …

springboot(4)

AOP 1.AOP与OOP OOP&#xff08;Object Oriented Programming&#xff0c;面向对象编程&#xff09; AOP&#xff08;Aspect Oriented Programming&#xff0c;面向切面编程&#xff09; POP&#xff08;Process Oriented Programming&#xff0c;面向过程编程&#xff09; …

网络防御(2)

1. 什么是防火墙&#xff1f; 2. 状态防火墙工作原理&#xff1f; 3. 防火墙如何处理双通道协议&#xff1f; 一、什么是防火墙&#xff1f; 防火墙是一种网络安全设备或软件&#xff0c;用于保护计算机网络免受未经授权的访问&#xff0c;并管理网络流量。它作为一个安全边界…

抖音商品上架有攻略:详细介绍步骤与注意事项

抖音是一款非常流行的短视频分享平台&#xff0c;也是一个非常适合进行商品销售的平台。上架商品是在抖音上进行电商销售的重要一环&#xff0c;下面不若与众将介绍抖音商品的上架流程和注意事项。 1. 注册账号和认证&#xff1a;首先&#xff0c;你需要在抖音平台上注册一个账…

SQL 相关子查询 和 不相关子查询、Exists 、Not Exists、 多表连接(包含自连接)

不相关子查询 子查询的查询条件不依赖于父查询&#xff0c;称不相关子查询。子查询可以单独运行的 select stu_id,sex,age from student t where sex(select sexfrom studentwhere stu_id10023 )相关子查询 关联子查询 子查询的查询条件依赖于父查询&#xff0c;称为 相关子…

GD32F103的EXTI中断和EXTI事件

GD32F103的EXTI可以产生中断&#xff0c;也产生事件信号。 GD32F03的EXTI触发源: 1、I/O管脚的16根线&#xff1b; 2、内部模块的4根线(包括LVD、RTC闹钟、USB唤醒、以太网唤醒)。 通过配置GPIO模块的AFIO_EXTISSx寄存器&#xff0c;所有的GPIO管脚都可以被选作EXTI的触发源…

在线原型设计工具有好用的吗?就是这10个

随着设计工作的不断发展&#xff0c;原型设计在设计工作中越来越重要&#xff0c;而在线原型设计工具在减轻了设计师工作负担的同时也提高了设计师的工作效率&#xff0c;今天本文将为大家推荐10个能在线使用的原型设计工具&#xff0c;一起来看看吧&#xff01; 1、即时设计 …