目录
7.6.7.2 SpringBoot自动配置好thymeleaf
第七章 Web开发
7.5 视图解析
SpringBoot默认不支持JSP,需要引入第三方模板引擎技术实现页面渲染。
7.5.1 视图解析原理流程
- 目标方法处理的过程中,所有数据都会被放在ModelAndViewContainer里面,包括数据和视图地址
- 如果处理器目标方法的参数是一个自定义类型对象,则对象的属性值从请求参数中确定,也会把这个对象重新放在ModelAndViewContainer中(之前学习过)
- 任何目标方法执行完成以后都会返回ModelAndView(数据和视图地址),Model就是跳转后需要的数据,View就是要跳转到的页面地址。即使自己定义目标方法时没有写视图地址,底层也会有一个默认的视图地址规则。
-
processDispatchResult处理派发结果,决定页面改如何响应
-
render(mv, request, response); 进行页面渲染逻辑
-
根据方法的String返回值得到View对象【定义了页面的渲染逻辑】
-
所有的视图解析器尝试是否能根据当前返回值得到View对象
-
比如重定向操作,得到了redirect:/main.html --> ThymeleafViewResolver视图解析器new了一个RedirectView视图对象
-
ContentNegotiationViewResolver里面包含了所有的视图解析器,内部还是利用这些视图解析器得到视图对象。(视图解析器的作用就是得到这个View对象)
-
视图对象调用render方法进行页面渲染工作view.render(mv.getModelInternal(), request, response);
- RedirectView如何渲染【重定向到一个页面】
-
获取目标url地址
-
response.sendRedirect(encodedURL);(还是Servlet中的重定向方式)
-
- RedirectView如何渲染【重定向到一个页面】
-
-
-
视图解析:
- 返回值以forward:开始:new InternalResourceView(forwardUrl); --> 转发request.getRequestDispatcher(path).forward(request, response);(还是Servlet中的请求转发方式)
-
返回值以redirect:开始: new RedirectView() --> render就是重定向逻辑response.sendRedirect(encodedURL);
-
返回值是普通字符串: new ThymeleafView()
- 视图解析器:
7.6 模板引擎-Thymeleaf
7.6.1 简介
Thymeleaf是一款用于渲染XML/XHTML/HTML5内容的模板引擎,类似JSP、Velocity、FreeMaker等,可以完全替代JSP,也可以轻易的与Spring MVC等Web框架进行集成作为Web应用的模板引擎。
Thymeleaf最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个Web应用。
7.6.2 基本语法
7.6.2.1 表达式
表达式名字 | 语法 |
变量取值 | ${...} |
选择变量 | *{...} |
消息 | #{...} |
链接 | @{...} |
片段表达式 | ~{...} |
7.6.2.2 字面量
- 文本值:'one text' 'Another one'
- 数字:0 34 3.0 12.3
- 布尔值:true false
- 空值:null
- 变量:one two 变量不能有空格
7.6.2.3 文本操作
- 字符串拼接:+
- 变量替换:|The name is ${name}|
7.6.2.4 数学运算
- 运算符:+ - * / %
7.6.2.5 布尔运算
- 运算符:and or
- 一元运算:! not
7.6.2.6 比较运算
- 比较:>/gt </lt >=/ge <=/le ==/eq !=/ne
7.6.2.7 条件运算
- if-then:(if) ? (then)
- if-then-else:(if) : (then) : (else)
- Default:(value) ?: (defaultvalue)
7.6.2.8 特殊操作
- 无操作:_
7.6.3 设置属性值-th:attr
- 设置单个值
<form action="subscribe.html" th:attr="action=@{/subscribe}">