00:00
好,那下面呢,我们再来看一下咱们的第三种视图,叫做重定向视图,好,咱们先把咱们的这个超链接写出来,然后在这咱们叫re,叫做ready RA。好,然后我们创建的这个重定向视图,大家注意,它就叫做red direct view OK,啊,行,那我们把这个请求,然后咱们来处理一下,来找到我们当前的view controller test view controller,然后it request mapping。对吧,咱们要来处理的请求是它,然后下面呢,咱们的返回值是一个string,好,然后再往下的话,咱们的方法名就叫做test ready RA view OK啊行,然后下面咱们直接来返回字符串,返回哪一个字符串呢?看好了啊,然后在这咱们要想创建一个重定向视图。那我们当前的视图名称必须以ready RA的开头。比如说我们往哪儿重定向。一样的往test。
01:01
Model来进行重定向,大家注意这个时候它的效果可是不一样的啊,然后这个时候它俩的效果啊,然后它的地址栏不变,而它的地址栏会变成是test model这个地址。这不就是咱们重叠项跟转发的区别嘛,对不对,好,然后下面呢,我们现在来重新部署,然后咱们来看一下我们当前的这个效果啊,然后咱们看一下从底层中,从源码中,咱们看一下我们当前创建出来的视图,是不是咱们所说的这个ready direct view啊好,然后首先咱们先来访问咱们的首页,然后来刷新一下。好,然后F9跳过,好,然后现在呢,我们再来点击咱们的这个超链接,点击大家看,进入到1061行,调用我们当前的控制器方法,然后呢,再进入到控制器方法之后,然后我们来执行咱们的转发结果,好然后再来跳到我们当前的render这个方法,对吧?然后是渲染视图的方法,好然后它就会在我们当前的方法中对咱们的model and view对象来进行处理,那我们进入到这个方法中,然后大家看看在这创建的视图啊,这是咱们的视图名称,然后ready的冒号。
02:12
开头的对不对,然后下面咱们再来创建视图,大家看一下,看它创建的是什么,是不是ready RA view啊,能看懂吧,好OK,行,然后那我们现在咱们再来跳过来,这个时候大家看到为什么又进入到我们的这个方法了,为什么?因为我们是重定向到了我们的斜线model,斜斜线test,斜线model这个请求,所以说咱们的浏览器是不是会再次发送请求来访问我们当前这个请求,对不对,对吧?好,然后咱们再跳过,再跳过,那这个时候大家说咱们创建的视图是不是应该就变成谁了,叫做c view,因为我们是重定向到了我们当前的这个请求,而这个请求被处理之后,咱们所设置的视图名称是不是没有任何的前缀,那所以说他所创建出来的视图就是咱们的C莫内有啊好,咱们继续往下,大家来看一下来是不是c view OK吧,好啊。
03:09
行,然后咱们来跳过,好,那所以说这就是我们的第三种视图,叫做重定向视图,来咱们看咱们的页面,大家注意看地址栏变了没有啊变了,那所以这就是一个重定向的效果。对吧,那我们平常呢,咱们在处理完请求之后,咱们是不是都有两种方式来实现页面跳转,你要么用转发视图,要么咱们用重定向视图,你要么转发实现页面跳转,要么重定向实现页面跳转,我们一般情况下咱们都是啊,当我的业务逻辑处理失败的时候用转发,当我的业务逻辑处理成功的时候,咱们用重定向,比如说登录成功,重定向登录失败,咱们用转发,OK吧,行,那下面呢,我们再来看咱们的笔记,大家注意,你看我们上面咱们的这个三种视图呀,大家一定要注意咱们什么时候来创建的,是什么视图,比如说我们的cli view,就是在我们的视图名称中没有任何前缀的时候,咱们创建的就是cli view,而我们当前要想创建这个转发视图的话,虽然说现在咱们不怎么用了,对吧,然后但是大家也要知道有这种写法,咱们是以forward冒号开头,就可以来转发到我们当前的某一个请求,对吧,或者说转发。
04:23
到某个页面为什么咱们不用,其实就是说你如果说用的是c Le来作为视图渲染技术,对吧,你用c live view,那咱们的页面是会被c live进行渲染的,而如果你直接转发,它是不会被cli渲染的啊好。那有同老师,那我可不可以这样,我通过我的forward冒号,我通过,然后我来创建一个internal resource view,让它转发到我们当前的某一个请求,在这个请求中,咱们再创建一个STEM view,实现一个转发。对吧,然后被SIM进行页面渲染,然后实现转发,对吧?就跟我们刚才咱们写的这个例子是一样的,对吧?大家说你写这个例子有意义吗?我只是让大家看一下咱们创建的视图,对吧,叫做internal resource view,其实咱们写这个有意义没有啊,没有任何意义。
05:13
我们还不如直接来访问test model,大家说是不是?好,所以说呢,大家来看,那我们现在呢,然后咱们的这两种转发视图跟大家说了,我们其实最好啊,咱们就是来使用c Bill。没有必要,直接没有必要通过咱们的转发视图,你再间接的去创建一个STEM view来实现页面跳转吗?没有必要,知道吧?好啊,那原来有同学会问过这个问题,说呢,既然他所创建的视图咱们是没有办法来进行页面渲染的,那我就转发到一个能进行页面渲染的一个请求呗,行不行,你没有必要直接访问就可以啊。好,下面呢,我们再来看咱们的重定向视图,对吧?重定向视图要求我们当前必须以什么为前缀,叫做ready RA的冒号为前缀,好,然后这个时候它就可以通过重定向,然后来让浏览器再次发送请求来访问我们当前的这个请求了啊好,这个大家一定要看好啊。
06:13
好,还有一个问题啊,就是大家来看,就是我们使用重天项的时候,那其实这一行代码就相当于什么,在底层中怎么执行呢?大家说是不是会把咱们当前的视图名称中,视图名称中的ready direct的冒号去掉,然后再通过response send ready direct来实现页面跳转,对不对?好,但是大家有没有发现一个问题呢?就是说我们之前咱们在solve里面,你学重定向的时候,你能在这里面写一个绝对路径吗?你能直接写个绝对路径吗?叫response send ready括号,然后斜线test,斜线model行不行?不行,为什么?因为这是一个绝对路径,那绝对路径就会被谁来解析,浏览器重定向所跳转到的绝对路径就会被浏览器解析,而浏览器解析的绝对路径是不是应该把这个斜线解析成了local host的冒号,8080有上下文路径吗?没有,但是你看我们在这个地方,咱们ready RA的冒号后边写一个绝对路径,是不是能够跳转过去?
07:16
那说明什么?那说明在咱们当前。咱们的这个重定向视图啊,然后他再进行跳转的时候。它是会自动为我们所设置的绝对路径前边,然后来加上一个什么呢?来加上一个上下文路径的。这个其实我们从源码里面就能够看出来,但是呢,这个大家注意大家知道就可以啊,然后在我们当前的重定向实现页面跳转的时候,大家注意它是会自动来为我们当前所设置的绝对路径前面加上一个上下文路径的,所以说在我们spring VC中,大家创建重定向视图,你不需要去考虑说我还需要再手动加上一个上下文路径吗?大家注意不需要啊,OK吧,行好,那这是我们当前spring m VC里面的三种视图,大家注意我们其实以后用的比较多的就两种,一种是stemli view,当然呢,这也看我们当前的视图技术,如果说你用的视图技术是cli,那我们用的最多的就是simli view和ready view,如果我们现在用的是GSP,那咱们用的最多的就是internal resource view,然后还有我们当前的ready view。
08:25
OK吧,行,这个大家注意啊。
我来说两句