层层递进的关系来分析 SpringBoot 的Web模块源码
1. SpringBoot Web源码分析(一) 静态资源源码分析
2. SpringBoot Web源码分析(二) 请求处理源码分析
3. SpringBoot Web源码分析(三) 响应处理源码分析
4. SpringBoot Web源码分析(四) 视图解析器源码分析
5. SpringBoot Web源码分析(五),拦截器和文件上传
6. SpringBoot Web源码分析(六) 异常处理和Servlet组件
7. SpringBoot Web源码分析(七) 嵌入式服务器和定制化原理
1.4 视图解析与模板引擎
视图解析:SpringBoot 默认不支持 jsp,需要引入第三方模块技术实现页面渲染
1.4.1 视图解析
1.4.2 模板引擎-Thymeleaf
1. 简介
Thymeleaf is a modern server-side Java template engine for both web and standalone environments, capable of processing HTML, XML, JavaScript, CSS and even plain text.
现代化、服务端Java模板引擎
2. 基本语法
…
1.4.3 视图解析流程
- 目标方法处理的过程中,所有数据都会被放在 ModelAndViewContainer 里面。包括数据和视图地址
- 方法的参数是一个自定义类型对象(从请求参数中确定的),把他重新放在 ModelAndViewContainer
- 任何目标方法执行完成以后都会返回 ModelAndView(数据和视图地址)。
- processDispatchResult 处理派发结果(页面改如何响应)
- render(mv, request, response); 进行页面渲染逻辑
- 根据方法的String返回值得到 View 对象【定义了页面的渲染逻辑】
- 所有的视图解析器尝试是否能根据当前返回值得到View对象
- 得到了 redirect:/main.html --> Thymeleaf new RedirectView()
- ContentNegotiationViewResolver 里面包含了下面所有的视图解析器,内部还是利用下面所有视图解析器得到视图对象。
- view.render(mv.getModelInternal(), request, response); 视图对象调用自定义的render进行页面渲染工作
- 根据方法的String返回值得到 View 对象【定义了页面的渲染逻辑】
- render(mv, request, response); 进行页面渲染逻辑
- RedirectView 如何渲染【重定向到一个页面】
- 获取目标url地址
- response.sendRedirect(encodedURL);
View 接口
视图解析器