00:00
好,OK,那下面呢,我们来找到咱们的web的叉L,咱们把咱们的这个过滤器呢,给它打开,看看它的源码啊呃,还是比较简单的,大家注意这个源码还是比较简单的,是咱们能看懂的啊好,然后首先这个过滤器呢,然后它继承了谁啊,叫做one per request filter。对吧,这个东西咱们之前应该见过吧,对不对,为什么?因为大家来看咱们的charactercoding future,它是不是继承的,也是我们当前的这个过滤器,对吧?所以说呢,我们现在咱们应该在这里面找到哪个方法,然后是处理,是咱们来执行过滤的方法呢。Out加七,把咱们当前这个类的结构给打开,大家注意哪个方法是不是应该是这个方法呀,DO1DO filter internal对不对,然后当时呢,咱们是顺着我们过滤器的一个生命周期,它的这个do filter方法,然后找到了这个方法,然后呢,或者说我当时也跟大家说了,我说你要想找的话也简单,你怎么最快的方,最快的速度去找到它,直接呢,干啥呀,直接在我们当前咱们的这个方法的参数位置去找到一个有request,有response,有future Cha这三个参数的方法,它一定就是来执行过滤的方法。
01:16
OK吧,Request表示我们当前要过滤的请求,Response表示响应,Filter表示过滤器链,它是用来干什么的,来放行的啊,所以说咱们只要找到这个方法就行,好,下面呢,我们来看,你看他都干了点什么,然后他现在呢,先做了一件事情,就是把我们当前咱们需要来过滤的这个request呀,然后呢,又备份了一份。对不对,然后把它赋值给了我们当前咱们的另外一个request对象,然后这个是我们当前需要过滤的原始的request,然后这个是什么?这个是我们当前咱们备份出来的,这个大家注意,在我们执行完这段代码之后,他们两个是一模一样的啊好,然后下面呢,我们再来看,然后来进行一个判断,如果说满足这个条件,然后在这里面大家看是不是会给我们当前的request to use来进行一个扶持,而如果要不满足这个条件的话,下面在这是不是直接放行,而我们当前咱们在放行的时候,也就是说呀,如果不满足这个条件,那我们是不是不做任何处理,然后直接放行,因为这个时候你在这的这个request对象跟咱们这个request对象是一样的,而我们如果要满足这个条件的话,这里面的代码如果说执行了,那我们现在是不是就会把我们当前的request to use来进行一个赋值,再。
02:41
进行行,但是你放行的时候用的还是它吗?不是,而是我们当前在这重新获取的这一个request to use,来把这个来把我们当前咱们的这个请求,对吧。来进行了一个放行。这样的啊,好,那我们来看,你看它这里面写的都是什么,首先,然后这个是我们当前的request,是我们当前的请求对象,然后点get method,这个大家应该之前都学过吧,这是来获取当前请求的请求方式,如果我们当前咱们的请求方式呀,然后为post。
03:17
能看懂吧,然后并且request.get attribute,后边这个大家注意,后边大家这个东西你不用管啊,然后这个你看它获取的是啥,就web u在error pre exception,然后attribute,这是从我们当前的请求域中来获取一个什么,来获一个异常信息,然后如果当它恒等于空对吧,然后这个条件,并且咱们的请求方式为post,这个条件是不是才会成立啊?对不对,那这个是什么意思,大家注意啊,跟大家说一下,有异常的时候它不为空,没有异常的时候它就是它就是空,就是难,所以说我们现在执行的过程中,当前这个请求是没有异常的,所以说这个条件一定是为处的。
04:02
OK吧,然后咱们再往下,那所以这个条件咱们不用管了,那我们只需要来管这个条件呀,什么条件,这就是我们所说的通过过滤器,然后来这个解决我们的put请求和delete的请求的这个第一个条件啊,什么条件?请求方式必须为post,如果不为post,你下面这一疙达连执行都执行不了,知道吧,它执行不了,那我们就直接放行了,然后我们当前用的还是我们,嗯,我还是我们当前需要过滤的这个最原始的request对象,知道吧,好,所以大家注意第一个条件请求方式必须post,然后再往下,大家看一下,你看它在这又做了一件什么事情,Request get parameter是不是获取了一个请求参数呀,这行代码大家肯定老熟了,对不对?哎,获取请求参数,什么请求参数叫做this.method per来咱们鼠标放上去,大家也不需要干什么啊,你也不需要这个一个这个把它给点进去看一下,你看它对应的是不是应该是我们当。
05:02
前的一个常量叫default method perem,这东西是啥呢?你可以在这打开去看,然后我们当然啊,啊,在这还看不了是吧,看不了那咱们就把它给看一下呗,大家看好啊,然后呢,我们从回到咱们的这个位置吧,那我点击之后,然后大家看一下咱们当前的这个成员变量的值是不是应该是它,那这个值是什么就在上面呢?你看它不就在这儿吗?对不对,这个值是什么?就叫下划线,Method。OK吧,好,然后我们继续往下,大家看好,然后我们现在呢,然后咱们是不是获取了一个请求参数,叫做下划线method的值。然后呢,咱们获取完这个值之后,然后我们来判断了一下叫做strings u string us has Les,来判断了我们当前下划线method的这个请求参数的值,然后has lengths来表示的是它有长度,也就是说来判断一下它是否为空,是否不为空,且不为空字符串能听懂吧?如果它不为难,也不为空字符串,那咱们的if就会执行。
06:09
所以说咱们的第二个条件是不是必须要传输一个下划线method的值,如果说你要没传,那它不就是难吗?大家说对不对,对吧?好,所以说啊,那咱们传了,那咱们再继续往下,它在这干嘛了?把我们下划线method的值怎么地叫做to upper case to lower case two upper case转换为大写,To lower case转换为小写。对吧,但他现在把我们当前咱们的下划线method的值转换为了大写,转换为大写之后,它又进行了一个判断,什么判断?你看他拿着我们当前咱们的这个东西点contents contents是不是包含的意思,然后呢,来看看我们当前的这个内容中是否包含我们当前下划线method的值转换为大写的结果,那这是啥呀?来咱们点进去看一下,大家会发现这是个例子的集合,里面都有什么呢?然后大家看啊,你这都大家都不用管了,你只要看一下这个a list as list,那我们当前咱们的list集合中的数据不就是as list里面的内容吗?是不是,你看这个是啥?这是一个枚举。
07:19
看到了没?然后枚举点put对吧?那说明这是我们当前的一个枚举项,然后再点name,你的枚举项点内获得的是什么?就是我们当前的put,这个大家应该都知道吧,所以说你看当前的这个list集合里面一共有几个值,三个值,第一个是put,第二个是delete,第三个是pat,然后所以说它在这判断就是干嘛的,来判断我们当前的这个集合中是否包含咱们当前的下划线method的值转换为大写的结果,也就是说判断我们的下划线method的值是不是put delete,还有pat这三个其中的一个,如果是,然后再继续往下执行。
08:04
能看懂吧,所以说你还不能去设置其他值啊,我们只能用三个,一个put,一个delete,一个patch。能听懂吧,好啊。行,那下面呢,大家再来看,那如果咱们也满足条件,比如说我们当前用的是put或delete,对不对,然后大家看他干了啥,他在这呢,去另了一个http method的request weper,对吧?然后通过他创建了一个新的请求对象,然后为他进行了一个赋值,赋值完之后,然后是不是进行了放行,但是你现在放行的这个请求还是我们之前最原始的请求吗?大家注意不是。这个东西是什么?是我们在这咱们替换之后的一个请求对象,那这个请求对象里面它有什么区别呢?来大家注意这个类啊,就在下面呢。就在这儿呢,看到没有,就在这个位置啊,然后我们当前这是一个有参构造,把谁传过去了,把我们当前的请求对象,原始的请求对象传过去了,把我们当前咱们的method的值就是下划线method转换为大写的结果。
09:11
知道吧,就现在这个东西就是大写的put和大写的delete,知道吧,好,然后你看他都干了点什么啊。大家看,然后这个东西呢,首先它继承了它,也就是说我们当前这个东西,它确实可以创建一个请求对象,知道吧,啊,你看看啊,然后把它给打开对不对,然后你看这是啥,这是我们当前http solve request的一个什么实现类。看到没有?所以说他可不可以来创建一个请求对象。可以啊,然后因为我们所使用的请求对象就是它的类型的嘛,对不对,所以说我们完全可以通过它。来创建一个请求对象,好,然后呢,我们当前它的此类咱们肯定也是可以的,OK,大家看你看他都干了点什么,在这创建了一个成员变量,创建完之后,然后来写了一个有参构造,我们上面在这来调用的就是我们这个地方的一个有参构造,然后它先通过我们当前最原始的这个请求对象啊,然后为模板,然后干什么呢?来调用了它的有参构造。
10:17
能看懂吧,调用了其负类的有三构造,然后下面呢,又干啥了?你看大家注意啊,然后它在这个地方啊,然后把我们当前咱们传过来的这个method,什么是method,就是我们在这的method,就是它就是我们的下划线method的值转换为大写的结果,其实就是大写的put和大写的delete知道不?那我们在这咱们是不是就把大写的put和大写的delete赋值给了我们当前的成员变量,赋值给成员变量之后又干嘛了?你看重写了我们当前的get method的方法,然后把谁返回了,把我们当前咱们的成员变量method返回了,能看懂不?那所以说大家想想咱们在这儿返回的是谁?Put或delete对不对?好,那所以大家想,那我们当前咱们以我们的这个构造方法所创建出来的请求对象以后,我们在以后我们再去访问这个请求对象的get method的时候,咱们。
11:17
访问的是不是就是重写之后的这个方法呀,而重写之后的这个方法给我们返回的是谁?就是咱们的大写的put或大写的delete。能听懂吧,所以说大家注意,当我们在这儿获取了这个请求对象之后,当你把它放行之后,我们在这个请求对象中,就是以我们默认咱们所过滤的请求对象为模板,只不过就是把我们里面的请求方式给进行了一个替换,替换成了谁,你看他替换成了谁,替换成了咱们的这个method。对不对,替换成了大家注意这个method,而这个method是谁?是从它来进行的啊,这个method就是咱们的成员变量,而这个成员变量由谁赋值的,由它赋值,它在这儿呢?谁调用的它,咱们往上看在这调用的它,然后呢,这个值是不是来给咱们当前的这个method进行了赋值,那这个method是谁?是它,然后它又是谁?是我们当前咱们的下划线method的值转换为大写的结果。
12:20
能看懂吧,所以说大家注意,经过我们当前咱们的这个过滤器,你只要符合我们当前这个过滤器处理请求方式的条件,那我们在这个地方,咱们的这个过滤器过滤之后,我们当前的请求对象中的请求方式就已经被替换了。OK吧,替换成了什么?替换成了咱们的下划线,Method的值转换为大写的一个结果,这才是我们最终的请求方式。OK吧,行,这个大家注意啊,这东西咱们是能看懂的啊,所以说大家呢,可以去好好理解一下,当然如果说你看不懂也没关系,对吧,然后咱们知道这个东西该怎么去用就行啊。好,OK。
13:01
那我们现在咱们的增删改查咱们的四种请求方式,Get post delete,还有put,这些请求方式咱们是不是都可以发送了,对不对,好,那下面呢,我们再来想啊,你说这里面,那其实我们现在要实现个查询其实不难,这个添加呢也不难,修改呢,其实也无所谓,其实无非就是咱们修改一般肯定是要有表单的嘛,对吧,然后表单里面,那我们是不是再设置一个隐藏域,其实也没有什么难的,关键是这个啊,大家看。删除,你啥时候用富翁表单删除过,我们一般删除咱们用的是不是都是一个超链接删除,大家说对不对。对吧,一般的删除功能我们用的都是什么?咱们一般用的都是一个超链接,然后来进行删除。OK吧,好,然后所以说你看我们现在是不是就要干嘛呢,我们现在在我们的rest里面,然后我们要实现一个删除,我们是要通过一个表单删除的,那所以说这个删除功能现在就变得比较麻烦了,为什么?因为我们现在呢,是要通过咱们的一个超链接来控制这个表单的提交的。
14:09
能听懂不?哎,行,大家注意啊,这个到时候咱们在写这个增删改查的时候,大家好好看看该怎么去写啊,好OK。好,然后呢,我们之前啊,咱们再给大家讲咱们的a request mapping的时候,大家还记不记得咱们当时跟大家说过,咱们的这个注解,结合我们当前的请求方式,是不是有一些派生注解,大家有印象没有?叫做派生注解对吧?来大家看啊,然后怎么用啊,然后在这咱们有一个叫什么,比如说请求方式是固定的,叫get,叫get,那我们在这就request mapping,结合get请求就有了一个get mapping,那我们在这咱们是不是只需要来写它的请求路径就行,大家看直接一个user就完事了,知道不?那行下面这个咱们也是一个get mapping,因为这个是根据ID来查询用户信息,所以说呢。
15:02
好,然后所以说大家注意,这也是一个查询操作,所以请求方式也得是谁呀get啊大括号ID行大括号IDOK,然后下面呢,我们直接在这一个复制吧,然后这个叫什么,这个应该叫什么,叫做post mapping对不对,然后呢,咱们这里面是不是把这个东西给它删掉就可以啊好,然后这个VALUE6呢,咱们也不要了。好,然后下面呢,我们再来看,然后这个呢,It叫什么?Mapping叫做put mapping,然后把咱们的value来设置一下就行,叫做user,然后这个呢,应该叫什么?Mapping叫做a delete mapping括号好,然后这个是斜线U点斜线大括号ado OK啊来我们下面咱们来重新去测试一下,大家看一下这些派生注解,然后跟我们之前咱们用的一个原生的request mapping,看它们一样,效果一样,不一样啊。啊,然后咱们把这些东西都给它清空掉,然后我们再这来返回刷新,大家看来这是查询所有数据,大家看没问题吧,好,下面我们再来看咱们查询ID唯一的用户信息,大家看没问题,然后再往下,这是添加用户信息,没问题,然后再往下,咱们这是删除啊,这是修改,修改用户信息没问题,然后最后一个咱们是删除用户信息,大家看是不是也能够实现,对不对,好啊行,那这就是我们当前hidden http method filter的一个源码啊,然后以及咱们当前的一些派生注解啊。
16:37
好,那当然这些派生注解的话,也是大家可以用,你也可以不用,对吧,如果说你要感觉咱们这个写的比较麻烦,因为咱们这里面是俩属性嘛,但是这里面咱们是不是已经在我们当前的注解中已经规定了它所对应的请求方式是什么,对不对,所以说大家如果说感觉这个麻烦,那咱们就用这个简单的也是可以的啊。好,OK。
我来说两句