SpringBoot2.x入门到项目实战课程系列(第五章)

项目源码:
第5章 Spring Boot 的Web开发

  • Web 开发是项目实战中至关重要的一部分 , Web开发的核心内容主要包括嵌入的 Servlet 容器和SpringMVC
  • Web开发官方文档:
  • #boot-features-spring-mvc
5.1 Web开发支持
  • Spring Boot 为 Web 开发提供了 spring-boot-starter-web 启动器作为基本支持 , 为我们提供了嵌入的Tomcat 以及 Spring MVC 的依赖支持 。 (参考:pom.xml)
  • 也提供了很多不同场景的自动配置类 , 让我们只需要在配置文件中指定少量的配置即可启动项目 。 自动配置类存储在 spring-boot-autoconfigure.jar 的 org.springframework.boot.autoconfigure 包下 。

SpringBoot2.x入门到项目实战课程系列(第五章)文章插图
  • 思考自动配置原理: 自动配置场景 SpringBoot 帮我们配置了什么?是否修改?能修改哪些配置?是否可以扩展?……
  • 自动配置类举例:
  • 文件名可以看出
  1. xxxxAutoConfiguration :向容器中添加自动配置组件
  2. xxxxProperties :使用自动配置类 来封装 配置文件的内容
  • SpringMVC配置 : WebMvcAutoConfiguration 和 WebMvcProperties

SpringBoot2.x入门到项目实战课程系列(第五章)文章插图
  • 内嵌 Servlet 容器 : ServletWebServerFactoryAutoConfiguration 和 ServerProperties

SpringBoot2.x入门到项目实战课程系列(第五章)文章插图
  • 上传文件的属性 :MultipartAutoConfiguration 和 MultipartProperties

SpringBoot2.x入门到项目实战课程系列(第五章)文章插图
  • JDBC : DataSourceAutoConfiguration 和 DataSourceProperties

SpringBoot2.x入门到项目实战课程系列(第五章)文章插图
5.2 静态资源的映射规则
  • 对静态资源的映射规则 ,可通过分析 WebMvcAutoConfiguration 自动配置类得到
5.2.1 webjars 资源映射
  • 在 WebMvcAuotConfiguration.addResourceHandlers() 分析webjars 资源映射
public void addResourceHandlers(ResourceHandlerRegistry registry) { if (!this.resourceProperties.isAddMappings()) {logger.debug("Default resource handling disabled"); } else {Duration cachePeriod = this.resourceProperties.getCache().getPeriod();CacheControl cacheControl = this.resourceProperties.getCache().getCachecontrol().toHttpCacheControl(); if (!registry.hasMappingForPattern("/webjars/**")) {//收到 /webjars/**请求后, 会去classpath:/META-INF/resources/webjars/ 查找资源文件this.customizeResourceHandlerRegistration(registry.addResourceHandler(new String[]{"/webjars/**"}).addResourceLocations(new String[]{"classpath:/METAINF/resources/webjars/"}).setCachePeriod(this.getSeconds(cachePeriod)).setCacheControl(cacheControl)); } String staticPathPattern = this.mvcProperties.getStaticPathPattern(); if (!registry.hasMappingForPattern(staticPathPattern)) {this.customizeResourceHandlerRegistration(registry.addResourceHandler(new String[{staticPathPattern}).addResourceLocations(getResourceLocations(this.resourceProperties.getStaticLocations())).setCachePeriod(this.getSeconds(cachePeriod)).setCacheControl(cacheControl)); }}