00:00
好,那我们学习了这个SPAVC中的文件上传和下载之后呢,咱们基本上比较重要的内容呢,就讲完了。然后剩下的呢,还有这个拦截器,异常处理器,然后还有这个注解配置VC。啊,像这些内容的话,咱们以后这个有可能用,也有可能不用啊,所以说呢,这个算是咱们扩展的一些内容啊,然后大家呢,这个了解一下就行。好,那下面呢,我们先来看咱们的第一个问题,叫做拦截器,那咱们从名字里面就能够看出来啊,拦截器它主要来起的就是一个拦截的作用。那我们之前咱们在学习服务器的三大组件solve that filter还有listener的时候,这个filter是过滤器,那过滤器它的作用是不是应该也是一个过滤拦截的功能,对吧?那咱们的拦截器跟这个过滤器它们两个有什么区别呢?好,大家注意啊,这个过滤器呢,然后它是在我们的浏览器和咱们的目标资源之间进行过滤。对吧,比如说我们现在呢,然后咱们有这个什么呀,我们现在,然后咱们在SPAVC的环境下,如果说我没有过滤器的话,过滤器是在什么时候执行,大家看啊,比如说这是咱们的浏览器,然后发送请求到服务器,大家都知道它是要被咱们的dispatch of来进行处理的,对吧?好,然后咱们的过滤器呢,因为它过滤的是咱们的这个浏览器,然后对目标资源的一个访问。
01:26
好,然后呢,所以说我们当前咱们的solve。它也是我们当前服务器中的一个资源。那所以呢,我们当前如果有过滤器的话,大家注意这个过滤器呢,它是在这来执行的,OK吧,由过滤器过滤完之后,然后当前的请求才会被dispatch solve进行处理,而dispatch solve里面它是不是要根据我们当前咱们的请求信息,使用request mapping注解来匹配咱们的控制器方法,然后在dispatch of里面来调用咱们的控制器方法。而我们当前咱们的拦截器呢,它其中呢,有三个方法,然后这三个方法分别是执行在咱们的控制器方法执行前后的,也就是说大家看一下啊,Dispatch of要调用咱们的控制器方法,对吧?比如说这是控制器方法,而我们当前咱们的拦截器中的三个方法呢,然后就是分布在控制器方法执行前后,比如说拦截器中呢,然后有一个叫做啊,叫做pre handle pre handle就是在控制器方法执行之前执行的,还有一个叫做post handle是在控制器方法执行之后执行的,还有一个叫做after compleletion,然后这个方法的话,大家注意是在我们渲染完视图之后来执行的啊,这个一会儿呢,我们会从源码里面带着大家去看一遍啊。
02:48
好。那下面呢,咱们就来看一下这个拦截器啊,它该如何去创建,然后该如何去配置啊,然后该如何来使用啊,那我们在这咱们再来重新创建一个新的工程,然后弄一个module。
03:04
啊,然后next,然后叫做spring,然后下划线啊MVC_e X t extension啊就是扩展的意思。好,然后下面咱们再来设置group ID是com.at硅谷,好,然后finish,咱们把咱们的这个需要配置的这些内容呢,都给它配置进来啊,比如说随便咱们来找一个工程,比如说这个hello word对吧,CTRLC,然后呢,这是CRV。然后IM input changes,然后下面咱们为当前的maven工程来添加这个map,添加这个web模块,然后来找到这个extension。然后找到web,咱们直接来添加web的XL就行啊,然后这是src斜线慢,然后斜线web APP斜线OK啊。好,然后点击点击OK。
04:02
好,那下面呢,我们做完这件这个步骤之后,大家现在应该对spring VC的搭建过程应该是非常非常的了解的,对不对,然后我们下面是不是需要来配置我们当前咱们的web点叉苗。然后其中呢,我们需要来设置两个过滤器,然后还有一个是它的前端控制器。当然这个东西呢,大家直接去复制就行,如果说你写熟练了之后啊,咱们直接去复制就可以啊。好,然后那我们现在咱们就找一个工程呢,把它给复制过来。然后大家直接在这儿呢,直接给它替换一下就行,然后来找到咱们的web银付。好,直接替换,然后替换完之后,那我们是不是需要来创建spring VC的配置文件,叫做spring VC的叉ML,这个东西大家也可以去直接复制。好,那我们现在呢,咱们这里面呢,有扫描组件对吧,然后我们现在咱们讲的内容呢,也比较多了,这里面我们主要进行的配置有扫描组件。
05:03
然后还有呢,配置咱们C的视图解析器,然后还有呢,就是设置默认的so处理静态资源,开启MVC的注解驱动。还有一个就是来配置咱们的视图控制器,然后大家注意这个东西的话叫文件上传解析器,大家把它给配置上也没关系,就算哪怕我们当前的工程里面,你没有文件上传功能,我们也是可以把它配置出来的,OK吧,这个无所谓啊,好,那咱们这些都配置完之后,那我们是不是就可以来创建我们当前的页面了,对不对,然后在这呢,它叫做ten plates,来咱们把这个目录呢给创建出来。好,然后咱们在这呢来创建一个首页,然后就叫做index.html首页。好,然后H1,然后index.hhtml就可以啊。好,然后大家再往下看,然后下面呢,我们是不是还有咱们已经配置过视图控制器了,所以说我们对首页的访问,咱们是不是就已经通过视图控制器已经配置好了,然后下面呢,我们再来创建咱们的控制层来。
06:12
Com点艾特硅谷,点count control,然后点,比如说咱们就叫做test controller吧。好,然后我们在这咱们随便去写一个请求,然后咱们来测试一下这个功能啊,比如说呢,然后我们来处理的请求路径,然后就叫做test斜线hello OK吧,然后public返回一个string,然后叫test hello,好,然后我们下面咱们要做什么,大家注意直接在这sus,咱们直接来返回一个逻辑视图就可以啊。然后呢,我们再来创建一个页面suss,好,然后这个是成功,然后咱们也写个he Sus.HTML行,那我们现在咱们的工程呢,就已经创建完了,然后我们可以把它添加到Tom k中,然后来访问一下。
07:08
咱们先把这个删掉,然后我们再来重新添加一个啊,叫做extension,然后咱们把这个上下文路径呢,然后给它设置成一样的,就叫做spring VC。然后这个地方咱们需要选择第三个,这也是第三个apply OK,然后我们下面来启动一下就可以啊。好,然后我们现在咱们需要来测试咱们的拦截器的功能,那咱们的拦截器该如何创建呢?大家注意,非常简单,我们只需要去创建一个类,让这个类呢,然后去咱们的笔记里面有叫做来实现一个什么呢?Handle the intercept这个接口就可以了,然后其中呢,一共有三个抽象方法。好,下面呢,咱们就来看一下,等它启动成功啊。啊,报错了。好,这个大家注意,那是因为我们现在咱们配置的有谁啊,大家看这个错呀,然后其实也很简单,你看啊,还是我们之前遇到那个错叫class note phone的exception叫做类未找到异常,为什么呢?因为我们现在咱们在配置文件中配置的有文件上传解析器,而我们的文件上传解析器它是不是依赖我们的一个commons-fill upload的依赖。
08:22
对不对,所以说呢,大家注意啊,如果我们现在要想让它不报错,你要么把这东西给它注释掉,然后要么我们现在干嘛呢,然后咱们去把这个commons-fill upload的依赖给它加上就行。那我们来找到这个阿贾克斯,然后大家注意把这个给它加上好,然后我们下面呢,然后咱们来这个找到咱们的这个po点叉ML,然后咱们把这些把咱们刚才的这个依赖啊给它添加上去就可以啊,好,Import changes,然后下面我们在这再来一个重新部署就可以啊。
09:03
好,OK,大家看。没问题对吧,然后大家看一下啊,这个时候我们再来访问。然后又进入到我们当前咱们的断点模式了,对吧,因为我们现在创建的是一个新的工程啊,所以说咱们还是要把这个断点呢,给它跳过,然后F9跳过就行,然后咱们把这个关掉,然后我们再来找到咱们的首页,大家看就可以访问了,对吧。好,那我们现在呢,咱们在咱们的首页里面啊,把这些不用的都给它关了啊,然后咱们在首页中,咱们可以来创建一个超链接对吧?然后我们现在咱们是来测试咱们的拦截器的TH冒号,然后我们要来访问的路径啊,然后叫做test,然后哈,好测试对吧?然后拦截器OK啊行,那我们下面咱们就来创建一个拦截器,比如说然后我们现在咱们来点击右键,然后先去创建一个包,这个包呢,拦截器叫做intercept CE,这个单词大家应该是见过的吧。
10:09
是不是我们之前咱们在讲my be的分页插件的时候,它其实就是一个拦截器。它其实就是以拦截的方式来实现功能的,知道吧,然后大家还记不记得它叫什么,它叫配给intercept,有印象吧?好,那下面呢,我们先来创建第一个拦截器,叫做first intercept。Cep to OK,好,然后我们现在需要让他去实现一个接口,叫做handler。Intercept接口,但是你看。我们现在呢,然后咱们把这一个啊接口实现了之后,他并没有给我们报错。那大家说这说明了什么?这说明我们当前这个接口里面,它要么没有抽象方法,要么它的抽象方法都有什么,要么用static来修饰的,要么它会有一个默认的方法体,对不对?所以说咱们把这个接口呢,给它打开,大家会发现这里面呢有三个抽象方法,然后都有一个默认的方法体,这个大家能看懂吧?好,那咱们下面咱们就把这三个方法来重写一下啊,CTRL加O,然后来选择这三个方法,点击OK,这三个方法分别表示的是什么意思呢?大家来看这个pre handle,它是在我们当前咱们的拦截器,在我们的控制器方法执行之前来执行的这个方法,比如说咱们在这呢,可以。
11:35
So,然后来输出一下,输出一个内容,然后这个咱们就叫做first intercept,然后pre handle OK,好,然后下面呢,咱们继续,然后在这个方法里面,咱们也来说出一句话,那这个叫做post handle,这个东西什么时候来执行,是在咱们的控制器方法执行之后执行的。好,然后最后一个叫做after completion,然后这个方法大家看好啊,它是在我们渲染完视图之后来执行的。
12:06
对吧,也就是说在我们的源码里面,大家还记不记得有一有一个方法叫做render的方法,然后咱们的这个方法就是在render之后执行的,因为render是渲染嘛,对吧,对我们的model and view进行处理,而我们在render方法执行之后,就会来执行咱们拦截器的after completion方法,这个大家注意。好,那我们现在咱们的拦截器呢,就已经创建完了,OK吧,然后我们现在咱们来一个重新部署,大家注意它是没有任何效果的啊,为什么呢?因为咱们的拦截器呢,对吧,你看这就是一个普通的类。对不对,然后我们现在它就是一个拦截器嘛,不是我们必须得要要让我们的spring m VC知道它是一个拦截器,那它那它才会有具有拦,那它才会具有拦截的功能,所以说呀,咱们创建完拦截器之后,大家还是需要进行配置的,知道吧,好,那我们先看一眼啊,然后我们现在咱们来一个刷新,对吧,然后大家看啊,你看我们现在这里没有任何输出的内容吗?可能输出的东西比较多,咱们再看一眼刷新。
13:12
然后大家看一下啊,那就这么多内容,这就是我们当前对咱们的这个请求的一个处理,知道吧,所以说呢,那我们下面还需要对咱们的拦截器来进行一个配置啊好,那该怎么配置呢?下面咱们来看一下啊。
我来说两句