00:00
好,那咱们刚才呢,咱们已经模拟了这个get请求跟post请求了,就比如说这两个是不是应该是get请求,这个是post请求对吧,那咱们下面咱们就来写一个put的请求吧,行不行?哎,先写个put的请求,因为put的请求说实话还是比较简单的,大家会发现这个现在变成最难的个事情呢,就是咱们的删除。就是咱们的删除,为啥呢?咱们来往下看,首先呢,那咱们先来看一遍咱们原来所说过的一个结论,就是你不能直接在method里面来写我们当前的请求方式,你只能用get跟post,你能不能用写成put跟delete不行,那所以说呢,下面大家看好,我把这个东西复制一下,然后复制完之后咱们在这是不是应该也是啥呀user,然后请求方式咱们是不是应该用谁。啊,是不是咱们在这写个put来测试一下呀,是不是是吧?好,然后这个地方咱们来写一个修改,没问题吧,是不是应该对应的是修改功能没问题吧?好,那下面呢,那我们来往下看,然后咱们在这个地方,然后来写一个请求映射request mapping,然后括号,然后在这咱们先写个value来表示咱们的请求路径是user,好还有就是咱们的请求方式应该是request method,点什么put没问题吧,好,再来写这个方法返回一个string,那我们当前咱们这个方法名咱们就叫做update user可不可以啊,可以吧,好,咱们把这俩也拿过来,或者说你拿不拿都行,是不是啊,咱们就就算了,拿过来吧,好,然后把它给放到这,好然后下面咱们把这两句话呢给复制过来,但是在这咱们应该是修改用户信息。
01:55
能看懂吗?好,OK,大家说它好使不好使,报好使,那他会报错不会,会不会不会报咱们这个什么请求方式不支持什么的,会不会不会,记不记得,咱们如果请求方式不被支持,就是请求地址能够匹配成功,但是请求方式不被支持的话,是不是会给咱们报一个错是405,大家有印象没有,有印象吗?但是大家说这个时候会报错,不会啊,不会,为啥呀,因为其实我们之前咱们就给大家做过例子,如果说在这你写的不是get和post,那它默认按照什么来处理啊,默认按照咱们的get方式来处理,OK吧,好,那所以说咱们的请求地址是user,那我们的请求方式是get,那所以在这它会匹配到谁,会匹配到我们当前查询所有用户信息,大家说对不对,对吧,好,所以说大家看我们现在呢,咱们来刷新一下页面,好,然后当我们在这个地。
02:55
刚写的al me123456,来点击修改,大家看跳过来了没跳过来了,但是在咱们的idea的控制台中输出的是谁查询所有用户信息,那这对不对不对,说明我们当前咱们的method设置为put有没有起作用,没有起作用咱们所使用的请求方式默认还是谁呀?Get,那好,那这个问题咱们应该怎么来处理呢?大家注意没有别的办法,有同学老师我用阿贾克斯能不能发送put特跟delete请求呢?大家注意可以是可以的啊,但是呢,你要知道咱们的阿贾克斯的API里面写的很清楚,你可以发送put跟delete的请求,但是并不是所有的浏览器都支持的能听懂不好,比如说大家来看啊,来,我给大家找一下咱们当前这个这个阿贾克斯的这个API啊,咱们找到咱们的旧版外网来找到咱们的。
03:55
这个什么j query是不是啊。是吧,然后来找到我们当前咱们的这个API啊,大家也不用管,咱们就看一下就行,行吧,找到咱们的这个阿贾克斯方法,然后往下走,往下走,然后大家看这个地方有个tap tap指的就是咱们的请求方式,知道吧,默认是get,然后呢,请求方式可以是post或get,注意其他HTTP请求方式如put和delete,也可以使用氮几部分浏览器支持OK吧,好,这样的啊好,那所以说呢,那我们下面咱们要想来实现我们当前的put请求和delete的请求该怎么办?咱们的SPAVC为我们提供了一个过滤器。
04:40
来为我们提供了一个过滤器,然后这个过滤器叫什么呢?叫hidden http method future,来我先在咱们的web的插苗里面给它写出来,因为咱们的过滤器要想起作用,是不是必须得进行注册,大家说是不是对吧?所以说来咱们在这个地方看一下啊,来怎么来写呢?这个是用来配置,然后咱们的hid hidden method的http filter,首先hidden隐藏是不是大家原来是不是学过隐藏域叫做type,等于hidden是不是,是吧?它然后HTTP,那就是HTTP协议,Method是不是应该是咱们的请求方式对不对?好,然后下面呢,就是咱们的future,也就是说这是一个过滤器,它的作用是干什么呢?然后咱们从名字里面,咱们应该知道这它的过这个过滤器的作用,是不是应该是一个隐藏的H。
05:40
对,Ttp的请求方式对不对,对吧?那它到底有什么作用呢?来,咱们现在把它注册一下future,然后future name咱们叫什么?一会再写啊,好,Future class,那咱们只要知道这个future它的权利名,咱们就能够注册了,大家说是不是啊,对吧?所以说在这叫hid hiddentdp method future,然后把咱们的类名放在咱们的future name中,然后再通过future making,然后来设置它的映射,然后在这,那我们是不是要对所有请求进行处理啊,是不是啊,OK,来。
06:19
写完了之后,那咱们这样来直接看它的源码,因为你不看源码咱们也不知道该怎么去用,能听懂吧,来看好了啊,把这个东西给它打开,首先大家来看这个东西,然后记成了什么,One per request filter,对不对,对吧?好,咱们说过既然是过滤器,那我们的过滤器中就一定有初始化执行过滤,还有销毁的生命周期的三个方法,对不对,对吧?而我们执行过滤的方法是不是我们是不是才是我们最重要的一个方法,对不对?那我们该怎么去找这个方法呢?咱们alt加七将我们当前咱们的这个过滤器里面的方法结构给它展示出来之后,大家说我们应该怎么去找,我跟大家说过吧,咱们的character including future,咱们是不是就打开看过,对不对,对吧,你要么呢,就是从我们。
07:20
当前这个过滤器找到它的负类,然后再去往上找,去看看我们过滤器中执行过滤的do filter方法到底调用了谁,能听懂吗?能听懂吗?哎,或者说大家最简单的方法是什么?你直接去找个方法看,里面只要有filter t这个参数,那它必定就是执行过滤的方法,大家说对不对,我说过没有说过吧,为什么?因为filter是不是用来放行的,对不对,对吧?那咱们的过滤器大家想想你执行过滤是不是应该有两种结果,要么是拦截,要么是放行,对不对,对吧?所以说咱们必须得有future差,所以说大家看应该是哪个方法,这个方法。
08:05
其实在咱们的Ding里面是他的事啊,大家记不记得。啊来,咱们把这个东西给他点开,一样不样一样一样一样是不是这里面咱们当时看的方法不就是这个吗?多internal是不是啊是吧,OK啊行来下面呢,我们来看这个东西啊。呃,他都干了啥呢?那首先咱们肯定是要看他的对不对,对吧,还是非常简单的,首先呢,大家看,然后你看他将我们当前咱们在这儿是不是我们传过来的这个request,大家知道这个request是啥意思不?啊,大家知道这个request是啥意思,不就是来作为我们当前执行过滤的这个方法的这个参数,Request和response是啥意思啊,是我们当前过滤的时候进行拦截的请求和响应,大家说对不对,是不是吗?是吧,好,OK,然后再往下大家来看,在这个地方啊,它将咱们的request,然后是不是又复制给了一个http solve request对象叫做request to use,能看懂吗?然后大家再往下看,来在这进行了一个判断。
09:26
什么判断呢?大家来看一下。知道这个是干啥的不?嗯,大家知道这个方法是干什么的吧?Request get method什么意思啊,叫做获取请求方式,能听懂不一定要记好啊,我们当前,然后咱们的这个东西就是来获取当前请求的请求方式的,大家要注意,我在这个地方用的request是这个request,也就是当前过滤器所拦截的请求,能听懂吧,能听懂吧,好OK,然后大家看他都干了点啥,他是不是在这个地方来判断了一下,咱们当前的请求方式必须得是谁post,因为在这是and,那所以说是不是只有请求方式为post的时候,然后才会去执行这里面的一段代码,大家说对不对,对吧?所以说那要想执行这一段代码,请求方式第一个条件必须为post,然后第二个request.get a tri。
10:38
Du where you,什么ever,什么exception什么什么的,大家注意,这个咱们不用管,这个东西肯定等于空,能听懂不能听懂吧,肯定等于空,所以说咱们不管这个条件,我们来管什么条件呢?咱们就管前边这个,也就是说后边这个,咱们把它当成是一个恒成立的,OK吧,好,那前边这个要想去执行咱们if里面的内容,那我们当前请求的请求方式就必须得是post,能听懂吧,能听懂吧,好,OK,再往下看来,大家注意他又干了一件什么事情。
11:16
点大家说啊,又干了一件什么事情,是不是在这来获取了当前请求的请求参数,对不对,Get t比大家都见过吧,见过没有见过好然后呢,那这个获取的是什么请求参数呢?来咱们把它给打开,点击之后大家看看这个东西。看是不是叫default method para是不是,然后你会发现这是一个常量,那这个东西在哪呢?就在它的上边,那这个东西是啥?下划线method的能看懂不?既然是个常量,那说明这就是一个固定的值,能听懂不好,然后咱们再往下看,来大家看啊。
12:07
好,然后大家看,那我们当前如果说咱们满足了这个条件,那我们是不是紧接着来获取它的请求参数,好然后获取请求参数的时候,咱们获取的是哪个请求的请求参数啊,是不是应该是咱们的下划线method的这个请求参数的值对不对,对吧?好,然后大家看,当获取它的值之后啊,然后大家再看,在这儿有一个叫string us这个东西大家见过没啊。这个东西大家见过没有?好来大家看一下啊好,这个东西所在的包是咱们的YouTube里边的,对不对,对吧,那既然叫YouTube,那说明这是一个工具类,对不对,对吧?好,然后大家看这个方法是什么意思,叫has Les has Les是不是应该表示的是。
13:00
是不是应该表示的是是否有长度,大家说对不对,对吧?那不就是说它是否为空吗?是不是啊,如果说它如果说它有长度,也就是不为空的话,大家看下面是不是还有一段代码对不对?来看一下,首先干嘛?Para value是不是就是咱们下划线method请求参数的值对不对?然后two upper kiss大家见过没?在字符串中是不是有这样的一个方法叫to kiss,将字符串中所有的字母转为大写字母,见过没有?还有一个叫to lower kiss,将它转换为小写字母,见过没有?见过吧?所以说这一句话,是不是应该将咱们下划线method的值给转换为大写是不是对吧?好,转换为大写之后,大家再来看看这个地方叫lo methods这个东西应该也是一个常量吧,是不是对吧,然后content。
14:01
是不是应该是包含的意思,对不对,对吧?好,大家看这个method是啥,是不是就是咱们的下划线method的的值转换为大写的结果,对不对,对吧?好,然后这个时候他就来判断了,我们当前的这个东西中是否包含了我们的method的值,来同学们,咱们往下看,看看这个东西是什么啊。来点击之后大家看。好,然后大家来看这个东西是一个list的集合,对不对,那list的集合里面是不是就有con方法,是不是大家看一下,你看它长什么样啊来。看好了,大家看好这个地方,这个是S的什么on。On morefiable,然后list是吧,好,然后其实就是这个意思啊,然后咱们当前呢,然后就是把我们的这三个值,然后给放到了我们当前的这个例子的集合中,OK吧,也就是我们当前咱们的这个例子的集合里面,其实放的就是这三个数据,能听懂吧,好,然后大家看,首先这个东西呢,然后是一个类型,什么类型呢?点开之后是个H值,看到了没看到了吧?Http method的一共是不是有这几个值呀?那我们当前咱们的这个集合中都包含了几个,一个是put,一个是delete,一个是pat OK吧,那点name来获取的是谁?点获取的是我们当前咱们这个枚举里面,然后某一个这个枚举里面,然后某一个数据的名字,就比如说。
15:55
很简单,我们当前咱们这是不是叫put塔,那它的name就是put塔,能听懂吧,如果这是delete,它的name就叫比delete听懂吧,好OK,所以说我们当前咱们的这个集合中一共有几个值啊,一共有几个值啊,三个,一个是put,一个是delete,还有一个是at OK吧,好OK,来,咱们再往下看,那所以大家想我们在这儿咱们所传过来的下划线method的这个请求参数的值也只能写几个值,三个值一个是put,一个是比delete,还有一个是patch OK吧,那如果咱们写的这个值是这三个值中的其中一个,那下面大家再看,你看它在这干了点啥?
16:45
它在这为我们当前的这个对象是不是赋了一个值啊,对不对,赋了一个什么值呢?来通过我们当前的http method request rapper,是不是来创建了一个请求对象,对不对,对吧,那这个东西在哪呢。
17:08
这怎么一直响呢?好的,稍等啊,换一下电池。嗯。啊就先这啊好大家来看一下啊啊。大家来看在这儿它干嘛了?如果说我们当前咱们传过来的下划线method的值怎么了?是不是put或delete或catch对不对,对吧?然后他是不是应该就会去创建一个新的对象,看到了没?看到了吧?咱们先不看这个东西,咱们就看这大家会发现它在放行的时候咋了,它在放行的时候是不是把咱们新创建的这个请求对象,是不是来作为了一个我们原来所原来我们所过滤拦截的这个对象,然后进行了放行,对不对,对吧?所以说大家想本身咱们放行是不是应该是将这个request作为这个方法的参数传过去的,对不对,但是它在这个地方是不是就传进去了一个它自己所创建的请求对象能看懂不好,OK,那这个对象里面到底干了点啥呢?大家自己想想,大家能发散一下思维,大家知道他都干了点啥不?
18:42
啊,大家想想我们现在其实我们从这咱们就看能看出来啊,然后我们所传过来的下划线method的这个值大写的结果是不是put d比例,还有这个派对不对,对吧?好,那所以说它是不是会将我们当前这个request的请求的请求方式由post替换成我们这个下划线method的值大写的结果,大家说是不是是吧,那这个时候当我们将这个新的请求进行了放行,那我们在之后咱们所获得的这个请求方式是不是都是已经被替换掉的请求方式,大家说对不对,是不是,OK,咱们来看它怎么写的啊来这个方法是一个构造器,然后将我们当前的请求作为参数,还有我们的这个method叫method是啥?下划线method的值转换为大写的结果,对不对。
19:42
对吧,好,然后咱们来看一下,其实就在这呢,啊,看到了没看到了吧,就在这个地方呢,啊,然后继承了http request rapper,他都干了点啥呢,看好。这个地方构造器是不是调用了它对不对,对吧,然后呢,通过咱们当前这个对象。
20:06
当前的请求对象。作为参数去调用了它负类的有参构造能看懂吧?好,然后在这儿呢,它又干了一件事情,把我们当前构造器中的这个method,大家知道这个method是谁,不就是大写的结果put delete或pat能听懂不好,然后把这个method的值赋值给了谁,赋值给了我们当前的成员变量method能看懂,然后再往下对我们当前咱们这个request对象它的get method的方法进行了重写,将谁进行了返回,咱们的这个method进行了返回,能看懂不?这个method是谁?那不就是他吗?是不是?那他是谁?那不就是吗?大家说对不对?那它又是谁?那不在这儿呢吗?那不就是它,那不就是它,那不就是我们当前下划线method的值转换为大写。
21:09
的结果能看懂不?那所以说当我们在这儿创建了一个新的请求对象,那从此之后,咱们放行之后,我们以后用的request是不是都变成它了呀,是不是啊,那所以当我们以后再获取请求方式的时候,是不是应该获取的统一都是这个method,也就是咱们这个地方的这个method,能看懂吧,能看懂吧,OK。妙不妙,相当的妙,对不对,对吧,反正咱们是想不出来对不对,但是呢,其实也有好处,咱们看到的源码多了,其实你咱们有的时候咱们照葫芦画瓢,咱们也能实现一些功能,是不是是吧,好啊,像我不知道大家有没有写过这个http future大家写过没有。就过滤器嘛,你好好听啊,我说的是http filter,我说的可不是http solve啊,Http filter,咱们的serve是不是应该有一些扩展的实现类,你像咱们的generate serve http solve是不是啊,对吧?但是咱们的filter有没有啊,没有filter就只有这一个接口,知道吧,知道吧,所以说那咱们再去创建一个过滤器的时候,咱们是不是要去重写其中所有的抽像方法,但是大家都知道,我们真正需要去重写的就只有谁呀,Do filter对不对,对吧?所以说咱们就可以怎么办照葫芦画瓢了呀,咱们的gene就是solve的一个实现类,叫generate solve里面是怎么做的,把咱们不常用的方法全部进行了重写,而这些重写的方法里面什么东西都没有写能听懂,不,然后就只把我们真正需要重写的方法service来设置成了抽象方法。能听。
23:00
懂吧,所以说咱们以后还需不需要干嘛了,实现solve接口了,不需要,我们只需要去继承generatender service就行,咱们只需要重写service就可以,能听懂吧,是不是简单多了呀,是不是?没学过。那你肯定学过httv solve吧?Httv solve又继承了generate solvele,知道吧?然后在里面都干了点啥?里面都干了点什么?Http solve里面又干了点什么啊,不可描述。不可描述的事情,是不是干了点什么啊?不知道是吧?嗯,行,大家有时间的话可以下去看一下啊,他做的事情啊,就是在咱们的service方法里边,然后根据咱们当前的请求方式分别去调用了不同的方法,因为大家都知道,当我们去创建一个solve,去继承http solve的时候,咱们是不是需要去重写do get和do post,对不对,对吧?然后这个为什么会重写它呢?因为在咱们的httb solve中,然后对service方法进行了重写,然后来获取了我们当前请求的请求方式,根据请求方式的不同去调用了不同的方法,比如说然后咱们的请求方式是get,就调用do get方法,如果说请求方式是post,就调用do post方法,而我们当时咱们只能发送get跟post,所以说大家就只需要重写两个方法,一个读get,一个读post就行,知道吧,这样的啊。
24:43
好来咱们就说到这了呢,那咱们我是想跟大家说的是啥啊,就是你看咱们知道了generate solve里面是怎么去对吧,重写这个solve中的方法的,那其实咱们的filter没有扩展的实现类,那咱们就可以给它创建一个呀,对吧,叫http filter咱们自己写一个,然后呢,去重写它的三个方法,咱们只需要去重写初始化和销毁,因为这俩方法咱们基本上用不上,是不是这些重写的方法里面咱们需要写任何的代码吗?不需要,咱们只需要将咱们真正需要重写的do filter方法设置为一个抽象方法就行,知道吧,那咱们以后是不是就不需要直接去实现filter接口了,咱们只需要去继承HTTP,那我们就只需要来重写do filter方法,能听懂吗?这样的,所以说啊,你看这不就是一个思想对不对,我们当前咱们的请求,如果说他达不到咱们的要求,咱们是不是也可以按照。
25:44
自己的想法去定制一个,然后通过过滤器把它给换掉,大家说是不是啊。是不是是吧,想叫什么。这个思想叫偷梁换柱,好行啊好,那这个大家都能看懂吧,都能看懂吧,啊行,那所以说那咱们现在咱们源码已经看了,来我问大家,大家说我现在要想来发送一个delete或put请求,大家说咱们得满足几个条件。
26:16
两个条件,第一个条件看这儿请求方式,原本的请求方式必须为post。第二个条件咱们必须得传过来一个请求参数叫下划线method,因为在这儿判断了它是否为空啊,是不是如果为空还会执行不会不会,当咱们满足了这两个条件之后,大家说最终我们的请求方式是什么?就是下划线method的值转换为大写的结果,大家说是不是啊,是不是啊,OK啊。
我来说两句