前言:

本文内容:web开发探究、静态资源导入探究、首页和图标定制

推荐免费SpringBoot基础教程视频:[【狂神说Java】SpringBoot最新教程通俗易懂_哔哩哔哩_bilibili

web开发探究

jar:没有webapp

自动装配(创建应用,选择模块)

SpringBoot到底帮我们配置了什么?能否进行修改?能修改哪些?是否可以扩展?

  • xxxAutoConfiguration 像容器中自动配置组件
  • xxxProperties 自动配置类,装配配置文件中自定义的内容

web开发要解决的问题:

  • 导入静态资源
  • 首页
  • 没有jsp,使用模板引擎Thymeleaf
  • 装配扩展SpringMVC
  • 增删改查
  • 拦截器
  • 国际化

静态资源导入探究

创建新项目springboot-03-web,并引入web模块

要找到静态资源可以存放的位置,首先找到静态资源部分的源码WebAutoConfiguration进行分析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
// 判断 如果静态资源被自定义了,直接打印并return
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));
}
// 通过获取静态资源地址找到 /**, classpath:/META-INF/resources/ ,
// classpath:/resources/, classpath:/static/, classpath:/public/
String staticPathPattern = this.mvcProperties.getStaticPathPattern();
if (!registry.hasMappingForPattern(staticPathPattern)) {
customizeResourceHandlerRegistration(registry.addResourceHandler(staticPathPattern)
.addResourceLocations(getResourceLocations(this.resourceProperties.getStaticLocations()))
.setCachePeriod(getSeconds(cachePeriod)).setCacheControl(cacheControl));
}
}

地址:classpath:/META-INF/resources/webjars/

什么是webjars

WebJars - Web Libraries in Jars

我们可以通过webjars官网找到我们需要的静态资源内容,并通过Maven的形式引入到项目中。

地址: /**,classpath:/resources/, classpath:/static/, classpath:/public/

我们根据上方的地址在项目新建所有能存放静态资源的目录,并放入资源来测试优先级。

优先级resources>static>public

总结:

  1. 在SpringBoot中,我们可以使用以下方式处理静态资源
    • webjars
    • resources,static,public,/***
  2. 优先级resources>static(默认)>public
  3. 当我们在配置文件自定义静态资源路径后,以上的方法就会失效。

首页和图标定制

首页定制

找到首页部分的源码WebAutoConfiguration进行分析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@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());
return Arrays.stream(locations).map(this::getIndexHtml).filter(this::isReadable).findFirst();
}
// 找到一个名为index.html的文件
private Resource getIndexHtml(String location) {
return this.resourceLoader.getResource(location + "index.html");
}

通过分析源码,我们得知首页存放在静态资源目录下,并且名为index.html

在静态资源目录下新建index.html(我们这里存放在static下)

1
2
3
4
5
6
7
8
9
10
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>首页</h1>
</body>
</html>

运行项目测试,首页可以显示

图标定制

这里讲的是新版图标定制,非常简单

favicon.ico的图标文件存放在static文件中,在首页编写以下代码即可

1
<link rel="icon" href="/favicon.ico">

测试前记得清理浏览器缓存

旧版方法(SpringBoot 2.2.0 以前的版本)

存放图标步骤同上,然后再application.yaml中关闭默认图标(同样记得清理浏览器缓存哦)

1
2
3
4
spring:
mvc:
favicon:
enabled: false