一.视图解析thymeleaf的使用
1.配置
- 引入thymeleaf的依赖
- springboot自动配置好了thymeleaf(模板引擎,视图解析器放到容器中了)
- 直接开发页面即可
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
2.thymeleaf的配置默认路径
- prefix=“spring.thyleaf”
- =“classpath:/templates/”
- =“.html”
3.thymeleaf开发
- 引入模板空间 xmls:th=“http://www.thymeleaf.org”
二.视图解析原理
1.重定向
- 从dodispatch解析
- 执行完handler方法后会有一个返回值(例如返回值为redirect:/main.html)
- 选择返回值处理器来处理返回值
- ModelAndView…
- ViewNameMethodReturnValueHnadler 成功条件,判断是否为字符串
- 所有的返回值最终都会被放在ModelAndViewContainer容器里面,包括数据和视图地址(model内的放入的值,view为返回的结果)
- 将字符串放入容器的viewName属性中
- 判断当前视图是否为重定向视图(判断视图名是不是 startwith"redirect:")
- 将model和viewname封装为一个modelandview(无论任何handler方法都会返回,里面有数据和地址)
- 跳转视图在 processDispacherResult方法中,处理派发结果,决定页面如何响应
- 里面有render(mv,request,response)方法,来具体渲染页面
- 从mv中拿到视图名(redirect:/main.html)
- 根据方法的String返回值,得到view对象(定义了页面的渲染逻辑)
- 如何得到的view对象利用内容协商(里面有所有的视图解析器)(选择合适的viewResolvers视图解析器来解析卷根据当前返回值得到view对象)
- thymeleafviewResolver…判断里面是否以redirect:开头,是,然后直接new了一个RedirectView返回
- 即根据返回值(redirect:/main.html)确定了一个view为RedirectView
- 得到视图对象RedirectView后视图对象会调用render方法来进行页面渲染(如何渲染)(重定向到一个页面)
- 获取目标url地址/main.html
- 调用servlet原生方法response.sendRedirect(/main.html)
2.直接返回字符串
- 例如返回“table/dynamic_table”
- hymeleafviewResolver…
- 判断里面是否以redirect开始,会new一个RedirectView的对象(底层render逻辑为重定向)
- 判断里面是否以forward开始,会new一个internalResourceView的对象(底层render逻辑为request.getRequestDispacher()最终调用forward)
- 返回值时普通字符串,直接new一个ThymeleafView()声明渲染逻辑,调用其render方法