00:00
我们在学习过滤器的时候,有一种方法,有一种学习方法与对比着来学。这俩东西很多地方都是一样的或者相似的,所以我们来先来看啊,基础。先看filter的生命周期。说到filter生命周期,我们就想了要对比啊,和solid比,Solid生命周期经历了是不是也是四个重要阶段的实例化?初始化。是不是销毁?只不过对于filter来说,它这儿不是service是什么?是do filter方法。那这里边儿对应的啊,这四个重要阶段,其实对应的就是四个主要的方法,实例化对应的是。
01:02
我们的构造器filter构造器初始化,对于solid来说,初始化对应的是谁?In need方法?那filter里边也有隐秘?销毁对于来说,对应的是Detroit方法。而对filter来说,它也是方法。所以我们的生命周期也是经历了这样的四个重要。环节四个重要的阶段。那么啊。它是什么?它也是个接口,我们看一下找到API。So,规范里边的接口我们找到。接口。是不是这有。
02:01
对不对,它是一个接口。这个接口里边你看有三个方法,Detroit,销毁init。初始化呀,这有个do filter。那这样的话,我们。写个代码。我们看一下这个filter啊,怎么样定义,以及它的生命周期。先来个工程。零一。我们叫。啊,基础是吧。好。
03:06
我给这儿来一个class,这拉叫什么?WHY?Some com点北powerno点。Filters。实现的接口filter看好了,看好了,这filter这么多,选择哪一个。Java X点这个包下的啊,这不我们刚刚看的吗。对不对,加了x.service这个包下的filter。
04:03
OK,诶。这怎么?只有一个啊。打开它看一下,打开源码,另外啊叫。你看这儿这参数。参数名叫这个名儿,为什么,是因为。我们没有连接源码,连上源码了,这个就能变过来了,我们这样连一下。连源码连谁呀?但得连我们的汤姆开圆满。Tomcat tooth tomcat9。源码,Src。OK了,连上源码了,我们看一下init怎么。它是不是有默认实现的,你看。对不对。
05:00
Detroit默认实现。呃,只有这个他没有实现。你看这直接分号吗?它没有实现了,这是个抽象方法是吧。好。把这个删掉。你看看。参数名是不是变过来了,OK。呃,当然了,为什么刚才连源码的时候连的是tomcat源码?那我们知道tomcat是什么?Tomcat它是。规范的实现者。所以我们说tomcat服务器也有个名称啊,它是web容器,也叫solid容器吗?那他是solid规范的实现者啊,所以我们是面向接口编程的呀,所以它里边。
06:07
这些源码都存放在了。我们他们看的源码里边OK啊,这里边代码怎么写呢,我们看一下。在这儿啊,我写上一句话。执行什么?执行这个。Some filter。好,我就写这么一句话,看看这句话什么时候运行,不过你需要注意啊,注意什么?记不记得我们在讲的时候?我们说是不是需要注册的呀。对,So需要注册,那filter呢,同样也需要注册,好我们注册在哪注册,当然是外边的啊。
07:10
这些。通通删掉。我这要干嘛呢,注册。注册filter。Solid怎么注册了?Solid是不是用的俩标签,一个solid,一个叫solid mapping,那呢,类比着来呗。Filter filter mapping so里边这个标签里边有两个子标签,一个叫name,一个是class,那有没有呢?Filter name class filter name我们叫什么?比如就叫some filter,还有个class。当然class我们得。
08:10
拷贝全名。Filter mapping,它里边也包含filter name。和谁呢?想想solid map里面包含什么?它包含的是name和URL pattern,它有没有?第二,OK了。那这写什么杠星,杠星什么意思?所有请求,所有请求,他通通的过滤,通通的拦截。你注意是对当前web项目的所有请求都拦截,所以说。
09:01
现在我就可以发布了。看着。执行了没有,哎,他为啥会执行它呀。所有请求都会拦截,那我问一下。现在这个。是对他的请求,不是。是对当前项目的请求,不是,当然是啊。只不过现在这个页面它没有,但是它也是对他的请求,所以这儿。这过滤器就执行了。那如果说。啊,这样,我给这儿来一个index。
10:04
Index刷新。你看首先咱先不说其他的,我刷新了好多次,这是不是就出现好多个。萨都发就说明这个方法是不是执行了好多次啊?对不对,他执行了好多次,只不过现在有个问题啊,什么问题呢,为什么那个index页面没出现。难道说?关了重新发布一次吗?不过好像也不对呀。我们的web项目如果仅仅是。页面修改了它是。他是不需要重新发布的。那咱重新发布一下,看看是什么原因。
11:07
哎,还是没有啊。可这个执行了,我再刷新走一下,两下三下。你看这是不是我后边刷新的三项,诶这个有点意思了啊,这个执行了。但是一直看不到他。这是为什么?好,看着这个图。我们大家知道啊,我点刷新肯定是提交请求了。他肯定是提交了请求,如果我们可以看到index.jsp肯定是服务端给我们的响应,那现在我们看不到就说明什么副端没有给我们响应,他为什么没给响应呢?只要服务器能够接收到你这个请求,你请求什么请求in.GSP呢?只要能接收到个请求,他一查看我也有in.GS肯定会给出响应,那么服务器之所以没有给出响应,是因为服务器根本就没接收到请求。
12:15
为什么?夫妻没接到,那也不对呀,我这执行了呀,OK了。菲特执行了,说明请求已经到达了菲特,但菲特没有将这个请求传递给服务器。他把它拦截下来了。所以出现的这样一个情况。这看不到响应。怎么办?诶,我们往后继续写,这没写完的啊,写什么呢?看着啊看着这儿。这是request。这是response,没问题吧?看这这有个chin。
13:02
Filterin翻译过来什么意思?过滤器in chin,这是过滤器链。他干嘛的,我们一会儿讲。那么我们看一下这个。点诶,这有个什么,有个do filter,看到没?它这有个do filter,怎么又do filter了,这do filter,这也do,注意这个do filter和这个do没关系。仅仅是方明。相同而已,这个杜是谁的方法?是这个filter接口的方法,这个filter是谁的?是felt chin,它是什么?他也是个接口,是这个接口的。明白吧,就好像你们班有个叫张三的。
14:00
人家另外一个班也有个叫张三的,这俩张三是一个吗?不一个,仅仅是名字相同而已。啊,这次明白了吧,好明白了,那这样我们。重新发布一次好了,那重新发布了啊,我现在刷新。走。诶看到了,这次看到index配了,是不是看到就说明什么了。看到了就说明我们看到这个响应了,就说明服务器给我们响应了,服务器给我们响应了,就说明他接收到请求了,接收到请求了就说明这个请求U已经转给了服务器了,那么这个循环就结束了。所以很重要的是哪儿?沁点do filter。Okay。这个啊,执行。我这加一个before,这加一个after,看好你看看会出现什么情况啊,看这执行的过程它会出现什么。
15:14
来重新发布了。清了啊,我控制台清空了,现在重新刷新。Before after。看到没?After哦,After,这这这我们刚才看到了啊。如果没有后两句,他肯定是先就执行完,他没了,现在有了这一句了。我们有了这一句话,发现它执行了,紧接着我们在页面是不是看到index配了,现在我又加了这样一句话,那就说明在他出现了index配件以后,又拐回头来执行它了。
16:07
又拐回头执行它了。嗯,是这样吗?也就是他现在的执行顺序是这样的。先执行了这句话,当然你请求到达以后啊,到达请求到达filter以后,Filter把它拦截住了,拦截住以后干嘛,我先执行这句话,紧接着执行这句话,紧接着执行这句话,这句话会干嘛。这句话。会给出响应,把index JSP这个响应发送给客户端,发送给客户端,也就是说我们看这个图,他要把信息发送过去发发谁响应啊,当响应到达这儿的时候被拦截了。
17:02
被拦截了。执行,谁执行?这句话,这句话执行完毕了,然后我们的客户端才能看见这句话。是不是呢,加个断点我们看一下。给哪儿加就加到这儿。就加到这儿,加到这儿我们想一下啊,如果加到这儿以后,它执行到这儿了。这句话输出了,执行到这儿了,这儿执行完了,但这儿还没执行的,那就意味着什么,现在我们执行完它了,响应里边已经有了index JSP了。标准输入流里边已经有了,但是我们客户端没看到。必须把这句话执行完了,他才能看到。是不是?找一个。
18:09
看我这刷新应该出现什么,从这来看的话,应该出现的情况是这看不到index index page,但是这边应该出现什么。这边应该出现这句话,Before,看好啊。走。你注意啊,这还是原来的。Yes,转过来。不好,咱们这样把它关掉。这个也关掉。这个这个。咱们这样啊。嗯,我这个页面不叫index,换个名,因为index默认的啊,我叫秀。
19:01
换个名儿。换个名儿。嗯,换个名儿也不好啊。就这把不换了,还叫index index啊。现在我让他跑起来。嗯,让他跑起来啊,这样先让他跑起来,我把那地址复制一下啊。我把这个地址复制一下。我现在要他呢啊。停了啊,服务器停了,我现在第bug。找这个debug。好。看好。我现在点他了,走。
20:01
看到没?现在啊,可是没有到达哪儿。银袋子配件的没看见啊,你看还在百度呢。但是这before是不是已经出来了?这句话现在没执行。这句话没执行,把它清掉。看好。我现在,哎呀,咱们得点这儿了。让他运行完毕啊,继续。运行完毕怎么样?咱们这样这样能看着。能看着点儿啊。看到这index page,这。早。After,执行了。
21:00
呀,这这怎么改了,改改成百度了。换成百度了。这这这个。看见吧。停了。好了啊,走。早。这输出了,After了,今天让他走完。
22:05
没问题吧?是不是他输出先输出after,然后我走完这边是不是才看到index配呀,所以所以说这是干嘛的,这句话是干嘛的。这句话是要。把这个请求啊放过去放行的。将请求放行,放行到服务器,当然了,放行到服务器那也有可能啊,我们到后边会说这个filter有可能会有多个,就是放心给下一个资源。所以这是希望大家理解,谁庆点do,它很重要啊,它起什么作用?将请求放行到下一个资源,OK了。
我来说两句