00:00
好,下边呢,我们就通过代码来实现。这个中文乱码问题的解决。当然了,那我们第一步做什么?第一步我们就要先定义TP request它的。这个。呃,装饰者,或者确切的说,应该是这个接口的实现类的装饰者。那也就是说我们需要定一个类,这个类让它实现什么实现IP request麻烦呢?不过不用担心。我们看at request这个接口吧,我们查看一下它的继承实现关系,这里边有一个有一个类叫做http request,这么熟悉呢,这是什么?
01:01
我们看一下。To provide a convenient。Implement implementation of the request interface提供了一个方便的实现什么呢?这个接口是不是这个接口的一个方便的实现?That can be s classused。By developers wish to adapt the request to,什么意思呢?诶,他能够通过什么,我们开发者的子类。通过我们开发者的子类去去使用它啊。开发者希望什么呢?Wish to adapt希望。去适应请求。
02:03
个的请求,也就是说他这句话的意思是他提供了一个很方便的实现,通过子类,你可以通过子类开发者的子类,谁的子类,这个类的子类去适应你的自己的那个请求。This class implements the rapper or?Pattern这个类实现了什么包装或者装饰者设计模式?对不对?Methods default to call calling方法默认被调用through通过什么to the request object被包装的request对象,这就是我们那个装饰者类的鸡肋。
03:07
它就是那个鸡肋,你忘了我们说了吗?对装饰者真正的使用它那个高级模式是什么?我们这个鸡肋,装饰者类这个鸡肋并不去真正的增强。具体的增强有具体的装饰者。也就是那个鸡类的子类。来实现。那也就是说我们要定义。Request这个实现类的装饰者。那么只需要继承字定一个类,继承字这个类就OK了。剩下的就是重写,剩下的就是重写就行了,OK了,现在。开工。
04:03
来,先改包啊。那就忘了。Decs是吧,我们这个叫request。这样吧,我们叫custom,我们自定义的是吧,Custom request。我就叫custom request。继承http request。Rapper。一个吧。哎,这这是response啊,这是request是吧。OK。呀,他这又怎么了,这个又怎么了。
05:00
你注意。记不记得我们讲了这个子类要求。这个装饰者子类要求什么,必须要有什么,记不记得了?看一下我们看一下这这个要求。要什么?必须要有代餐构造器?必须要有代餐构造器,继承字装饰者积累我们继承了它,必须要有代餐构造器,你看看是不是?所以我们这儿。代餐够到气。来CTRL1看他自己怎么实现,看到没。你看到没,就这样。这就OK了。这就OK了。
06:00
那这个代餐构造器现在有了,我现在要做什么了?你注意啊,我们现在的目的是什么?这样先加个注释定义。具体高。这个这个叫什么庄。请求的。啊,装饰者类。那这个里边。我们要做什么工作,做这个工作看好我们要重写那个get。这个其实这四个方法和和这个。参数相关的四个方法我们都需要重写,这样都写一下,Get parameter。
07:04
Get。Parameter。Parameter names这四个我们都重写。这四个我们都重写啊。嗯,这样把它放前边。把它放前面这样啊,哪个顺序无所谓了啊,好一个一个来。先来说他先来说他这个比较复杂啊,这个稍微有点难懂,我们这个想干嘛呢?你注意他是不是获取ter map呀,这个super getter map获取的是谁,他肯定是获取的是我们。
08:01
诶,系统里边的那个排名麦对不对,是原始的,获取的是最原始的,那我现在要做什么,我现在要自己定一个卖。我这个叫new麦,好吧,我new一个。哈西。卖吧。将来我返回的是谁?返回的是这个new map。这个我得留着它,它用留着用啊,这个是什么?原始的,最原始的那个是吧,Original。Map,原始的map是吧,当然我返回返回的谁,我返回的是new map,也就是说我现在这个啊,要做的工作,Get meter,要完成什么工作,要完成什么工作。
09:03
要将。原始的map替换为。自定义的map。为什么原始的map中的数据?是乱码。那么自定义的map中的数据。来自于哪儿啊,原始map站。是由什么原始map中的数据?解决。乱码问题后再放入的。
10:04
诶,这是我们的整体这个思路啊。好。最后它返回的是谁,也就是将来你再获取,获取到的就是新的map了。好。家注释啊,我们写的详细一些。这个是新建一个map。将来其中的数据是解决过乱码的,将来是解决过乱码的啊。也是将来用户获取到的map。也是这个。Map。好。
11:01
这个呢?这是获取。原始的map,其中的数据是包含乱码的啊,它是包含乱码的,好了,下边要做什么了,下边其实工作工作很简单,就是将。这个。原始map。中的数据解决乱码问题后。写入到新的map,这就是我们下边要做的工作,那好了。原始map里边数据怎么样给他解决乱码呢?你肯定得一个一个来呀,他是个map呀,所以我们要做的工作首先是便利。
12:06
便利,原始map。便利原始麦克,那好便利吧,便利for,我用增强for循环啊,这是K。便利谁?原始的呀,Original map,你不能贬低他呀,他的什么?Key set。对不对,我现在便利他。一个一个来,我一个解决一个,我存一个。UK的value怎么获取啊?啊,Map里边有K了了什么获去那好很好说呀,No map.get。
13:06
他获取到了什么?是value吗?是value,是个数组,不要忘了是values。这是数组。那我们的乱码在哪儿呢?乱码,肯定是values里边有乱码呀。如果它含有中文,肯定都是乱码,所以怎么办,下一步。加啊加注释,每一步都加上注释啊,我们加的是行级注释,就是每一行都加个注释,就比较细的啊啊,这是获取当前便利便利。啊的。所有值。
14:05
那后边呢,这个要做什么。对每一个值。进行中文乱码问题解决。这样。遍历values数组,对每一个值进行中文乱码问题解决。For,那这肯定就是放了对吧?就他。来吧,解决这个怎么解决。这个应该不用多说吧,解决这个中文乱码啊,Get get提交的中文乱码,或者说这是万能的解决方案。
15:05
两步。一个打伞,一个组装,如果你不是很清楚。那么你回过头再去。学习一下,呃,JSP编程。专题里边有这一部分的内容啊,那这里边很简单,固定的两步,一个是打散,诶打伞,一个是组装,组装这个打伞是按什么打,是当你。按照字符当前的编码。进行打伞。
16:05
当前的编码是什么?ISO8859杠幺啊。因为我们说了客户端给我们过来是什么是字符序列。然后服务器拿到以后,按照它默认的编码方案进行解码。那在默认变化方案是什么?Is so,八杠幺嘛,所以我们现在。要重新对它进行编码,那个是解码,给他解码,一解码,解码成乱码了,我们现在要把那个乱码再给他进行编码,这个打散的过程啊,是编码的过程。G。进行编码。如果你不列这个编码解码啊,你就不要管它,你就知道这个打伞组装就OK了,好。那怎么打散,打散呢,一个一个的字节,那就是Y64。
17:06
哎。点gets按什么?按O8859杠幺。按他百次。有一常啊。有异常,我们给它拆开去,这个拆开去,为了看起来好看一些啊,我就把这个佛整个都进行。这样。好,我们都给它拆开起来,这样代码看着好看一些啊,OK。打散以后组装是组装,是怎么组装的?
18:02
这是按照。按照目标。编码。啊进行组装,这个组装是什么机进行解码,这是解码的过程。怎么做?Values。啊,Value I,我new strings utf杠。OK了,乱码问题解决了,你注意现在这个乱码问题就已经解决了,解决了怎么办?有key,有value,我现在就可以把它放到我的新map里边了,将解决了乱码问题的。
19:12
数据放入到新的map。New map点儿。Put key就是当前这个key啊,完了呢。Value。应该是在这呢啊。应该在这儿。这通过这个for循环是把每一个都解决了,每一个都解决,最后把这个Y6斯这个数组给它放进去。OK了。最后这加个注释,返回新创建的map。OK了,那么我们的这个get map。
20:05
就重写过了。我们已经将。原始map替换为了新的map,狸猫换太子,第一次狸猫换太子在这里已经完成。OK,再往下这就简单了啊,再往下就简单了,你看着这儿不是要get parameter names吗?不是要他所有的key呢。说的K,你从哪儿来呀?其实所有的K,这个和这个里边的是一模一样的,K都是一样的,但是为了统一啊,我这就直接写成这个了,你看this。而不是super,是this this点。Get per meter。哎,不是,哎,真不是,这个,他怎么get帕达name死了,我们现在要的不是他啊,要谁呢?你这样,我给这儿写了。
21:08
我先获取到这个map this.get parameter map。这是获取到map对吧,这获取到这个map,直接写map吧,这样简单一些,然后我要这个map的所有的key。你注意啊,如果我这直接写map.key set。似乎不行,他这样是不行的。人要的是innuration,枚举你这是个set。那么怎么样能把这个set变成呢?这里面啊,我们。
22:02
需要通过。一个。Victor。需要通过victor,我们需需要把这个set给它强转成一个victor。我们比如叫K。Victor。哎,紧接着这个key你看看。他那是不是有一个。Elements返回,支持inration。对不对啊,他是这样通过这种方式啊嗯。
23:05
这这个这个就不用加注释了啊,这个就这这样吧,加上注释吧,这是获取什么,获取新的,或者叫自定义的。Parater。这是将什么set转换为?这个是。家。Victor转换为。
24:02
再看这个get parameter values。Get parameter values获取指定的是不是,那这个就好说了,这个好说啊。怎么好说呢?当然,我们首先还得获取到自定义的。这个map。对吧,紧接着。map.get。Name。那它返回去是什么?这不就是这个数组吗,所以直接把它。放这儿。OK了,这搞定了。再看他。这个更简单了。这个更简单,我就获取什么。
25:01
就直接写了啊。this.get perter。Values,这儿放个name。零没问题吧,这个方法和这个方法之间的关系不用多说吧。OK了,这样的话,我们自定义的这个请求,或者说我们请求的这个具体的装饰展类就完成了。
我来说两句