spring boot 支持多种视图解析器,常用的就是Thymeleaf。
Thymeleaf 是一种模板引擎语言,开发相对容易,但是效率相对较低,毕竟要编译一次。所以在开发管理后台的时候等并发要求不高的应用可以使用。
一、Thymeleaf 初体验
变量取值:
表达式名称 | 语法 | 用途 |
变量取值 | ${...} | 获取请求域、session域等域中相关信息 |
选择变量 | *{...} | 获取上下文对象值 |
消息 | #{...} | 获取国际化等值 |
连接 | @{...} | 生成连接 |
片段表达式 | ~{...} | jsp:include 引用,引入公共页面 |
html元素赋值:
<input type="submit" value="" th:attr="value=#{sb.sb}">,使用th:attr="属性=值"或者th:value="值",进行赋值。
使用方式,引入依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
自动配置好的策略,使用者只要开发页面即可:
- 所有配置属性都在:ThymeleafProperties
- 配置好了模板引擎:SpringTemplateEngine
- 试图解析器:ThymeleafViewResolver
页面规则:
防止表单重复提交,使用请求请求重定向:
简单的逻辑:
行内数据取值:
遍历:
公共内容提取,主要三种方式:
- replace
- include
- insert
Thymeleaf 整体比较简单,可以参照以前的JSP和EL表达式。使用的时候最好是访问官方文档进行参照。
二、视图解析原理
- 目标方法处理过程中,所有的字符串数据都会放在ModelViewContainer中,包括数据和试图地址
- 如果方法的参数是一个自定义类型的对象(从请求参数中确定的),也会放入ModelViewContainer,可以理解为在整个流程中产生的任何对象都会放入容器中。
- 任何目标方法执行完成之后,都会返回ModelAndView对象
- 整个试图跳转是由 processDispatchResult 决定的
- 调用render(ModelAndView mv, HttpServletRequest request, HttpServletResponse response)进行页面渲染
-
根据方法的返回值,得到view对象 ,view定义了页面的渲染逻辑
-
得到试图解析器5钟,遍历所有解析器查看哪个能根据当前返回值得到view
- 可以看到第一个内容协商试图解析器,包含了其他4个
-
得到试图对象调用render方法
-
-
ThymeleafViewResolver试图解析器,会根据前缀判断是重定向or跳转
-
如果是普通字符串则返回 ThymeleafView,最后调用器render拼接页面,返回给数据流
- 调用render(ModelAndView mv, HttpServletRequest request, HttpServletResponse response)进行页面渲染