https://i.xue.taobao.com/my/learning.htm?spm=a2174.7365761.0.0.oxhqUo
第4章 Spring Boot 的Web开发
Web 开发是项目实战中至关重要的一部分,Web开发的核心内容主要包括嵌入的Servlet容器和SpringMVC
Web开发官方文档:
https://docs.spring.io/spring-boot/docs/2.0.6.RELEASE/reference/htmlsingle/#boot-features-spring-mvc
4.1 Web开发支持
Spring Boot 为 Web 开发提供了 spring-boot-starter-web 启动器作为基本支持,为我们提供了嵌入的
Tomcat 以及 Spring MVC 的依赖支持。(参考:pom.xml)
也提供了很多不同场景的自动配置类,让我们只需要在配置文件中指定少量的配置即可启动项目。自动配置
类存储在 spring-boot-autoconfigure.jar 的 org.springframework.boot.autoconfigure 包下。
思考自动配置原理: 自动配置场景 SpringBoot 帮我们配置了什么?是否修改?能修改哪些配置?是否可以
扩展?……
自动配置类举例:
文件名可以看出
SpringMVC配置 : WebMvcAutoConfiguration 和 WebMvcProperties
内嵌 Servlet 容器 : ServletWebServerFactoryAutoConfiguration 和 ServerProperties
上传文件的属性 :MultipartAutoConfiguration 和 MultipartProperties
JDBC : DataSourceAutoConfiguration 和 DataSourceProperties
等等…………
4.2 静态资源的映射规则
对静态资源的映射规则, 可通过分析 WebMvcAutoConfiguration 自动配置类得到
4.2.1 webjars 资源映射
在 WebMvcAuotConfiguration.addResourceHandlers() 分析webjars 资源映射
1. 所有 /webjars/** 请求,都去 classpath:/META-INF/resources/webjars/ 目录找对应资源文件
2. webjars:以jar包的方式引入静态资源
webjars官网: https://www.webjars.org/
3. 在官网打开资源文件的依赖配置信息,然后粘贴到 pom.xml 中
4. 访问 localhost:8080/webjars/jquery/3.3.1/jquery.js 会在下面路径中查找
4.2.2 其他静态资源映射
在 WebMvcAuotConfiguration.addResourceHandlers() 分析访问其他资源映射
staticPathPattern 处理其他访问的静态路径,从 WebMVCProperties 构造器中获取到 /**
ResourceProperties 根据请求查找资源文件, 从以下 四个路径 中 查找( 静态资源目录 )
总结:
当接受到 /** 请求访问资源时, 会被映射到下面4个 类路径下的静态资源目录中查找
访问 localhost:8080/style.css 会在上面四个静态资源路径中查找文件
4.2.3 欢迎页映射
在 WebMvcAuotConfiguration.welcomePageHandlerMapping() 分析 欢迎页映射
getWelcomePage() 方法获取 欢迎页面 可存储路径
分析后, 会从 4个静态资源目录 + 根路径 / 中 查找 index.html 页面
会在静态资源目录下 与 根路径查找 (按该顺序) index.html页面; 收到 "/**" 请求映射
访问localhost:8080/ 会在上面5个目录中查找 index.html 页面(因为/也属于 /** )
4.2.4 图标映射
Spring Boot 会在静态资源目录下 与 根路径(按该顺序) 查找 faicon.ico 页面;
如果存在这样的文件,Spring Boot 会自动将其设置为应用图标。
4.3 Thymeleaf 模板引擎
Spring Boot 官方不推荐使用JSP,因为内嵌的 Tomcat 、Jetty 容器不支持以 jar 形式运行 JSP。Spring Boot
中提供了大量模板引擎,包含 Freemarker、Mastache、Thymeleaf 等。 而 Spring Boot 官方推荐使用
Thymeleaf 作为模板引擎, 因为 Thymeleaf 提供了完美的 SpringMVC 的支持。
4.3.1 引入 Thymeleaf
pom.xml 加入 Thymeleaf 启动器
4.3.2 使用 Thymeleaf
模板文件放在哪里 ?
通过上面分析发现, 将 HTML 页面放到 classpath:/templates/ 目录下, Thymeleaf 就能自动渲染
导入 Thymeleaf 的名称空间
在 html 页面加上以下名称空间, 使用 Thymeleaf 时就有语法提示。
演示 Thymeleaf 语法
4.3.3 Thymeleaf 语法
4.3.3.1 常用属性
参考 Thymeleaf 官方文档 10 Attribute Precedence
4.3.3.2 标准表达式语法
参考 Thymeleaf 官方文档 4 Standard Expression Syntax
4.3.4 实例代码演示
4.3.4.1 声明与引入公共片段
练习:将项目中的 公共模块抽取出来到 public.html 中
4.3.4.2 迭代 th:each
常用迭代方式
获取迭代状态
练习 : 供应商管理 查询页面
4.3.4.3 条件判断
4.3.4.4 显示标签体内容
4.3.4.5 th:object 直接取出对象
使用th:object 直接取出对象,然后写对象里的属性名即可获取属性值
4.4 SpringBoot 热部署
默认情况下, 在开发中我们修改一个项目文件后,想看到效果不得不重启应用,这会导致浪费大量时间 ,我
们希望不重启应用的情况下,程序可以自动部署(热部署)。
4.5 分析 SpringMVC 自动配置
Spring Boot 为 Spring MVC 提供了适用于多数应用的自动配置功能( WebMvcAutoConfiguration )。
在Spring默认基础上,自动配置添加了以下特性:
如果想保留 Spring Boot MVC的特性,而且还想扩展新的功能(拦截器, 格式化器, 视图控制器等),你可以在你自
定义的 WebMvcConfigurer 类上增加 @Configuration 注解。
如果你想全面控制SpringMVC(也就是不使用默认配置功能), 你在自定义的Web配置类上添加
@Configuration 和 @EnableWebMvc 注解。
4.6 扩展 SpringMVC 功能
扩展一个视图解析器功能
4.7 全面控制 SpringMVC
如果你想全面控制SpringMVC(SpringBoot对SpringMVC的自动配置都废弃), 在自定义的Web配置类上添加
@Configuration 和 @EnableWebMvc 注解。
4.8 总结 SpringMVC 配置
在Spring Boot中自已配置组件的时候,先看容器中有没有公司自已配置的(@Bean、@Component),如果
有就用公司自已配置的; 如果没有,才自动配置. 在Spring Boot中会有非常多的xxxConfigurer帮助我们进行扩展配置. 在Spring Boot中会有很多的xxxCustomizer帮助我们进行定制配置.