拓展
点击跳转哦~: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:
- 官网地址:webjars官网
- 我们以jquery为例
- 添加依赖
<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博主写的不错!写作不易,请点赞、关注、评论给博主一个鼓励吧**转载请注明出处哦**