00:00
好,来思考这个问题。你想啊,同学们啊,说明啊,我们现在啊,来这个data塔,它百分百点,它说100%是处的对不对,他100%出往前推啊,咱们是不是相当于最终这个踹里边执行的这个response是true这一句给他了,是这样吗?好,继续往前推,这行如果能执行,说明什么呢?哎,是不是说明这个异常干嘛呢,没有给我跳到开块啊,它是不是继续向下执行才会才能执行到这一行,但是我们从异常信息来看,这个异常确确实实是有的,对不对,而且异常信息是正确的,是这样吗?那为什么呢?问题在这啊,同学注意看啊,这是我们第一次接触这种问题啊,请注意看这个us对象,我们来分析啊,这个对象是张三形态的还是李四形态?
01:05
他是不是李四形态呢?李四形态掉这个log in是我们刚才写的这个log in吗。不是吧,你李四掉log in可不是我这个log in是是不是我张三ipl的这个log in呢?但是现在你可用的是us对象是李四形态的呀。李四形态掉老70走谁?这个咱们以前分析过无数次了,同学们是不是应该走咱们那个动态代理那个模板的哪个方法,In handle的这个in work方法,只有走它才能执行事务,对不对?也就说大家注意看啊,往下走走走,你看啊,李四的第28行是不是张三执行了这个劳回呢?有李四掉张三是这样吗?但是你注意看啊,同学们啊,张三是不是会给我们抛出的是这个异常,我刚才是看到错误消息了,但是你看它是抛到控制器当中了吗。
02:05
他说跑到李四,李四里边给你来个什么呢?李四给你来个什么?拆开去啊,同学们,是不是李四给你处理了异常,是不是被李四处理完了?好,我们通过一张图来观察一下啊,这个问题非常的重要啊。行啊,咱们小胖反应的相当快了啊,来咱们来看啊,同学们啊,这个是我们的这个控制器对不对啊,这个是一个controller啊。是不是可出了,好,我们再来一个业务层啊业务层。啊,这个业务层咱们来一个叫做U。Service这个是不是NPL啊。对吧,其实我们预想的是这样,这个controller是不是调一个这个ipl的这个log in方法对不对,它是不是死肉出来一个异常往上跑啊对不对?这个异常咱们是不是应该从这个ipl账号密码不正确的这个异常往上抛,然后他拿到了这个球之后执行开水块,是这样吗?但是这是我们的设想,我们的设计是这样吗?但实际上他不是这么玩的呀。
03:29
实际上是怎么玩的?实际上咱们是不是中间还得隔了一个谁呀,同学们,哎,隔了个李四呢,对不对,你真正掉的其实是李四这个形态呢?是这样吧,好,User service to是不是咱们调的是李四形态的对不对?好,只不过这个李四我们没有,是程序在执行的过程中动态给我生成的这个对象,它是动态代理嘛,对不对?好,咱们来看啊,Controller用的是理事对象的这个形态,其实调是理事对象调这个logo音,他走in workke对不对?他在执行invoke的时候,执行in work的时候,执行到28行的时候,master.in work才是真正执行张三的这个老音,张三不是controller调的,而是李四调的,是这样吗?
04:18
好,那张三啊,现在来出出毛病了,账号密码不正确,这个异常他会先抛给谁啊?哎,他先抛给李四,那李四拿到了这个异常之后,他给你干啥了,拆开就给你处理完了,异常这个东西就是这样啊,你拆开就处理完之后,是不是相当于。就像啥呢,就像这件事儿,咱们就了了了了之后,咱们是不是程序是不是继续往下执行了,你车撞了俩人私了了。就相当于什么呢?我这个controller啊,让谁呢,Controller,我让这个user service pro去办事,是这样吧,他办事呢,他让他的小弟再去办事,是这样吗?他这个小弟捅了娄子怎么样。
05:01
是不是被他摆平了,但是他知道不不知道在这一层已经毁尸灭迹了,OK吧,所以说他不知道呢,他以为什么呢?注意看CTRL,他以为啊,你掉了规定很顺利呢,是这样吧,所以说啊,我程序继续往下执行了,其实他不知道的是我们在真正干这件事的时候是出异常的,但是异常被处理完了,是这样吗?所以说现在我想要的是什么呢?这个异常啊,李四啊是处理啊,这个是没有问题的,OK吧,好,张三给李四,李四是处理的,因为李四的这个拆开去结构你不能破坏掉,这是肯定的,对不对?好,那么我们这个李四把这个异常在处理完毕之后啊,咱们来看啊,处理完毕之后是不是再往上跑就行了。是这样吗?好,所以说啊,这一行看去啊,哎,哪去了?这行看下去,李四在处理完了异常之后,李四得走看去处理异常对不对啊,处理完异常之后,咱们得加这么一句啊,Throw一点,Get Co再往上跑,老师,这是什么跑法?我再随便抛一个异常不行吗?比如说我要抛一个我不需要拆开去处理的异常,我抛一个new runtime exception行不行?可以不同学们。
06:25
可以吗?你看这么抛是不是大家注意啊,如果你这么这么再继续使用lo往上抛的话,我的上一层是不是肯定会拿到这个一层并跳到开气块,但是你1.getmessage,你是不是不知道你拿到的是什么异常啊?哎,所以说啊,我在这里边这句话是什么作用啊同学们。你处理的是什么异常,你继续往上跑的就什么异常,你处理的是log in这个异常,异常信息是账号密码不正确,那我继续往上跑的就是账号密码不正确的异常,你处理的是账号失效的异常,我往上抛的同样是账号失效的异常,能理解吧?所以说这一句啊,必须得加OK吧?好,接下来我们再来看这句啊,我给他打开封印了啊,好,我们继续来看一看,好。
07:13
啊,从执行这个程序,执行这个流程来看,其实没有问题了啊,但是还有一丁丁点我们需要处理的小问题啊,这就简单了啊。来,我刷一下啊,同学们来。账号密码不正确的啊,来登录。这回好使了吧?哎,这是不是我们想要的结果啊,啊,只是什么呢?这个小问题是什么呀?啊,操作乱码。咱们在程序开发当中啊,都哪块需要把这个乱码处理了。一个是什么呢?你在提交什么form表单,做post请求参数的时候,是不是一定会出现中文的火星文呢?
08:01
有问题吗?你get请求,其实他们还给你处理啊,你要是post请求你给传,你给这个控制器啊,传参数request getter,如果是个中文的话,是不是一定是火星文呢。一定是老马对不对,再有就是我们现在所看到的这个是什么呢。哎,是不是咱们做响应流的时候,哎,阿贾克斯,咱们做printw write响应流的时候,响应的是中文呢?那这俩东西咱们都得处理对不对?但还是那句话,你每一次处理都很麻烦,我们想到使用什么技术?封装不是吧,也就是说我真正啊,大家注意啊,真正在处理这个web端这种程序的时候,咱们是不是得想到使用web端的这个组件,咱们除了使用store之外,是不是还学习过。Filter和listener web3大组件吗?Controller filter listener过滤器和监听器吗?我们是不是加一个过滤器,加一张滤网就行了,把你这个乱码是不是得过滤一下就可以了。
09:09
不是很熟是吧,行,来看老师的啊,不熟没事啊,不熟保持教室安静,听老师的啊,别议论啊,听我的好吧,啊来。我现在啊,比如说来一个左侧来一个浏览器行吧,右侧来一个服务器啊,服务器里边我来一些个后端的这个so资源可以吧。好,我来一个。SRVLT1。SNE2,然后s net3行吧,我现在浏览器为这个服务器发出一个请求,是不是由SNE来处理我后端的这个请求啊。肯定先到so so that里边是do get to post或者service,这个没错吧,但是啊,我们现在啊,身处中国,将来90%的情况下,开发的都是什么呢?中文相关的系统,那只要是中文,咱们就避免不了这个乱码相关的问题,对不对?密码啊,这个这个这个啊,乱码相关的问题,那么这个乱码大家注意啊,乱码咱们是不是刚才分析了post请求中文参数以及响应中文内容,咱们是不是得处理两行信息啊?
10:25
对吧,好一行负责处理什么呢?Post请求通参数一行负责处理什么响应流是这样吗?诶处理完之后拿到的参数也是正常的中文了,做出的响应是不是也是中文了,但是在我在访问这个SO2代二的时候呢,同学们。你在SO2里边是不是还得干嘛呀,处理这两行啊,我在访问SO3的时候呢。是不是还得处理这号?
11:01
是啊。啊,所以说咱们才会有这个。过滤器的呈现呢?过滤器啊,大家注意看啊,现在就像是一张滤网一样啊,注意看啊。来,这是咱们的一个filter啊。Filter,这个filter啊,是专门用来过滤这个乱码的,OK吧,那大家注意啊,刚才我们在serve light里边处理乱码那两行,我们现在是不是可以写在。这个里边。看到没好,当我现在从浏览器发一个请求到服务器的时候,大家注意看,从图来看,注意看啊,从图来看,咱们是不是先经过过滤器啊,先经过过滤器的话,大家注意看是不是乱码的问题,是不是解决了,解决到so里边还用处理不?不用了,那做出响应的时候,咱们是不是还得经过这个过滤器啊,所以说不论是请求相关的乱码,还是响应相关的乱码,咱们是不是都经过过滤器解决就可以了,那如果访问SOL2呢?你想一想,SORL2是不是也不用处理啊,都得先经过过滤器,访问SORL3呢,也得先经过过滤器,是这样吗?
12:14
但是我处理乱码那两行代码写了几遍呢?就写了一遍。是这样吗?好行,接下来咱们把这个过滤器给它加上啊。
我来说两句