00:00
好,下面呢,咱们来看一下咱们SPVC中的拦截器啊,首先呢,大家来看,那什么是拦截器,这个拦截器是用来干什么的呢?那拦截器是对我们当前的请求是不是来进行拦截的,对不对?那咱们听到拦截这个词啊,然后咱们就想到了我们原来所学习过的什么,哎,咱们就想到了我们原来所学习过的过滤器嘛,是不是啊,那拦截器跟过滤器,然后它们两个之间呢?然后有什么区别呢?大家注意,那过滤器也能够拦截请求,而我们当前咱们的拦截器啊,也能够拦截请求,有什么区别,就比如说大家看好了,这个是我们当前咱们的什么,这个是我们当前咱们的过滤器,Fi t能看懂吧?哎,这是过滤器,然后我给大家画画他们的顺序啊,首先呢,这是我们当前咱们的请求,这样能看懂吧,好,请求过来之后啊,然后大家看我们当前咱们的请求是不是应。
01:00
该被我们的谁来进行处理啊?是不是被咱们的前端控制器,是不是应该是咱们的dispatal solve来进行处理,对不对?所以说我在这儿来写个DS,就是dispatal of light的意思能听懂吧?好,然后再往下的话,那我们当前咱们的请求过来之后,现在呢,咱们是不是都要被我们的前端控制器进行处理,那咱们的过滤器是用在哪的呢?大家说是用在哪儿的啊?过滤器咱们原来是不是讲过过滤器咱们所配置的这个杠星是什么意思啊,大家说。啊,杠星代表的是不是应该是来过滤我们从浏览器所发送过来的所有的请求,大家说对不对,对吧?那所以说呢,我们的过滤器它就是作用在我们的浏览器到我们的dispat of之间的,能听懂不能听懂吧?好,它作用在这个位置啊好,那大家都知道,在我们的SPAVC中,我的dispart ofle来接收到请求之后,它是不是会对咱们的请求进行处理,根据我们当前的一个请求信息去跟我们的request mapping,也就是请求映射进行匹配,对不对,对吧?然后呢,P找到了相对应的请求映射,那请求映射所对应的控制器方法就是我们处理请求的方法,大家说是不是啊,对吧?那所以说咱们的dispar of会去调用谁呀?大家想想啊,这个东西会去调用谁?是不是会去调用我们的control?
02:36
L l be能看懂吗?会去调用我们的controller,好,然后咱们的拦截器就是作用在哪呢?就是作用于我们的控制器执行的前后的,能听懂吧,作用于我们控制器执行的前后,就比如说在我们的拦截器中,一共有三个抽象方法,一个叫pre handle,一个叫post handle,还有一个叫什么,还有一个叫做after comp,好然后这三个方法里面呢,然后大家注意有个叫handle的,这个就是什么什么之前的意思能听懂吧,那pre handle就是啥意思,大家想想,Handle就是处理的意思,咱们的controller也叫什么,也叫handleler,也就是控制器方法也叫什么方法,处理器方法能听懂吧,所以说pre handle什么意思啊,在我们当前处理器方法之前执行能听懂不好,然后呢,还有一个叫。
03:36
Post handle,而post handle是在哪执行的啊?Post handle在哪执行?Post handle在我们当前处理器方法执行之后执行,也就是说这个地方应该是咱们的post,而我们当前在我们的控制器方法执行之前应该是pre handle能看懂吧?好,OK,然后再往下我们的最后一个叫after completion,然后这个方法什么时候执行呢?大家注意,你看我们当前咱们的post执行的时候,Post handle执行的时候,是不是就说明我们当前的控制器方法已经被调用了,对不对,是不是啊,那它被调用了之后,大家看过源码,那源码里面是不是说过我们的控制器方法被调用之后,返回值是统一的,是一个model and view对象,是不是,是不是啊,是吧?好,所以说那最后一个方法什么时候执行model and view中有model有view干什么?
04:36
么的,大家说model是模型数据,View是视图,那它的作用是不是应该就是将模型数据,然后填充到我们的视图中,为用户展示数据,也就是渲染视图,对不对,对吧?所以说after completion是在我们的什么时候执行呢?渲染视图之后来执行的,所以说大家一定要注意,然后他们之间的一个,他们就是我们当前拦截器中的这三个方法的一个执行时机,知道吧,来,咱们把这个图看完了之后,啊,来,我给大家来写一个拦截器,咱们从源码里面去看看它到底是在哪执行的,能听懂吧?哎,好啊,行来。
05:22
开始了啊,大家看怎么来创建拦截器,或者说咱们直接看源码吧,行不行,行吧,来在这儿我来找一下啊,咱们两次shift,咱们来搜一下咱们的dispat of that能看懂吗?咱们来找到哪一行呢?直接来找到咱们的1061行来吧,就是咱们当前调用处理器方法,调用控制器方法,然后来返回了一个model and view的这一行,来大家看一下啊,在哪呢?1061是不是在这儿呢?大家看能看懂吧,好OK,这不是我们的控制器方法的执行吗?控制器方法的调用对不对?那咱们刚才还说过,拦截器的三个方法是在是围绕着谁去执行的,是对谁进行拦截的,是对咱们的控制器方法进行拦截的,大家说对不对,对吧?所以说大家看大家看这个地方,然后这个地方有一个叫N。
06:23
包括lap re handle,这一句话就是来调用我们当前咱们所有的拦截器,因为拦截器不止有一个,就像咱们的过滤器是不是也可以有多个呀,是不是啊,所以说咱们的拦截器也可以有多个,好,这一句话就是来调用我们当前所有的拦截器的什么?所有的拦截器的pre handle方法能看懂吧?看这个是我们调用控制器方法,那在这之前是不是执行的是pre handle能看懂吗?然后再往下大家看这个地方,这儿看到了没有一个叫posts的handle,这不是我们的控制器方法执行吗?那控制器方法执行之后是不是来执行的是post handle动能看懂吧,能看懂吧,好,OK,那after completion在哪呢?大家看好,大家记不记得这一句话,记不记得这一句话,咱们说了,在这个方法里面有个render方法,就是来渲染视图的,有印象没有,有印象吧。
07:23
这个是来做一些后续的处理,然后去处理咱们的模型数据和渲染视图,所以说我们把这个方法点开之后,大家看记不记得这个方法render有印象没有渲染视图的,来对我们的model and view进行处理的是不是啊,看好了啊,往下看,在这儿这个方法执行完,我问大家是不是就已经渲染完视图了,大家说对不对,对吧?然后再往下走走走走到这儿看,叫做trigger after completion,能看懂吗?这就是我们当前拦截器的三个方法,大家再说一下这三个方法都在什么时候执行?拦截器是用来拦截谁的,拦截控制器方法的,能听懂吧?然后拦截器中的三个抽象方法分别什么时候执行?一个在控制器方法执行之前,一个在控制器方法执行之后,一个在渲染视图完毕之后能听懂吧。好,是这。
08:23
三个位置啊,好,大家要注意。
我来说两句