什么是视图解析

springboot可视化图表整合到一个页面上_servlet

 简单来说视图解析就是处理视图的一种手段

处理手段就是处理视图的方式

springboot可视化图表整合到一个页面上_表单_02

所以为了我们的数据能渲染到页面是上,我们需要视图解析

 怎么样进行视图解析

我们需要模板引擎来进行视图解析,但是springBoot不支持jsp模板引擎,所以在这边我们使用thymelea

 thymelea是一个现代化的服务端的java模板引擎,对于后端开发人员,语法比较简单

springboot可视化图表整合到一个页面上_表单_03

如何使用thymelea

方法:非常的简单,以下面这个例子

th:text就是把我们后台获取到的msg.headers.name,渲染到这个标签上,如果成功获取了,就渲染,没获取成功就用原来的

springboot可视化图表整合到一个页面上_视图解析器_04

 基础的使用语法

springboot可视化图表整合到一个页面上_servlet_05

springboot可视化图表整合到一个页面上_servlet_06

 

springboot可视化图表整合到一个页面上_表单_07

 使用thymelea进行测试(在springboot01项目进行测试)

1.引入依赖

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

springboot可视化图表整合到一个页面上_html_08

2.底层是如何进行 thymelea自动配置的

springboot可视化图表整合到一个页面上_servlet_09

springboot可视化图表整合到一个页面上_html_10

 放入模板引擎解析器

springboot可视化图表整合到一个页面上_servlet_11

 什么有前缀有后缀的

但是这些也都是从配置文件中进行绑定的

springboot可视化图表整合到一个页面上_表单_12

 还放入了模板引擎

springboot可视化图表整合到一个页面上_视图解析器_13

还放入了视图解析器

springboot可视化图表整合到一个页面上_html_14

我们看到上面很多都使用了preperties,这个东西其实就是配置文件,是已经被写死的

里面也规定了页面放到哪里,也规定了使用的后缀为.html,所以的页面都会跳转到xxx.html

springboot可视化图表整合到一个页面上_servlet_15

 

springboot可视化图表整合到一个页面上_视图解析器_16

 3.开始测试

按照配置文件的要求,建立文件夹

springboot可视化图表整合到一个页面上_表单_17

按照官方模板,引入thymeleaf的名称空间

现在我们写th就有提示了

 

springboot可视化图表整合到一个页面上_视图解析器_18

 前端从路径发起/LALALA请求,后端使用这个方法进行处理,并且传入一个model对象,model对象在请求域中放入值,最后跳转到success页面

注意:为什么我们不写全success.html,因为在源码里会自动给我们添加.html后缀

然后就会去templates目录下找success.html页面

@Controller
public class ViewTestController {

    @GetMapping("/LALALA")
    public String LALALA(Model model){
        model.addAttribute("msg","你好:LALALA");
        return "success";
    }
}

现在我们只要在标签中获取请求域中名称为msg的值就会自动把hhhhhhh渲染覆盖,但是如果单独拿出来这个前端页面,显示的只是hhhhhh,只有在服务器上运行才可以

<body>
<h1 th:text="${msg}">hhhhhhhh</h1>
</body><body>

现在放文本文件时th:text,我们也可以放入超链接

不同的是之前我们是修改文本的值,现在要修改a标签中href属性的值

springboot可视化图表整合到一个页面上_视图解析器_19

springboot可视化图表整合到一个页面上_html_20

springboot可视化图表整合到一个页面上_html_21

 但是之前不是说超连接要放在@{}里面吗?

我们添加一个试试

springboot可视化图表整合到一个页面上_html_22

我们发现第一个可以,第二个不行了 

springboot可视化图表整合到一个页面上_servlet_23

查看网页发现

springboot可视化图表整合到一个页面上_html_24

 我们第一个真正的解析了link的值,第二个只是把link当成了一个字符串地址去访问

也就是说第二个使用超链接的意思是想访问我们的项目路径

而且它还会根据需求自动拼装,如果我们给项目加了统一的请求路径

springboot可视化图表整合到一个页面上_表单_25

 

springboot可视化图表整合到一个页面上_servlet_26

 它也自动的给我们加了/world

springboot可视化图表整合到一个页面上_视图解析器_27

 使用thymeleaf快速构建后台管理系统

新建一个项目

springboot可视化图表整合到一个页面上_servlet_28

 把前端需要的静态资源放入static文件夹中

springboot可视化图表整合到一个页面上_表单_29

 把登录页面放入templates文件夹中

springboot可视化图表整合到一个页面上_表单_30

 我们项目一旦进来(访问根路径)肯定需要展示的就是登陆页面,要写controller喽

注意包的路径

springboot可视化图表整合到一个页面上_表单_31

@Controller
//登录的controller
public class IndexController {
    
    //来登录页
    //处理请求,路径为/或者/login都可以跳转到login.html
    @GetMapping(value = {"/","/login"})
    public String loginPage(){

        //跳转到login.html
        return "login";
    }
}

springboot可视化图表整合到一个页面上_html_32

现在可以成功的进入登录页面了

 现在我们的地址是这个/login,只要我们在这个/login用表单提交了账号和密码,我们就可以到首页(index.html)

所以我们带着表单提交应该是post请求,而且表单的acction应该是/login

引入名称空间

springboot可视化图表整合到一个页面上_html_33

<form class="form-signin" action="http://view.jqueryfuns.com/2014/4/10/7_df25ceea231ba5f44f0fc060c943cdae/index.html" method="post" th:action="@{/login}">
        <div class="form-signin-heading text-center">
            <h1 class="sign-title">登录</h1>
            <img src="images/login-logo.png" alt=""/>
        </div>

 

springboot可视化图表整合到一个页面上_表单_34

 此时就会以post的方式拼接路径/login来发送请求,因为我们前面的进入登录页面也有/login,但是那个方式是get,现在我们使用post进行区分和提交表单

//从登录页面提交账号密码到主页
    @PostMapping("/login")
    public String main(String username,String password){
        return "index";
    }

此时就可以进入主界面了

springboot可视化图表整合到一个页面上_servlet_35

但是现在有一个问题,我们在主界面的每一次刷新现在相当于都在对表单进行重复提交,有没有解决方法?

有的,我们现在只是经过了一次跳转,我们可以把登录成功之后设置为重定向,自己再定义一个get请求用于接收,这样子就不会造成表单的重复提交 

中间通过main.html这个中转重定向把post请求转换为了get请求

//从登录页面提交账号密码到主页
    @PostMapping("/login")
    public String main(String username,String password){
        //登录成功重定向到main页面
        return "redirect:/main.html";
    }

    //解决表单重复提交,现在是真正的要跳转到main页面
    @GetMapping("/main.html")
    public String mainPage(){
        return "main";
    }

springboot可视化图表整合到一个页面上_表单_36

 现在我们的表单只会提交一次了

现在我们如果一直刷新,刷新的只是这个请求,解决了重复提交

springboot可视化图表整合到一个页面上_表单_37

但是现在又出现一个问题,现在所有的浏览器只要访问我们的地址就可以访问到我们的主界面,但是我们想只有登录之后才可以访问到我们的主界面,有没有办法解决?

我们先模拟好用户对象,里面有账号名称和密码

@Data
public class user {
    private String userName;
    private String password;
}

在外面前端的表单里也填写好对应的名称

<input type="text" name="userName" class="form-control" placeholder="用户名" autofocus>
<input type="password" name="password" class="form-control" placeholder="密码">

后端接收post请求时,直接传入user对象,在方法中进行判断(现在简单的判断方法就是账号和密码(密码要为123546)有内容就可以登录了)

传入session,我们可以把可以登录的用户存储到session里面

springboot可视化图表整合到一个页面上_servlet_38

springboot可视化图表整合到一个页面上_表单_39

我们也可以传入一个model,用于如果账号和密码都没有填写,我们再让它转发到登录页面(使用get请求的login)并且提示(放入model),账号密码错误

 

springboot可视化图表整合到一个页面上_视图解析器_40

 现在只有输入正确的账号密码才能进入主界面了

springboot可视化图表整合到一个页面上_servlet_41

但是怎么防止别人输入路径就能访问主界面呢?

我们之前把可以登录的用户放到session里面了

我们在真正的去main页面的方法里对于session里面有没有用户进行判断就可以了

//解决表单重复提交,现在是真正的要跳转到main页面
    @GetMapping("/main.html")
    public String mainPage(HttpSession session){
         Object loginUser = session.getAttribute("loginUser");
         if (loginUser!=null){
             //如果可登录的用户不为空,说明此时可以登录
             return "main";
         }else {
             //否则还是回到初始的登录页面
             //跳转到login.html
             return "login";
         }


    }

并且传入一个model信息给用户提示当前没有登录

//解决表单重复提交,现在是真正的要跳转到main页面
    @GetMapping("/main.html")
    public String mainPage(HttpSession session,Model model){
         Object loginUser = session.getAttribute("loginUser");
         if (loginUser!=null){
             //如果可登录的用户不为空,说明此时可以登录
             return "main";
         }else {
             //给用户提示
             model.addAttribute("msg","请重新登录");
             
             //否则还是回到初始的登录页面
             //跳转到login.html
             return "login";
         }


    }

实现给用户提示(我们的提示都放到model的msg里面了)

在前端表单上面添加内容

<label style="color: red" th:text="${msg}"></label>

<input type="text" name="userName" class="form-control" placeholder="用户名" autofocus>
<input type="password" name="password" class="form-control" placeholder="密码">

测试:

springboot可视化图表整合到一个页面上_servlet_42

 

springboot可视化图表整合到一个页面上_视图解析器_43

 直接访问路径(需要更换浏览器或者先清理缓存)

springboot可视化图表整合到一个页面上_表单_44

现在登录的问题大部分解决了,但是我们想登录之后在右上角实时显示登录的账号,可以吗?

可以,先找到前端所在的位置

springboot可视化图表整合到一个页面上_html_45

 找到对应的代码

springboot可视化图表整合到一个页面上_servlet_46

 但是我们之前的thymeleaf都是在标签里写的,这玩意没有标签

可以使用thymeleaf的行内写法

springboot可视化图表整合到一个页面上_视图解析器_47

 我们之前把登录成功的人的登录信息都存放到loginuser里面了,所以现在直接拿出来用就可以了

springboot可视化图表整合到一个页面上_html_48

我们已经完成了登录的基本流程,但是我们如果想点击其他的页面,还是会404,想办法把其他页面搞进来(以DataTables为例子)

把我们的静态页面放进来(我们的后台管理系统很大,所以我们可以新建一个文件夹,专门放table的文件)

并且给这几个新加的页面都添上thymeleaf名称空间

springboot可视化图表整合到一个页面上_servlet_49

书写table的controller

@Controller
public class TableController {

    @GetMapping("/basic_table")
    public String basic_table(){
        return "tables/basic_table";
    }

    @GetMapping("/dynamic_table")
    public String dynamic_table(){
        return "tables/dynamic_table";
    }

    @GetMapping("/responsive_table")
    public String responsive_table(){
        return "tables/responsive_table";
    }

    @GetMapping("/editable_table")
    public String editable_table(){
        return "tables/editable_table";
    }


}

注意:为什么现在我们的return跳转需要加/tables呢?

因为我们之前源码里写了,只会找以templates目录下的,以.html结尾的文件,现在我们多了tables目录,所以需要自己加

我们现在的前端文件,超链接标签里的href一定也要改成和我们请求相互对应的(不能加.html)

例如

springboot可视化图表整合到一个页面上_表单_50

 现在都可以进来了

springboot可视化图表整合到一个页面上_html_51

springboot可视化图表整合到一个页面上_html_52

springboot可视化图表整合到一个页面上_servlet_53

springboot可视化图表整合到一个页面上_servlet_54

但是现在有一个问题,我们如果进入了一个table,我们在这里面切换其他的table会404

这是因为我们table里面的html里面的a标签的herf还是给我们加了.html,我们把这四个table里面的.html去掉就可以了

但是我们在去掉的时候发现一个问题,我们现在的四个table,他们的左边和上面部分其实都是一样的,我们可不可以把公共的这一部分提取出来?

首先观察重合的部分

1.引入的js文件

springboot可视化图表整合到一个页面上_表单_55

2.引入的部分css文件

springboot可视化图表整合到一个页面上_servlet_56

 3..左侧导航栏部分

springboot可视化图表整合到一个页面上_servlet_57

 4.头部内容信息

springboot可视化图表整合到一个页面上_表单_58

我们写一个公共的页面进行抽取

抽取公共的js

springboot可视化图表整合到一个页面上_servlet_59

 抽取公共的css

springboot可视化图表整合到一个页面上_表单_60

 抽取公共的左侧导航栏和头部内容

springboot可视化图表整合到一个页面上_html_61

现在我们已经对公共内容进行了抽取,如何应用?

首先加入thymeleaf名称空间

springboot可视化图表整合到一个页面上_视图解析器_62

把我们的链接都使用thymeleaf包装起来

springboot可视化图表整合到一个页面上_视图解析器_63

如何使用正确的语法进行抽取

下面这个例子我们的footer就是我们的公共内容

springboot可视化图表整合到一个页面上_视图解析器_64

把公共的部分使用th:fragement=自己起的名字进行标注 

springboot可视化图表整合到一个页面上_视图解析器_65

使用的时候使用th:insert=~{公共内容页面的名字::自己起的名字}进行引用

springboot可视化图表整合到一个页面上_表单_66

 或者直接th:insert=公共内容页面的名字::自己起的名字也可以

springboot可视化图表整合到一个页面上_视图解析器_67

或者我们可以使用选择器

自己设置一个id

springboot可视化图表整合到一个页面上_html_68

 使用的时候对应好自己的id,但是多一个#

springboot可视化图表整合到一个页面上_servlet_69

现在对于我们的公共内容进行声明

springboot可视化图表整合到一个页面上_视图解析器_70

springboot可视化图表整合到一个页面上_表单_71

 

springboot可视化图表整合到一个页面上_servlet_72

 

springboot可视化图表整合到一个页面上_视图解析器_73

 我们的使用方式也有好几种

springboot可视化图表整合到一个页面上_servlet_74

 

springboot可视化图表整合到一个页面上_表单_75

insert会把我们的内容放在我们的div中 

 

springboot可视化图表整合到一个页面上_html_76

springboot可视化图表整合到一个页面上_html_77

 replace会把我们写的div给替换掉

springboot可视化图表整合到一个页面上_视图解析器_78

 

springboot可视化图表整合到一个页面上_servlet_79

 include会把我们公共内容外面的标签给去掉,直接把内容放在div中

springboot可视化图表整合到一个页面上_servlet_80

springboot可视化图表整合到一个页面上_html_81

 现在就可以真正的进行替换了

对于main

CSS

springboot可视化图表整合到一个页面上_html_82

 JS

注意现在是选择器

springboot可视化图表整合到一个页面上_servlet_83

左菜单

springboot可视化图表整合到一个页面上_表单_84

头部分内容

springboot可视化图表整合到一个页面上_视图解析器_85

 现在的main.html是成功的

springboot可视化图表整合到一个页面上_视图解析器_86

 那么我们对于其他四个页面全部都修改了

经过所有的替换,都是正常的

几个小bug

我们希望点击右上角的DashBoard,就跳转回主页

springboot可视化图表整合到一个页面上_视图解析器_87

找到这个对于的超链接标签修改就可以了

 

springboot可视化图表整合到一个页面上_表单_88

我们现在的页面右上角又是不会动的了

springboot可视化图表整合到一个页面上_html_89

 说明我们的公共页面没有成功引入

 

springboot可视化图表整合到一个页面上_servlet_90

 现在可以了

我们还想点击退出就退到登录页

springboot可视化图表整合到一个页面上_servlet_91

springboot可视化图表整合到一个页面上_html_92

 可以了

springboot可视化图表整合到一个页面上_servlet_93

现在我们完成了一些想要的功能,但是如果我们想遍历的把我们想加的数据加入先进的表如何做?

先制作一些假数据

springboot可视化图表整合到一个页面上_表单_94

springboot可视化图表整合到一个页面上_表单_95

 把现在的假数据放入请求域中

@GetMapping("/dynamic_table")
    public String dynamic_table(Model model){
        //表格内容的遍历
        List<User> users = Arrays.asList(new User("adasdad", "458613"),
                new User("adS", "458613"),
                new User("kuj", "458613"),
                new User("adastrsyhdad", "458613"),
                new User("vbcxcvb", "458613"));
        model.addAttribute("users",users);

        return "tables/dynamic_table";
    }

找到前端的表单,把请求域中的东西进行遍历

修改表头

springboot可视化图表整合到一个页面上_表单_96

 指明在请求域中遍历的对象,并且每次拿出来一个就放在一个user对象中

springboot可视化图表整合到一个页面上_表单_97

 获取用户名和密码

springboot可视化图表整合到一个页面上_html_98

 现在测试

springboot可视化图表整合到一个页面上_servlet_99

 除了我们想要的自动id没显示,其他的正常

我们可以加一个遍历的状态(看成对象),这个状态有自动递增id的方法

springboot可视化图表整合到一个页面上_表单_100

成功了

 

springboot可视化图表整合到一个页面上_servlet_101

视图解析的源码分析(以登录方法开始测试) 

springboot可视化图表整合到一个页面上_表单_102

首先所有的请求都是从dispatchservlet的dodispatch方法开始

springboot可视化图表整合到一个页面上_servlet_103

springboot可视化图表整合到一个页面上_视图解析器_104

 找哪个handler(目标方法)能够处理当前的请求

springboot可视化图表整合到一个页面上_表单_105

springboot可视化图表整合到一个页面上_servlet_106

 找handler的适配器(一个大的反射工具)

springboot可视化图表整合到一个页面上_视图解析器_107

 使用适配器真正的执行方法

springboot可视化图表整合到一个页面上_表单_108

 进入适配器

springboot可视化图表整合到一个页面上_视图解析器_109

springboot可视化图表整合到一个页面上_html_110

执行目标方法

springboot可视化图表整合到一个页面上_servlet_111

springboot可视化图表整合到一个页面上_视图解析器_112

 设置参数解析器和返回值处理器

springboot可视化图表整合到一个页面上_servlet_113

 

springboot可视化图表整合到一个页面上_表单_114

 执行真正的目标方法

springboot可视化图表整合到一个页面上_视图解析器_115

springboot可视化图表整合到一个页面上_视图解析器_116

 成功登录,重定向到/main.html

springboot可视化图表整合到一个页面上_表单_117

 执行完目标方法,跳转接口

springboot可视化图表整合到一个页面上_servlet_118

 得到了我们的返回值,字符串的重定向操作

springboot可视化图表整合到一个页面上_html_119

使用返回值处理器进行处理

springboot可视化图表整合到一个页面上_html_120

 跳转接口,使用返回值处理器,看看哪个处理器能够解析现在的结果

springboot可视化图表整合到一个页面上_视图解析器_121

springboot可视化图表整合到一个页面上_servlet_122

 使用for循环寻找返回值处理器

springboot可视化图表整合到一个页面上_servlet_123

 最终给我们选择的handler是

springboot可视化图表整合到一个页面上_html_124

 为什么可以选择它?

因为它的判断条件是现在返回为空或者返回字符串(符合条件)

springboot可视化图表整合到一个页面上_视图解析器_125

 回到

springboot可视化图表整合到一个页面上_视图解析器_126

使用我们选择的处理器进行处理

springboot可视化图表整合到一个页面上_servlet_127

 进入

springboot可视化图表整合到一个页面上_html_128

 如果返回值是字符串,就把字符串封装到viewName

springboot可视化图表整合到一个页面上_html_129

 把返回值放入mavContanier

springboot可视化图表整合到一个页面上_表单_130

springboot可视化图表整合到一个页面上_表单_131

 目标方法处理的过程中,所有数据都会被放在 ModelAndViewContainer 里面。包括数据和视图地址

判断是不是需要重定向

springboot可视化图表整合到一个页面上_视图解析器_132

 它如何判断?判断我们的视图名是不是以重定向开头,我们是的

springboot可视化图表整合到一个页面上_servlet_133

springboot可视化图表整合到一个页面上_视图解析器_134

 这边的主要目的就是把我们的字符串重定向结果装起来

转换接口,向上返回(到了真正执行完目标方法的地方) 

springboot可视化图表整合到一个页面上_视图解析器_135

springboot可视化图表整合到一个页面上_视图解析器_136

springboot可视化图表整合到一个页面上_servlet_137

 

springboot可视化图表整合到一个页面上_html_138

现在我们的mavContranier

springboot可视化图表整合到一个页面上_视图解析器_139

 为什么里面会有一个user?

因为我们传入的是一个user对象,也会被放到这个里面

方法的参数是一个自定义类型对象(从请求参数中确定的),把他重新放在 ModelAndViewContainer

继续向下执行

因为我们参数传入了一个model,所以会把我们model里面存放的值也放起来(如果登录失败提醒用户),但是现在我们登录成功,这里面没有值

springboot可视化图表整合到一个页面上_servlet_140

 把我们的视图名和mavcon封装起来变成mav

springboot可视化图表整合到一个页面上_servlet_141

 最后返回

springboot可视化图表整合到一个页面上_视图解析器_142

方法执行结束后不用跳转接口,还是继续向下执行(会到真正的执行完方法并且封存好返回值mav之后)

任何目标方法执行完成以后都会返回 ModelAndView(数据和视图地址)。

springboot可视化图表整合到一个页面上_servlet_143

当前方法执行结束后,再次跳转接口(回到真正执行完handle之后并且拿到封装好的视图和数据的mv)

springboot可视化图表整合到一个页面上_视图解析器_144

springboot可视化图表整合到一个页面上_html_145

 

springboot可视化图表整合到一个页面上_视图解析器_146

 看看当前的mv是不是空,如果是空就跳转回原来的页面

springboot可视化图表整合到一个页面上_视图解析器_147

 处理派发结果

springboot可视化图表整合到一个页面上_html_148

 开始处理派发结果(不用跳转接口)

processDispatchResult 处理派发结果(页面改如何响应)

先判断处理期间有没有失败

springboot可视化图表整合到一个页面上_视图解析器_149

 看看mv是不是空或者有没有被处理过(我们现在没有)

springboot可视化图表整合到一个页面上_表单_150

 使用rep和resp和mv进行渲染

render(mv, request, response); 进行页面渲染逻辑

springboot可视化图表整合到一个页面上_servlet_151

不用跳转接口,还是在这个接口中

springboot可视化图表整合到一个页面上_视图解析器_152

 从mv中拿到视图名

springboot可视化图表整合到一个页面上_html_153

 

springboot可视化图表整合到一个页面上_html_154

 使用视图解析器进行解析最后得到View对象

springboot可视化图表整合到一个页面上_表单_155

什么是view对象?

是一个接口

springboot可视化图表整合到一个页面上_html_156

 规定了一个render方法,定义了页面的渲染逻辑

springboot可视化图表整合到一个页面上_html_157

 根据方法的String返回值得到 View 对象【定义了页面的渲染逻辑】

不用跳转接口,现在想得到view对象

先判断视图解析器是不是空

springboot可视化图表整合到一个页面上_视图解析器_158

 视图解析器的内容是

springboot可视化图表整合到一个页面上_视图解析器_159

 for循环所有的视图解析器尝试是否能根据当前返回值得到View对象

springboot可视化图表整合到一个页面上_servlet_160

 跳转接口,进入第一次循环,看看ContentNegotiating视图解析器可不可以

springboot可视化图表整合到一个页面上_servlet_161

得到请求所有能接收的数据类型 

springboot可视化图表整合到一个页面上_servlet_162

springboot可视化图表整合到一个页面上_servlet_163

 

 获取候选的视图

springboot可视化图表整合到一个页面上_表单_164

如何获取候选的视图?不用跳转接口

springboot可视化图表整合到一个页面上_servlet_165

自己除外)

springboot可视化图表整合到一个页面上_表单_166

 

springboot可视化图表整合到一个页面上_表单_167

 直到找到了thymeleaf视图解析器

springboot可视化图表整合到一个页面上_servlet_168

 thymeleaf视图解析器如何判断?跳转接口

springboot可视化图表整合到一个页面上_html_169

  thymeleaf视图解析器看看自己能不能创建一个View类型的对象

springboot可视化图表整合到一个页面上_servlet_170

跳转接口进行创建尝试

springboot可视化图表整合到一个页面上_表单_171

是的)

springboot可视化图表整合到一个页面上_servlet_172

 对视图名称截取字符串,只保留/main.html 

springboot可视化图表整合到一个页面上_表单_173

截取之后进行new创建,真正的创建了View对象

springboot可视化图表整合到一个页面上_servlet_174

ContentNegotiationViewResolver 里面包含了下面所有的视图解析器,内部还是利用下面所有视图解析器得到视图对象。

最后向上返回

向上返回,返回到已经获取到了候选的视图

springboot可视化图表整合到一个页面上_html_175

springboot可视化图表整合到一个页面上_视图解析器_176

 现在的candidateView里面就是我们筛选出来候选的视图

springboot可视化图表整合到一个页面上_视图解析器_177

 最终决定返回哪个页面,封装成View对象

springboot可视化图表整合到一个页面上_表单_178

 

springboot可视化图表整合到一个页面上_表单_179

 得到了 redirect:/main.html --> Thymeleaf new RedirectView()

最后向上返回我们需要的view对象

springboot可视化图表整合到一个页面上_视图解析器_180

springboot可视化图表整合到一个页面上_表单_181

 视图对象调用自己的渲染方法

springboot可视化图表整合到一个页面上_视图解析器_182

那么View是怎么渲染的呢?跳转接口

springboot可视化图表整合到一个页面上_servlet_183

springboot可视化图表整合到一个页面上_视图解析器_184

springboot可视化图表整合到一个页面上_视图解析器_185

跳转接口

springboot可视化图表整合到一个页面上_表单_186

 获取到了想去页面的url地址

springboot可视化图表整合到一个页面上_表单_187

 最后使用url调用最原生的重定向方法

springboot可视化图表整合到一个页面上_html_188

 最终完成了整个的重定向

 视图解析的源码分析(以向先进表中放数据方法开始测试)

springboot可视化图表整合到一个页面上_表单_189

 之前的流程一样,直到使用for循环到ContenNegotiating视图解析器看看能不能进行视图解析

springboot可视化图表整合到一个页面上_html_190

 使用for循环看看哪个视图解析器能创建view对象

springboot可视化图表整合到一个页面上_视图解析器_191

 来到thymeleaf的视图解析器

springboot可视化图表整合到一个页面上_html_192

 看看是不是以重定向为开头(我们不是)

springboot可视化图表整合到一个页面上_视图解析器_193

 看看是不是以转发为开头(我们不是)

springboot可视化图表整合到一个页面上_html_194

 如果都不是就对页面进行加载

springboot可视化图表整合到一个页面上_servlet_195

 不用跳转接口

先拿到IOC容器工厂

springboot可视化图表整合到一个页面上_表单_196

 在容器中找视图的名称,看看存不存在(现在不存在)

springboot可视化图表整合到一个页面上_servlet_197

 如果不存在会准备一个视图对象

springboot可视化图表整合到一个页面上_servlet_198

 创建view对象

springboot可视化图表整合到一个页面上_表单_199

 从容器中得到一个thymeleafView

springboot可视化图表整合到一个页面上_servlet_200

 设置好模板的名称

springboot可视化图表整合到一个页面上_表单_201

 还要设置一堆东西,最后向上返回

springboot可视化图表整合到一个页面上_视图解析器_202

springboot可视化图表整合到一个页面上_视图解析器_203

 再次向上返回,使用thymeleafView进行渲染

springboot可视化图表整合到一个页面上_视图解析器_204

 

springboot可视化图表整合到一个页面上_表单_205

 

springboot可视化图表整合到一个页面上_servlet_206

使用thymeleafView进行渲染

springboot可视化图表整合到一个页面上_视图解析器_207

 

springboot可视化图表整合到一个页面上_视图解析器_208

 thymeleaf自己拿到模板引擎

springboot可视化图表整合到一个页面上_html_209

 先拿到我们想给页面渲染的数据

springboot可视化图表整合到一个页面上_视图解析器_210

 

springboot可视化图表整合到一个页面上_servlet_211

 拿到我们想要响应的类型和编码

springboot可视化图表整合到一个页面上_html_212

 利用模板引擎调用方法

springboot可视化图表整合到一个页面上_servlet_213

 使用模板引擎,转换接口

springboot可视化图表整合到一个页面上_视图解析器_214

springboot可视化图表整合到一个页面上_表单_215

 使用模板引擎直接把内容进行写出

springboot可视化图表整合到一个页面上_视图解析器_216

springboot可视化图表整合到一个页面上_servlet_217

 

springboot可视化图表整合到一个页面上_视图解析器_218

 把页面内容进行刷出

springboot可视化图表整合到一个页面上_视图解析器_219

 视图解析原理总结

springboot可视化图表整合到一个页面上_servlet_220

 

springboot可视化图表整合到一个页面上_servlet_221