前言:
本文内容: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) { if (!this.resourceProperties.isAddMappings()) { logger.debug("Default resource handling disabled"); return; } Duration cachePeriod = this.resourceProperties.getCache().getPeriod(); CacheControl cacheControl = this.resourceProperties.getCache().getCachecontrol().toHttpCacheControl(); 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)); } }
|
地址:classpath:/META-INF/resources/webjars/
什么是webjars
WebJars - Web Libraries in Jars
我们可以通过webjars官网找到我们需要的静态资源内容,并通过Maven的形式引入到项目中。
地址: /**
,classpath:/resources/
, classpath:/static/
, classpath:/public/
我们根据上方的地址在项目新建所有能存放静态资源的目录,并放入资源来测试优先级。
优先级resources>static>public
总结:
- 在SpringBoot中,我们可以使用以下方式处理静态资源
webjars
resources,static,public,/***
- 优先级
resources>static(默认)>public
- 当我们在配置文件自定义静态资源路径后,以上的方法就会失效。
首页和图标定制
首页定制
找到首页部分的源码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(); }
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
|