00:00
好,那咱们刚才是不是出现了这个乱码问题啊,对吧?那这个乱码问题该怎么解决啊,大家知道为什么会出现乱码呢?就是咱们的字符编码不一致,对不对,对吧?好,咱们原来大家出现乱码的时候是怎么解决的,request.set including u TF杠八是不是是吧?好OK,那我们现在呢,然后咱们要想来处理这个。乱码问题,有request对象吗?有没有啊,没有再说了,你可以有,有也没有用啊,有也没有用啊,大家知不知道咱们的这个在我们去设置这个编码的时候啊,然后呢,就在设置我们的请求的请求对象的编码的时候,它有一个前提条件,大家知道是什么吗?就是如果说在这之前你已经获取了咱们的某一个请求参数,然后咱们所设置的编码,它是没有任何效果的。
01:04
这个大家知道吧,知道吧,那我相信大家在上一个阶段,大家在写solve的时候,大家应该都遇到过这个问题,如果你在of里面,然后已经对我们当前的request设置了编码好,然后那我们再通过咱们的base访问到我们具体处理请求的方法的时候,就不会再出现乱码问题了,对不对?但是如果说你在base solve里面,你没有设置编码,而我们把咱们当前的这个设置编码的这个这一行代码呀,然后把它放在了咱们具体处理请求的方法中来设置,是没有任何效果的,见过没有啊,大家都是放在base solve light里面是不是?当然那你没用过,那就给大家说一下呗,是吧,大家注意是没有任何效果的啊,你要是不信了,你就回去试一下,我建议大家还是信吧,行不行就不用试了,OK吧,好啊好,然后大家注意。
02:04
如果说我们在此之前,就是我们设置编码之前,你已经获取了某个请求参数,那我们设置编码还有用吗?没有任何作用,能听懂不啊,没有任何作用啊好,跟大家说这个是因为啊,咱们后边要用啊,所以说呢,先给大家提一嘴啊,好好,那我们下面咱们来看,那我们的这个在获取请求参数的时候出现的乱码问题啊,然后呢,其实有两种,一种是get请求的乱码,一种是post请求的乱码,这个大家听说过没听说过吧?咱们现在如果我把我的请求方式设置成了get,大家说还会有问题吗?啊,如果说我在这把它设置为get的话,咱们还会出现乱码问题吗?不会会不会不会不会,为啥不会啊。啊,然后只有post才会出现乱码啊好来下边大家来看啊刷新,然后咱们这是ain,或者说咱们在这直接来写个张三可以吧,123男23邮箱点击提交大家看啊看是不是拼接上来了,嗯。
03:19
然后大家看一下我们最终获取的数据,有乱码吗?有没有知道为啥吗?啊,大家注意啊,首先呢,咱们get请求的乱码,其实大家应该已经解决过了,这个问题大家应该怎么去解决呢?这个问题是我们的tomca造成的,也就是咱们的get请求的乱码,然后是由我们的tomcat造成的,我们要想来解决get请求的乱码,我们是需要去找到谁的,需要去找到我们当前tomcat的一个配置文件,叫做server的叉L,大家见过没有见过吧?然后咱们需要在咱们改端口号的地方,然后去加上一个属性叫u RA in coding等于UTF,杠八加过没有?
04:08
加过没有加过是吧,那咱们就找一下呗,来大家看好一盘,来找到咱们的server,然后server里面大家看这是不是有一个Tom k7对不对,然后呢,咱们进入之后呢,找到我们的com,然后。com里面在这就有一个server的查按,能看懂吧,然后点击右键,咱们来进行编辑,大家注意啊,咱们往下找,然后找到这个地方。这个东西见过没有见过,没有见过吧,大家注意没有这个属性,你的get也是乱码,知道吧,知道吧,好,然后当我们把这个东西给它加上之后,就可以来解决咱们get请求的乱码问题,所以说get请求的乱码是可以一次性解决的,能听懂吧,大家只要在这加上uicoding,等于uf杠八,那这个时候我们只要用到这个tomcad,那咱们的get请求将不会再出现乱码,能听懂不好,但是那咱们的request set characterco这一句话是针对于什么情况的乱码问题,Post请求的乱码问题,能听懂不好,OK啊,所以说当我们在这把它换成post的时候,是不是就出现乱码了呀?好啊,来下面,那我们在这咱们再来,咱们来重新部署一下,大家来看啊。
05:34
好,那该怎么解决,大家说,首先大家自己想想,Request咱们看不到对不对,虽然说咱们能够获取,但是你获取的没有用啊。大家想想dispat solve里面是不是必定干嘛了,必定来获取了跟咱们的必定获取了咱们的请求参数,那咱们也说了,如果我当前我已经获取了请求参数,那你再来设置它的编码还有用没有用了,还有用没有用了,没有用了,那所以大家想想你的dispatch solve获取请求参数在前,还是我们在这你写了一个request对象设置编码在前,应该是dispat solve获取请求参数在前,对不对,那你在这在设置咱们的这个这个请求的这个编码还有用没有用啊,没有用了啊,好这样的,那所以说咱们应该怎么解决呢?
06:28
大家说既然dispatch of letter里边它是不是已经获取了请求参数,而我们现在是不是要在它获取请求参数之前干什么,是不是来设置编码,那所以说有什么内容是要比咱们的solve v执行更早的呢?大家说服务器启动时啊。嗯,就是咱们的solve light,我说的意思是什么啊,大家想想,因为我们在注册solve light的时候,咱们是不是设置了一个load on start up呀,对不对?所以说这个solve是不是应该是在咱们的服务器启动时就加载的,对不对,对吧?好,然后那所以说呢,那可能它在里面已经获取了一些请求参数了,对不对?那我们是不是就要找到一种技术,或者说找到咱们服务器中的一个组件,然后它的一个执行时间是要比咱们的solvele它的执行时间更早一些的,能听懂吧,这样的啊,那大家想想咱们服务器中学过三大组件,监听器、过滤器、solve谁的加载时间最早,是不是咱们的contact listen对不对,对吧,Solve context的监听器,然后它的加载时间最早,然后再往下就是谁呀,就是咱们的过滤器filter对不对,最后才是solvele是不是啊好,但是咱们。
07:52
监听器的话,它是监听的作用,然后咱们监听context是不是就是用来监听solve context创建和销毁,所以说这俩方法都是只执行一次是不是啊对吧?好,然后那我们当前咱们的这个过滤器呢。
08:11
是不是只要咱们来设置了过滤路径,只要咱们当前所访问的请求地址满足过滤路径,是不是都会被过滤器进行过滤,对不对,对吧?好,那大家说咱们应该用谁啊,应该用过滤器对吧?然后通过过滤器是不是来设置我们当前的编码,然后这个时候,那每一次咱们发送请求是不是都要先经过过滤器的处理,处理完之后再交给第四马角so类处理,能听懂不?哎,好啊,行,当然这个过滤器咱们也不用写。为啥呢?因为咱们的spring VC已经为我们提供好了,知道不?哎,好,所以说既然已经提供好了,那我们要想让过滤器有作用,那我们就需要在外部的叉L中进行注册是不是,也就是配置是不是啊,好,把它给拿过来,然后放在我们的solvele之前,大家注意,我们让filter在solvele之前初始化,可不是因为你把它给写到这了嘛,是不是呀,不是,是因为在我们的,在咱们的tomcat里面,它最早初始化的就是监听器,再往下就是filter,再往下就是solve,也就是你就算把这个future给写到了咱们的solve之后,然后它也是要优先于solve初始化的,能听懂不?啊,行,来,在这咱们写一个future啊,然后future name一会再写,这个确实是有点长,大家看叫什么叫character including future能看懂吧,然后。
09:44
Watch the spring framework web filter是we部模块的过滤器提供的,OK吧,好,然后咱们复制过来,那咱们把future name是不是给它放到这儿是不是啊,然后再往下,然后future making character including,那大家说咱们需要对哪些请求处理啊?
10:02
所有请求吧,所有请求是不是都有可能是post的方式发送的,对不对,所以说在这直接一个杠芯完事,能看懂吧,好啊行,那咱们这样写它就有效果了吗?没有,大家注意这样写它也是没有效果的,跟咱们来大家看一眼啊,来我们现在咱们再来重新部署。还没改呢。啊,改了是吧,好,然后下面大家再来看刷新,然后这个是张三123南23邮箱123A的qq.com提交,然后咱们来拉到最后大家看一下,还是乱码,看到了没?嗯,看到了吧,所以说你设置完之后有用吗?没有用,为啥呀,那你大家想想,那你说咱们当咱们之前咱们设置编码,咱们是不是都得去设置一个具体的编码是utf杠八对不对,但是咱们的这个过滤器,大家想一下,你看在咱们的web的叉ML中,咱们有没有设置咱们要使用的编码呀,那他知道咱们要用UTF杠八吗?知道不知道,不知道吧,UTF杠八和咱们的GB2312,也就是GBK,然后这两种是可以来处理中文的,对不对,但是这个框架是中国人写的,不是,所以说他咋就知道咱们要来使用的是编码是什么呢,对不对,所以说呢,咱们把这个。
11:32
Charactercoding future,然后把它给打开,大家注意,这个就是咱们的源码,知道不知道不,这个东西就是我们的源码啊。首先大家看这个注解,咱们之前是不是就讲过,对不对,叫做none able,是可以为空还是不能为空,可以为空好,可以为空,这including是不是就是编码的意思呀?所以说大家注意我们当前咱们的这一个成员变量,它是可以为空的,那换句话来说,也就是说这个东西咱们可以不设置,如果你不设置,它用的就是默认的编码,知道不?那所以我们现在要想来自定义一个编码,那其实我们要操作的就是它OK吧,来,咱们再往下看看,这叫false request including叫false response including叫做强,这force应该是强制的意思吧。
12:25
是不是啊,是强制吗。啊,选这个force什么意思啊。武力暴力对吧?啊,强迫啊没问题啊好,然后大家来看,那这个就是强迫咱们当前请求的这个编码,强迫我们当前这个响应的编码是不是啊,来再往下看,大家看这是不是一个过滤器啊,对吧,你说这个东西咱们怎么看?啊,这过滤器啊,啊过滤器filter filter的话,咱们的过滤器中是不是一般都有三个方法,初始化执行过滤,还有销毁是不是好,首先初始化init没问题吧,销毁第然后我们当前咱们的这个执行过滤应该是读future能听懂不好,OK,那咱们现在要看谁呢?大家把咱们当前这个类里面的结构给打开,大家看一下啊,你看首先。
13:24
大家看一下这个地方有一个你看咱们的init方法,这里面好像是不是没有啊,这do filter方法咱们这里面是不是也是没有啊,对不对?好,哪有这叫do filter in the啊,这是do filter吗?是不是不是啊,咱们原生的过滤器里面,那不应该是谁,不应该是咱们的do filter方法才是过才是执行过滤的方法,对不对?那咱们到底应该看哪个呢啊?那要看哪个呢?既然这里面没有,那说明在哪呢?是不是应该在这里面,大家说是不是是因为一个过滤器要想实现功能,它就不可能没有这些方法,对不对。
14:06
点击之后这是什么方法,抽象方法咱们再打开,然后大家看看这这是不是有一个do filter。能看懂吧,然后这个do future呢,然后咱们找到之后,大家来看一下啊,也就是说我们当前这个do filter方法是不是会继承给我们当前咱们的谁呀,咱们的charactercoding filter对不对,对吧?所以说每当我们的这个过滤器在执行过滤的时候,咱们是不是都要先找到它,能听懂不来咱们往下走,你就看最后就行啊,来大家来看一下啊,来看这。看到了没?看到了没执行的是谁?Do filter in internal,其实跟大家刚才说的一样不一样,行,所以说咱们的do filter里面既然执行了这个方法,那所以我们在咱们的characterco filter里面,我们要想来找到执行过滤的方法,咱们应该来看的也是它能看懂不,能看懂不,这能听懂吧,好,然后下面咱们来找到它,其实啊,你要想找还有一个最简单的方法,知道是啥不看看这里面有没有future time,能听懂不?
15:19
看看这里面有没有filter Cha,什么叫filter Cha,过滤器链,咱们放行就是用的这个对象啊,是不是啊,所以说你的过滤器里面执行过滤的方法必定得有这个参数,没有这个参数它放不了,行啊,我们当前所有的请求到这儿是不是就结束了呀,对不对?能听懂吗?所以说你要想找执行过滤的方法,最简单的方式就是干嘛在这个地方找找有没有future,恰如果有,那这个方法八九不离十,就是执行过滤的方法,OK吧?啊,行,来咱们再往下大家看,首先在这先来获取了咱们的getcoding,其实这个encoding咱们点进去看一下,其实就是咱们当前看到的那个none able的那个成员变量coding能看懂不?好啊,行,咱们再来找到这个方法看好,如果它不等于空,然后怎么怎么怎么怎么地看好这里面的两句话。这大家都。
16:20
不认识吧?是不是,是吧,看看这句话是啥意思,设置请求的编码,这句话是什么意思?设置响应的编码,但是呢,这个东西如果不等于空才会执行,是不是,但是现在它等于空吗?等于空吗?啊,反正咱们也不知道它到底等不等于空,我就这样跟大家说,你不设置它,它就是空,知道吧?那怎么来设置呢?来找到我们的web的XL,大家记不记得,在future里面也是有in para的,记不记得,记得吧?好,在这儿咱们写的是encoco,就要跟我们刚才看到过滤器中的这个成员变量保持一致,能听懂不好,然后这个时候我们在这个地方所设置的编码就是付给我们当前这个成员变量因扣定的值,能听懂不好啊,所以说现在它还为空,不,不为空,不为空,下面大家再来看。
17:21
然后叫false requestcoding,知道这玩意儿是啥,不知道吧,咱们刚才看见的成员变量是不是有三个,哎,有印象吗?来咱们的成员变量,大家看这个这个这个正默认值是个啥?是个false是不是,那大家再来找到我们当前的这个方法,你看现在它不为空了,然后我们当前is这个方法返回的是不是这个成员变量的值呀,那但是它是不是应该是false呀,大家说对不对,对吧,那我们要想让它去执行的话,大家想这是货的关系,那货的关系咱们是不是只要保证这个和这个有一个,至少有一个为处,这个东西是不是就会执行,对不对,对吧,那它为false。
18:10
但是它会for什么?Request get record啥意思啊?获取编码我问大家你设置过没有?你在哪设置过,你设置过,你设置过吗?没有设置过呀,是吧,咱们没有设置过,那所以说你获取的是不是应该就是null啊,所以说这个条件视为true的能听懂吗?所以说我们当前在这里面就可以直接来设置编码,咱们需不需要把当前的这个成员变量设置为处不需要能听懂不,哎,不需要啊,好,然后但是这个如果大家要想来设置响应的编码,那你就必须要去设置false responsecoding,将它设置为true能听懂吧,因为这只有一个条件能看懂吧,好啊,行,这个是咱们的。
19:01
Including future,然后它的一个源码啊,其实还是很好理解的,OK吧,那很好理解的啊。行,那大家说我在外部的XL中,我只设置这一个,是不是只设置请求的编码对不对?如果我要想来设置响应的编码怎么写啊?大家再设置一个in para,然后叫什么啊?大家说是不是叫这个force in response including,然后将它的值来设置为T啊,有一处就完事了,能看懂吧?好,下面呢,我们在这咱们再来一个直行,大家来看啊,我把这个东西关掉了啊。啊。好,咱们来清空一下,然后下面大家看好。来刷新,然后这个还是张三123男,然后姓年龄23,邮箱123A的QQ账号来点击提交,大家来看一下张三来没问题吧,好啊,所以说在我们的SPAVC里面,我们要想来处理咱们的编码,然后大家就需要来配置一个这样的过滤器,这个过滤器还需要咱们自己写,不不需要,但是大家必须去指明,我们当前咱们的一个编码格式为UGF杠八,这个东西咱们可不可以不写啊,可以,因为这个是用来设置谁的响应的编码的,能听懂吗?但是建议大家呀,也把它加上,因为咱们响应浏览器的方式除了有咱们的转发重定向,是不是咱们还学习过response,的get right.right学过没有学过吧,响应浏览器数据啊,所以说建议大家把这个东西也给加上啊。
20:44
行。
我来说两句