SpringBoot2.x入门到项目实战课程系列(第五章)
项目源码:
第5章 Spring Boot 的Web开发
- Web 开发是项目实战中至关重要的一部分 , Web开发的核心内容主要包括嵌入的 Servlet 容器和SpringMVC
- Web开发官方文档:
- #boot-features-spring-mvc
- Spring Boot 为 Web 开发提供了 spring-boot-starter-web 启动器作为基本支持 , 为我们提供了嵌入的Tomcat 以及 Spring MVC 的依赖支持 。 (参考:pom.xml)
- 也提供了很多不同场景的自动配置类 , 让我们只需要在配置文件中指定少量的配置即可启动项目 。 自动配置类存储在 spring-boot-autoconfigure.jar 的 org.springframework.boot.autoconfigure 包下 。
文章插图
- 思考自动配置原理: 自动配置场景 SpringBoot 帮我们配置了什么?是否修改?能修改哪些配置?是否可以扩展?……
- 自动配置类举例:
- 文件名可以看出
- xxxxAutoConfiguration :向容器中添加自动配置组件
- xxxxProperties :使用自动配置类 来封装 配置文件的内容
- SpringMVC配置 : WebMvcAutoConfiguration 和 WebMvcProperties
文章插图
- 内嵌 Servlet 容器 : ServletWebServerFactoryAutoConfiguration 和 ServerProperties
文章插图
- 上传文件的属性 :MultipartAutoConfiguration 和 MultipartProperties
文章插图
- JDBC : DataSourceAutoConfiguration 和 DataSourceProperties
文章插图
5.2 静态资源的映射规则
- 对静态资源的映射规则 ,可通过分析 WebMvcAutoConfiguration 自动配置类得到
- 在 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)); }}
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 徐福记联手JDL京东物流向数智化转型,首次落地智慧园区项目
- 苹果两款新iPad齐曝光:性能提高、入门款更轻薄、售价便宜
- 运动计数开发项目的对抗赛:飞算全自动软件工程平台碾压传统模式
- RHEL 9提升了x86_64处理器的入门要求
- 江北新区企业院士工作站技术攻关项目立项数位居南京第一
- 入门HiFi享好声,这几款耳机绝对值得入手
- 赞!盐城高新区4个项目入选省级项目立项!
- 威海高新区2项目获2020年度山东省重点研发计划(重大科技创新工程)立项支持
- 浙江公布首批“互联网+”医疗服务价格项目!适用各级公立医疗机构
- 168天封顶!投资56亿重点AI项目将在上海竣工,提供世界领先算力支撑