00:00
我们来看一下。Future change这个类。啊,在哪呢?这个类在哪呀,大家看一下哈,就是咱们这个过滤器里面就这么几个方法吧,其实它的功能还是比较单一的,这初始化,哎,Filter咱们讲了,它也就那么几个方法,你看到了吗?就是future conflict点就那么几个方法,你看见吗?差不多都讲了,然后。到这个读future里面,咱们这个方法也说过了,它是专门用来拦截请求的啊,那么它的参数有select request,这咱们讲过,就是对象,That response,它就是response对象,诶这个东西咱们没讲过,咱把它说明一下,就是future change future change,好,那future change是啥呀?Future t,那么拆开来解释一下哈,咱们说future是什么?过滤。气是吧,那么俊呢,链链条咱们可以翻译一下啊,你可以自己翻译一下,看见了吗?练链条加速啊是吧?哎,那么future train呢,就是过滤器练简单点说就是多个过滤器啊,如何一起工作就这么简单了啊,就多个过滤器是怎么一起工作的,就大概这个意思,那么我们跟大家说明一下,演示一下啊,我们画个图说一下多个过滤器是什么样子,首先。
01:37
这边呢是客户端浏览器,呃,客户端浏览器好,那这边。咱们说一下哈,这边就服气了。啊,这是服务器。好,就这同K,那么大家注意看了啊,咱们说future是在目标资源之前先执行的,所以前面这些其实就是future。
02:08
前面这件是future啊。咱们先说这是FUTURE1。FUTURE1。走,咱们再整一个FUTURE2。嗯,手OK。好,然后后面是啥呀,后面就是目标资源了,哎,就目标资源就用户访问的那些东西。好,咱们说这个是目标目标资源,哎,目标资源好,那目标资源都有哪一些啊,就咱们前面讲那些叫做HTML页面呢,是吧,就这些。哎,接着P页面啊,程序啊,JPG图片啊,TXT文本啊,NP4视频啊,Avi视频啊等等啊,这多了啊,反正都是啊都是好等等。
03:14
咱们说等等太多了啊,取不过来啊,这些都算,那么当客户端有请求过来的时候,I双斜杠IP地址,呃,端口号工程路径吧,对吧,斜杠资源啊,大概就这样子发请求嘛。好,这时候注意看,他请求进来的时候是先走的,前面看见了吗?先经过这些future,那future里面又做了哪些东西呢?咱们仔细来看一下,这里面每一个future都有一个方法,叫做读future方法,做拦截的还记得吧?哎,就是这读Q的方法好,别着急,这边呢也一样堵。
04:05
Future方法。读这方法好了,那么大家看一下哈,那么我们说。这里面呢,有一个呃对象叫做什么东西呢?叫做future群,点do future好了,那future train的话,我就写成一个群了啊,因为太长了,实在写不下了,叫吧change,点读future。哎,它这里面都会执行这样的一个代码,去点读future,那这边呢,也是去点do future是吧,都会有这一行代码,然后我们就要说明一下了,那change into future是吧,这个代码有啥用,大家注意看就是。注意啊,Future to这个类,它的do future方法的作用是什么?哎,大家看它有两点。
05:11
大家看啊,其实这个类我可以给你在文档中找一下,它就一个方法啊,你也可以看文档这试着看一下哈,走它它是不是就一个方法呀,你看见了吗?就一个方法也没啥可说的,来吧,就干两件事情,第一就是什么呢?执行下一个future过滤器,如果有。啊,如果有第二个作用就是什么呢?执行目标资源是吧,执行目标资源哎,就是没有future了,好OK,大家看他就干这么两件事情。啊,干这么两件事情,那么注意了啊,一般情况下我们在去点do future里面是不是还得做一些拦截工作,而不是直接写上个代码就完了,所以一般情况下在这个trend into future的前后还要再加一些功能代码啊,那么咱们咱们说前置代码一是吧,这个也是前置代码一,然后这后面呢,它还有一些叫做后置代码二是吧。
06:26
后置代码代码啊,大概就这样子,那么整个代码的执行顺序大概什么样子呢?请看啊,就是你这个请求进来,它先到这个去,呃,去你读future这个方法里面读future啊先往下走,先执行这么一行,我换黑色。先执行这么一行。然后这个前置代码执行完了以后,他开始执行future。哎,确认点对方一执行就开始进入到这两点他才开始判断,他先看到,诶,你有没有下个过滤器啊,有就执行,所以注意看那这个地方走。
07:08
看懂了吗?他来到这边。执行这个future,那这个future里面又开始按照这样的一个代码顺序来执行,先执行前面就从上往下执行嘛,很简单嘛,是吧,来再进行到这里,然后接着调用去年的怎么办呢?他看你有没有下个过滤器啊,后面已经没有了怎么办?执行目标资源,就开始执行目标资源,就这样子。啊,那怎么办呢,注意看。他就会到这边来。看到了吗?那这边执行完了以后。一路返回。看见吧,一路返回,哎,最终返回到客户端这边。这就是多个future过滤器,它执行的时候的这些细节啊,这些细节来我给你演示一下哈,现在呢,我们多加几个future,验证一下这个细节上的流程。
08:09
呃,我们说FUTURE1啊,它要实现future接口,注意导包别导错了啊,不要导这个包是什么,加YXSO,好。实现人类的方法,咱们重点关心的是谁呀?是读这个方法,我们说它这里面有future trend,点读future这一行代码。Request,好,咱们打印一句话啊,前置前置代码。FUTURE1后。好,你看有这个前置后置了哈,然后我们再准备一个future future2也一样。也一样啊,只不过我改了个内容就行,他也没干啥是吧,然后这两个东西写好以后啊,我们到web点插中去配置一下啊,他才能工作啊,呃,我们来写就配置一下future。
09:20
这里是future name和class。这是FUTURE1。我复制一下类名一。Future mapping好,那么把这个FUTURE1拿过来,然后是URL,呃,咱们给他拦截谁呢?拦截谁呢?大家注意看一下哈,咱们一会请求示意的时候,为了让能看见这些代码有执行顺序,所以我们挑选一个能写代码的,咱们挑选这个JSP吧,他能执行一些代码嘛,能够打印些东西,能看见顺序,呃,我们写个JSP。
10:08
我们写在这边。咱们就叫做他给点JDP啊,在这里面写行代码,咱们说给截页面执行了是吧,我们就拦截它,那拦截它这个路径怎么写啊,注意看啊,斜杠表示到工程名,映射到代码的web这个目录,那紧跟着写上T,点击P就完事了啊,就给它就行啊,那FUTURE1是这样子,FUTURE2也一样。哎,这个换成啊,这换成二就完事了啊,没有什么神奇的好,现在呢,整个代码就都写好了,那现在我们测试一下,我们就来看看整个代码的执行顺序。是不是如图所示啊,跟我们说的一样,来重新启动一下清了。
11:03
啊清了啊,稍等啊,咱咱不看这些啊,咱们不看这些来,现在咱反问只他给他点JP敲回车,大家请看这个代码的执行顺序,FUTURE1的前置,FUTURE2的前置,然后到t.P看见顺序了吗?就跟我们这里一样,FUTURE1的前置走下面来,FUTURE2的前置走到目标资源,目标资源执行以后就倒回来,看见了吗?FUTURE2后置,FUTURE1后置,FUTURE2的后置,FUTURE1的后置。看见了吗?最后到扣的是吧,最后扣的好这个呢,就是多个future过滤器,人家在执行时候底层的一些这些细节是吧,这些细节咱们知道一下哈,那么这里我们还要再说明一下。说明什么东西呢?我们要对我们刚刚说的这个future,它的一个作用进行一个演示啊,就如果说大家注意看,如果说我把这一段给他打掉了。
12:05
就说二零年他还能当部分资源吗?来,我给你演示哈。如果FUTURE2当中这些代码没有了。它就不会往下走了啊,请看我再重新部署,让它生效。你看看我们这个测试的效果。走大家看哈,呃,我们这边刷新一下,走刷新了。刷新之后,你看控制台FUTURE1的前置,FUTURE2的前置到FUTURE1看见了吗?这个代码是什么样子呢?我们说啊,他从这边走,走到这边来,过来只会执行FUTURE2的前置,你看了吗?FUTURE1前示FUTURE2潜置,这个没有以后大家注意看啊,他就直接下来回来了,看见了吗?当FUTURE1的后置看见了吧,哎,好,这就是什么呢?这就是change future是吧?或者说我们再演示,换个地方演示一下,我们把这个地方放在这里,那后面通通不会执行,它就会执行完以后直接回来了。
13:08
注意看这个效果哈,我把FUTURE2看见了吧,你的恢复,但是FUTURE1就已经没了,我跟你说后面都不执行了啊,后面有也没啥用啊是吧,来他重新部署啊,稍等好重新部署成功,这些我清掉啊,现在我们刷新你会发现只有FUTURE1看见了吗?哎,只有修车一,为啥呀,他走到这里推车一之后,后面就不再执行了,直接回去了。直接回去了。这就是。这个诶对象啊,Future train等读future这个方法的作用啊,要了解一下执行下一个future过滤器,执行目录资源,这是它的作用,好那么除此之外,除了这个问题以外啊,咱们还要再验证个什么东西,就大家可能会说老师,那我以后写代码,难道我这个类名也要叫FUTURE1FUTURE2吗?
14:05
是吧,是这个类名决定了它执行的先后顺序吗?那我一般开发的时候是不这么写的,那怎么办呢?大家请看什么东西决定了他们的执行顺序,我把这个web点叉没有啊,注意注意现在。就这两个东西嘛,是吧,我现在调换一下他俩的顺序。看见了吗?把FUTURE2放到了上面。这时候我们重新部署,看谁先执行。呃,我把这个放开啊,忘了把它放开了,再重新部署一次。好。好了,部署成功了啊,那现在我们看谁先执行啊。谁先执行FUTURE2变成了第一个future过滤器,看出来效果了吗?那我们说明一下哈,在多个过滤器当中。
15:09
在多个future过滤器执行的时候,他们哎,他们执行的优先顺序是由它们在web点餐没有中从上到下配置的顺序决定。这个一定要知道啊,这一定要知道,多个future,它的执行顺序是由它们在web点差表当中从上到下的配置优先顺序决定,跟类名没有关系。记住啊,跟类名没有关系啊,这咱们了解一下,那咱们把它改回去啊,要不一会乱了改回去。OK,好,改回去了啊,并且大家注意看一下多个过滤器在执行的时候,除了这些点,我们需要知道它还有哪些特点吗?我们来说明一下啊,注意看看多个future过滤器。
16:14
哎,执行的特点有哪些?它还有一些特点啊,那么我们来说明一下。哪些特点?哪些特点首先。首先第一点啊,大家请看。第一点是什么?哎,所有所有future啊,所有的什么future和目标资源默认都执行在同一个线程中。就是默认的情况啊,这些代码啊,大家注意看你这个请求进来是吧,这些代码执行默认都在同一个线程中,就是默认,为什么叫默认呢?因为我们的代码是可以手动的,没线程的,如果你没有一个线程,那就不算了是吧,默认情况下在一个线程里我给你演示啊,啊比如说我现在呢,打印一下这个线程名。
17:17
啊,打一下行动名,然后我说。一现成啊,来我复制一下。Q2行程。然后目标资源的线程啊,都一样的这东西。好,我现在重新部署啊,来咱们看看这个效果。稍等啊,不熟好啦,那我先清掉。然后我刷新大家看这个线程。
18:03
是不是完全一样啊,都是三幺,你看见吗?都31808031808031,它完全一致啊,完全一致,这是默认的情况下,好这第一点第二点。第二点大家看一下哈,那么以上就是。以上,呃,怎么说?呃,多个future吧。共同执行的时候,他们都使用同一个对象,记住啊,你看这个执行FUTURE1 future2,目标资源,他们都有request对象,来,我给你仔细看一下,FUTURE1里面请看啊,这是不是有快的对象啊?FUTURE2里也有看见吗?目标资眼里也有啊,你看。是不是快乐对象啊?好,大家注意看啊。
19:02
那么他们都使用的是同一个request对象,为什么?你从这个图中就能看得出来,简单的看出来,为什么一来一回,一个请求一个响应,这是不是一个请求,这就一个请求,所以他们收到的是同一个的对象,减了言之。简而言之,这些对象里面的数据都是共享的,就比如说。咱们说啊,FUTURE1,我们获取一下请求参数啊,点get parameter,咱们说usual好。我在QQ里面同样是可以干这个事情的,因为就同一个嘛,嗯,我在目标资源里也可以干这个事情,没有什么影响。哎,这个地方叫request啊。
20:01
好,那么来重新部署啊,重新部署一下。好,部署成功了,我们来加个参数去访问一下。U等于3W168敲回车。大家来看一下哈。J是不是得到了FUTURE2是不是也得到了?呃,JP他给的JP是不是也得到了,他们都能得到,甚至我们在FUTURE1里面保存的数据,保存的数据,诶,来看一下哈,咱们就说T1吧。Y61是吧,我们在FUTURE2里面或者目标资源都能取出来,我就给你演示一下就行了哈,咱们说FUTURE2取FUTURE1中保存的数据是,呃,咱们说serve reported get打出表,这是什么key,我们看看效果啊,重新部署。
21:10
等一下啊。好,部署成功了啊,我们来刷新一下。我们看一下FUTURE2中取FUTURE1中的数据是Y1啊,可以的,看见了吗?你这里保存这个数据。啊,就这个数据好,这个咱们了解一下,就是多个过滤器执行时底层的一些特点,啊,底层一些特点,这咱们了解一下,就是多个过滤器整体上执行的细节。
我来说两句