00:00
好,那我们刚才呢,咱们就已经通过咱们的源码呢,然后来验证了一个问题,就是说我们之前呢,咱们说的这个控制器方法呢,然后被调用之后,然后不管咱们用的是什么方式往域对象中共享数据,也不管我们用什么方式,咱们来设置逻辑视图,它最终都会被封装到一个model and view对象中。好,那下面呢,那我们就来看一下咱们的这个SPAVC里面的各种视图,咱们先咱们因为咱们说了这里面咱们一共有三种视图啊,叫做similar view,然后还有一个是internal resource view,然后还有一个呢,是咱们的red direct view,然后我们在这咱们再来创建一个控制层来,咱们把这里面的断点呢,然后都给它去掉,好或者说呢,大家也可以怎么这个来管理这个断点啊,然后在这个。在这个位置,然后咱们就可以把咱们所有的这个断点列表呢,然后给展示出来,对吧,如果说大家要大家要想把哪个取消掉的话,咱们选中某一个,然后在这呢,点击这个减号就可以啊好OK,那我们在这呢,咱们再来创建一个控制层。
01:08
好,然后new一个class,然后它叫做test view view controller。好,然后我们在这呢,给它加上一个a control注解,好,然后比如说呀,咱们就写一个简单的操作就行,比如说我们在这呢,咱们先找到我们的首页,找到咱们的index.html,然后我们在这个位置啊,然后咱们再加上一个HR。好,然后下面呢,我们就可以来写个超链接啊,比如说我们当前咱们先测试第一个咱们的cli view大家来看啊,好,嗯,然后咱们的这个路径呢,咱们就给它写成是test,然后斜线v w view,然后YEFC啊好,然后这个是来测试对吧,然后咱们spring spring mvc的视图对吧?什么视图叫做me me SIM live view OK。
02:09
行,然后下面呢,咱们就把这个。请求,然后来处理一下啊。然后request mapping。行,然后咱们下面把这个方法,然后写一下返回值是一个string,对吧,或者说大家用这个什么,用model and view也可以知道不,这个大家注意啊,就是说我们当前咱们的这个创建的视图,它的区别就是我们创建视图不同,然后它取决于谁,它取决于我们当前咱们所设置的这个方法的返回值,其实也就是我们当前的这个视图名称。如果说你用的是string的话,那它就取决于方法的返回值,如果说我们现在用的是model and view,那就取决于我们通过mav,就是model and view里面的set view name方法所设置的这个字符串,这个大家注意,来,咱们把这个打开大家看一下啊,它取决于谁啊,然后它其实它就取决于我们当前咱们所这个设置的视图名称,你看咱们之前用model and view的时候,这是不是设置的一个视图名称啊,对吧?好,那如果咱们要没有用model and view的话,它就取决于我们当前所设置的这个字符字符串类型的返回池,OK吧,好,那下面呢,我们继续,然后咱们这个是叫做test thy mef myli view OK,好,这个东西很好写,咱们直接return就可以啊,比如说大家注意,如果我们当前咱们所设置的这个方法的返回值啊,咱们可以把它叫做视图名称,OK吧。然后这个东西如果没有任。
03:48
合的前缀,比如说咱们写SUCS,大家注意这个时候我们所创建出来的啊,咱们当前的这个视图名称就会被我们的SPAVC的配置文件中,然后我们所配置的这个STEM live view reserve来进行解析,那最终呢,它就会被解析成什么,它就会被解析成我们当前咱们的cli view啊cli的视图,这个大家注意啊,好,那我们可以在这呢来打上一个断点,然后我们现在咱们是不是就可以来测试这个功能,来大家看啊好,咱们在这呢来一个重新部署。
04:27
好,然后咱们就顺着源码呢,然后来这个进行一个查看,然后看咱们最终到底创建的视图是什么啊,好,然后我们现在咱们再来刷新啊,因为我们当前呢,我们的dispatch solve,然后我们在进行注册的时候,然后它的一个URL pattern,我们写的是斜线,所以说它会被它会对我们当前所有的请求来进行处理,对吧?好然后所以说呢,咱们在这需要先跳过F9 F9F9跳过啊。好,那我们的首页就显示出来了,大家看我们现在来点击,首先呢,是进入到了我们当前咱们的dispatch of的1061行,然后咱们在这个位置的话,咱们说过这一行代码就是来调用我们当前咱们的一个控制器方法的,对吧?好,它的返回值统一呢,就是一个model and view,好,然后下面呢,我们继续,然后咱们现在走到咱们的控制器方法,然后咱们再跳过的时候,咱们在这打了一个断点,大家还记得吧,这个叫做执行处理我们当前咱们转发的一个结果,然后呢,这个方法中有一个MV,这个MV其实就是我们去调用了我们当前的控制器方法所获得的一个model and view对象。
05:39
OK吧,好,然后下面呢,我们再往下看来,大家注意,你看它是怎么封装的,咱们其实这个在上一个视频里面咱们就已经看过了,对吧?咱们的view就是我们当前设置的这个视图名称,也就是咱们的逻辑视图对吧?然后咱们的模型数据就是往我们往请求域中共享的数据啊好,那我们走到这儿之后,那这个方法咱们是不是要进去看一下对不对?那怎么进入到某个方法中呢?大家可以来点这个,然后这个就是进入到某个方法中,大家注意就在下面的,你看咱们上面是不是在1061行对不对,1078行对不对,我们现在进入的位置同样是在这个类里面,对吧?在111123行啊好,那我们再接着往下看来,咱们继续往下走,大家注意,这个是肯定不会执行的,因为这个是呃,Exception,然后不等于空,不等于空说明有异常没有,这不是一个异常对象吗?对吧,所以说这表示的是有异常才会执行if中的内容,对吧?那。
06:40
那我们继续往下走,大家看啊,它不执行,然后再往下,如果咱们所获得的model and view,当它不等于空,然后并且对吧,MV was clear的,咱们不管这个,这个方法大家注意,这个if是会执行的啊,然后下面咱们走到这儿,这个render大家注意,就是渲染的意思,叫做渲染,咱们在这也打一个断点,大家注意,特别是我们当前咱们一个这个,呃,底层代码呢,或者说咱们要看到源码,然后比较复杂的时候,建议大家多打几个断点,对吧,咱们需要去看的地方,大家多打上一个断点啊好,大家来看一下,你看这个是render对吧?Render是什么?Render是渲染的意思,然后这个时候他就可以来处理我们当前的model and view,对吧?然后把我们的model中的数据,然后共享在咱们的请求域中,把咱们所设置的这个逻辑视图对吧,然后呢,创建相对应的视图对象,然后去找到我们相对应的视图,也就是咱们的页面来进行页面渲染,跳转页面。
07:40
好,所以说我们现在要进入到这个方法中啊,好,我们进去之后大家来看啊,然后你看这个位置对吧,然后这个呢,大家看,你看在这是不是就创建了一个view对象,然后呢,我们下面在这是不是就为当前的view对象来进行了赋值,所以说我们只需要把这个代码咱们看到这个位置就行,咱们看到这个位置我们就可以知道当前创建的view对象,也就是视图对象是什么了,OK吧,行,然后咱们继续往下走,走走,然后走到这儿,咱们声明了一个view对象,然后这个地方是来获取我们当前咱们的一个视图名称,谁是视图名称呢?大家注意,这个success就是视图名称。
08:20
知道吧,你看。咱们现在呢,鼠标放上去看,这个view是等于success的,所以说在这它获取的view name其实就是谁呀?就是我们当前的success能看懂吧?好,然后下面我们再继续往下走,View name不等于空,那咱们的view name是等于success,确实不等于空,然后下面它是怎么来获得了我们的view对象,大家看一下,它是reserve view name,然后叫做解析我们当前的视图名称,然后来得到一个视图,所以说大家注意,我们当前所创建的视图,它只跟我们的视图名称有关系,换句话来说,它只跟我们当前咱们这个方法的返回值,字符串类型的返回值有关系。
09:03
OK吧,好,然后那我们现在咱们再往下一个执行,大家注意看这咱们的view是不是就已经创建出来了,叫什么view,叫做cli view。能看懂吧,叫做similar Le view,这个大家一定要看好啊好,那所以说你看我们现在咱们所设置的这个视图名称在这儿呢,咱们就没有任何的前缀,它就是一个普通的字符串,那有同老师咱们可以使用什么前缀呢?就比如说我们马上要讲的另外两种这个视图,然后一种咱们需要加上一个forward的冒号来作为前缀,还有一个呢,咱们要加上这个ready RA的冒号来作为前缀,当我们当前的视图名称里面。没有任何的前缀的时候,他创建的就是cli view。而如果我们是以forward的冒号来作为前缀的,那这个时候创建的就是internal resource view,如果我们是以ready RA的冒号作为前缀的,那咱们创建的就是一个重定向视图,叫ready view。
10:03
OK吧,所以说大家从源码里面,大家一定要发现一个问题,就是说我们当前咱们创建的视图,它只跟谁有关系,他只跟我们当前的视图名称有关系,就是我们当前这个方法的返回值这个字符串有关系。能听懂吧,啊行,这个大家看好啊,如果说没有任何的前缀,创建出来的就是cli view,如果说是以red direct冒号开头的,那它创建的就是重定向视图,如果说是以forward冒号开头的,那他创建的就是转发视图。OK吧,行,好,那下面呢,咱们就可以直接跳过对吧?就可以了啊好,那我们在这就可以看到我们创建出来的视图确实是咱们的c Le view OK啊,行,那这是我们当前咱们的第一种视图,大家注意咱们创建的是一个STEM Le view,那什么时候创建的是STEM Le view,大家注意啊,然后当咱们的控制器方法中所设置的视图名称没有任何前缀时,那此时咱们的视图名称就会被我们在配置文件中所配置的视图解析器,大家还记不记得这个视图解析器是什么?叫做simli view over对不对,会被它进行解析,那它解析视图之后解析出来的是什么?就叫做cli will OK吧,行啊,好,下面呢,我们再来看一下咱们的转发视图和咱们的重定向视图啊。
我来说两句