SpringBoot系列(四)Web开发的探究

18 篇文章 3 订阅
13 篇文章 1 订阅
本文详细介绍了SpringBoot中静态资源的映射规则,包括webjars的使用、自定义静态资源路径、静态资源访问顺序以及如何指定访问路径。同时,还探讨了首页和图标定制,包括欢迎页的配置和favicon.ico的设置。通过示例代码和步骤解析,帮助读者深入理解SpringBoot的静态资源管理和首页定制机制。
摘要由CSDN通过智能技术生成

拓展

点击跳转哦~:SpringBoot系列学习汇总和拓展

前言

  • 其实SpringBoot的东西用起来非常简单,因为SpringBoot最大的特点就是自动装配。
  • 但是靠死记硬背肯定是不行的,毕竟东西太多了,费时费力不讨好的事。下面会有关于SpringBoot自动装配的 源码 讲解,没事的时候多看看,学习里面的思路和想法对我们的成长肯定是有很大好处的!

一、静态资源

1.1、静态资源映射规则详解
  • ①找到WebMvcAutoConfiguration.class文件
    在这里插入图片描述
  • ②找到addResourceHandlers(添加资源处理)方法
    在这里插入图片描述
  • ③源码探究
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
			super.addResourceHandlers(registry);
			//资源如果不存在,即false,日志打印【默认资源处理被禁用】,不进行处理,直接返回,反之进入第二步
			if (!this.resourceProperties.isAddMappings()) {
				logger.debug("Default resource handling disabled");
				return;
			}
			ServletContext servletContext = getServletContext();
			//添加静态资源
			//所有的 /webjars/** , 都需要去 classpath:/META-INF/resources/webjars/ 找对应的资源;
			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));
				}
			});
		}

		private void addResourceHandler(ResourceHandlerRegistry registry, String pattern, String... locations) {
			addResourceHandler(registry, pattern, (registration) -> registration.addResourceLocations(locations));
		}

		private void addResourceHandler(ResourceHandlerRegistry registry, String pattern,
				Consumer<ResourceHandlerRegistration> customizer) {
			if (registry.hasMappingForPattern(pattern)) {
				return;
			}
			ResourceHandlerRegistration registration = registry.addResourceHandler(pattern);
			customizer.accept(registration);
			registration.setCachePeriod(getSeconds(this.resourceProperties.getCache().getPeriod()));
			registration.setCacheControl(this.resourceProperties.getCache().getCachecontrol().toHttpCacheControl());
			customizeResourceHandlerRegistration(registration);
		}
1.2、如何使用webjars访问静态资源
  • ①项目引用webjars:
  • 添加依赖
<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>jquery</artifactId>
    <version>3.6.0</version>
</dependency>
  • ②找到jar包位置
    在这里插入图片描述

  • ③启动项目访问试试看
    在这里插入图片描述

  • ④访问地址:http://127.0.0.1:7777/webjars/jquery/3.6.0/jquery.js
    在这里插入图片描述

  • ⑤ ok!访问成功!大功告成!

1.3、自定义静态资源路径
  • ① 引入webjars之后,可以在resources文件夹中建立以下三个文件夹:
    在这里插入图片描述
  • ②在public中加一个测试的html文件
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>dadadingdada</h1>
</body>
</html>
  • ③访问以下试试:打工告成!
    在这里插入图片描述
1.4、静态资源路径的顺序
  • ①先在不同的地方分别建立四个一样名字的html文件,但是内容有区别,如下:
    在这里插入图片描述

  • ②四个都存在的情况下:优先级最高的是:static目录下的文件
    在这里插入图片描述

  • ③删除static目录下的html:优先级:public目录下第二高

    • 记得清楚浏览器缓存,不然看到的可能还是原先的页面
      在这里插入图片描述
  • ④删除public目录下的文件:优先级:404
    在这里插入图片描述

  • ⑤总结:static优先级高于public,而template必须得通过controller来跳转定向,resources根目录下无法访问,除非自己指定目录。

1.5、指定访问路径
  • 一旦自己定义了静态文件夹的路径,原来的自动配置就都会失效了!
    • yml配置文件中新增:
    • 格式:static-locations: file: + 静态资源所在的路径
spring:
  resources:
    static-locations: file:C:\Users\大大丁大大\Downloads\个人测试文件\dyjProject\src\main\java\com\dyjTest\dyjProject\dyj
  • ②访问测试:
    在这里插入图片描述

二、首页和图标的定制

2.1 首页
  • ①首页源码:WelcomePageHandlerMapping方法
@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;
		}
  • ②getWelcomePage()
public FlashMapManager flashMapManager() {
			return super.flashMapManager();
		}

		private Resource getWelcomePage() {
			for (String location : this.resourceProperties.getStaticLocations()) {
				Resource indexHtml = getIndexHtml(location);
				if (indexHtml != null) {
					return indexHtml;
				}
			}
			ServletContext servletContext = getServletContext();
			if (servletContext != null) {
				return getIndexHtml(new ServletContextResource(servletContext, SERVLET_LOCATION));
			}
			return null;
		}
		// 欢迎页就是一个location下的的 index.html 而已
		private Resource getIndexHtml(Resource location) {
			try {
				Resource resource = location.createRelative("index.html");
				if (resource.exists() && (resource.getURL() != null)) {
					return resource;
				}
			}
			catch (Exception ex) {
			}
			return null;
		}
  • ③欢迎页,静态资源文件夹下的所有 index.html 页面;被 /** 映射。

    • 比如我访问 http://localhost:7777/ ,就会找静态资源文件夹下的 index.html
    • 新建一个 index.html ,在我们上面的3个目录中任意一个;然后访问测试 http://localhost:7777/ 看结果!
      在这里插入图片描述

在这里插入图片描述

2.2 图标
  • ①首先关闭默认图标:这里建议将SpringBoot版本降到2.1.7,因为最新版本已经没有这个了
    在这里插入图片描述
  • ②yml中添加配置
spring:
  mvc:
    favicon:
      enabled: false
  • ③新建 favicon.ico 文件:放在static目录下哦~
    在这里插入图片描述

  • ④清楚浏览器缓存后访问:看仔细!!!!在这里插入图片描述

路漫漫其修远兮,吾必将上下求索~
如果你认为i博主写的不错!写作不易,请点赞、关注、评论给博主一个鼓励吧**转载请注明出处哦**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值