00:00
再来下面一步,同学们。我们刚刚分析了。你每一个方法里面都有获取参数啊。我们需要把获取参数这样的事情啊,也要把它抽取出去。所以。我怎么做呢?你看啊。当前这边的获取参数。看好了。Request。Infid。String FM。In price。Intake。Stringmark。这些全部删掉。获取参数就没有了。它不需要获取参数。全部写在这儿了。我们只需要负责你的一个业务的一个处理,然后你做一个资源返回一个字符串就可以了。
01:02
所以这个资源这个跳转啊,这个注释留着吧,把这一行删掉。不删也行啊,留着吧,留着大家看一看啊。行,这是一个update的方法。AP的方法,我们来看一下AP的获取参数,是不是获取ID啊。那行,我们获取一下。这个参数不要。In。ID。那里这边有个ID,我这个就不要了吧。删掉。那这个判断也不需要用到string u,我们直接写iffid不等于no。因为你这是包装类型嘛。如果你不等了,这就要删掉。啊,直接就写成那样就可以了。啊,直接把它改掉。那这个里面有个request自用域是吧,同学们,哎,这这个没办法,还得把这个加进去http request。好,暂时加进去,让他不报错。好了,那这个方法我们就这样吧。这个exception。三。
02:01
上面这个方法。思路。山。不报错吧?再往下。Delete的这个方法需要获取ID。那行吧。拷贝。低的放到这。后面的不要。好,这个删掉。If ID不等于now。执行一下delete。然后。是不是啊?这样就写完了。添加方法以此类推也是一样的。我们写一下。FMM。In price。Inte AF。子俊,Remark。后面的都不要,全部都删掉。一直到这山。
03:01
是吧?删掉。好,你看这个代码多简洁。好,Index方法需要哪些参数呢?咱们也需要来看一下。这边有筛选啊,他要去获取筛选,获取筛选呢,需要这个request,那request留着吧。配鸡蛋吧,好像也是需要的。佩吉拉吧。这边有个叫or的值吧,request.get permit or的值。我们把or的值拿进来。Op。那这个这步是不是就不要了,删掉。那么这边要去判断,判断or的值。这个里面是不是有qvod呀。request.get permit key。哦,从情节里面去获取。
04:00
所以我们给他准备一个keyword。准备个Q的,你这边就不需要定义了,删掉。然后你这个word,我们request.get permit去获取也不需要。啊,也不需要了,就变成这样了。再往下走,我把这里面的这些注释全去掉了啊,反正之前代码里面都有行吗?同学们,这些注释加进去乱糟糟的啊。再来。这边是request.get page number行,我们把page number也加进去。In page number加进去,我只要看到request.get只要有这种操作的,我是不是都把它变成参数了?删掉。好,就这样子。那你看一下这边是什么,这边是不是说哦,如果你不为空,我再给他强转,那是不是整个这一坨都不要了。啊,都不要了,杀掉。再来。
05:00
你这个配件老板在这儿。啊传进来的在这个地方,所以这玩意儿删删掉。就是这样的。再来下面还有什么,下面好像没有了。删掉。啊,这个代码就变成这样了。那行啊。这个把它去掉。所以现在大家再来看的话。我们当前的这个flu ctrl里面代码应该是比较经典的。啊,应该是比较经典的。好,我们差不多80行,81行啊,就这样子。好,回到这边来。我们之前的这个controller。你看一下对吧,基本上是双倍,当然也有一些注释是吧,还有有些注释啊,行再来。那同学们这个改的是比是咱们改的是比较开心的,问题是你这边变成参数,谁给我传参数进来呢,是吧,同学们。
06:07
我们说过,我们把获取参数的这个过程统一的抽取到负类,也就是我们的Dis不叫负类啊,叫中央控制器里面去去操作。所以我们回到中央控制器,我这边写的株式,我写的二和三,稍等一下啊。二和三还少了一个第一步,看到了吧。哎,是不是啊,第一步获取参数,第二步方法调用,第三步视图处理,能听懂吗?它是这么一个过程。所以。这边的代码我都不动啊。这边的代码我都不动。这边是第二步,我们找到这个method。如果不等于now在这个里面。我要开始操作了啊,第一步。统一。获取请求参数。统一获取请求参数。
07:03
这个有一点小麻烦啊,咱们一起来思考一下怎么去统一的获取请求参数喽。帮我来看一下哦。请问一下。来看这个方法,这个delete的方法,我如果要获取参数,请问参数名叫什么?参数名是不是叫ID啊?刚才我们把那句话叫request.getd那句话删掉了吗?变成这个参数吗?是吧,同学们再来。Ad,这个方法要获取参数。获取哪几个?是不是price的mark?我也写四句话。Index是不是需要他,需要他需要他,当然这个可以拨过去是吧。再来。Ad的是不是要获取ID啊?阿,是不是要获取执行?哎,就这样子,所以我到底要获取哪些参数,是根据我们当前这个method的它的参数方法的参数签名来决定的。
08:03
所以回到这边来。这个method已经获取了。点。Get parameters。Get parameters。好,我写一下。获取。当前方法的参数数组。返回参数数组。好,帕特。Paraters这。获取到这个数组。那这个数字里面有什么东西呢?它是一个一个的对象。我们可以取一个看一下parameters中号,零点一下,看看点是不是有get。Get,是不是叫方法的这个这个这个叫参数的名字啊。行,咱们把这个get them来一起来看一下啊。
09:02
现在我先带着大家抵bug一起来看一下。我先把锻炼师的照。咱们一起来看一看啊。启动一下。没关系,现在肯定会报错的,还还没写完呢,行吗,同学们。来看一下。这个断点怎么变灰了?哦,怪不得呢,真是的。我还在考虑他怎么没在断点那边停住呢,是吧?我现在把它解开行吗?同学们把断点屏蔽,把它去掉,行报错,不管它肯定会报错的,还没写完呢啊,再来。再刷一次行吗?同学们敲回车刷一次。
10:04
哎,没经过断点啊。没经过断点不对。他。如果ma的不等呢,怎么卖的不等于让获取不到的呢?啊,为什么获取不到啊同学们。为什么获取不到?C b get class get method,还一定会有这个这个request对象吗?啊,一定会有吗?来,你看。这个update方法里面有request参数吗?没有吗?你这边参数名字明显不对了嘛,参数这个情况,每一个情况是不是都不一样。那你这个再去get method能获取到吗?获一般都是获取不到是吧,哪有那么凑巧,正好是正好是这个这个这个参数是吧,行那就没关系啊,咱们保守一点,我们获取所有的方法之前写过的啊。好,停一下啊,停掉。好,再来。
11:01
Controller并。Get class。点get message获取所有的吗?行吧,同学们,我们只根据方法名来做判断就行了啊。Method。这套。然后找一下呗,负循环。Method m或者叫method啊,Method冒号method。然后一。If。点equals method.get是不是等于方法名啊?等于方法名是不是就表示method找到了?这角是不是给去掉了。是吧,同学们,这个衣服也不要了,删。和if对应的是这个else。稍等啊删掉。把里面的这一坨到这儿剪切掉,放到这里面去,可以不放进去,然后这个else,咱们暂时先把它删掉。
12:00
啊,暂时可以先把它删掉。或者注释也行啊。这是小细节,咱们一会儿再来修改它,先不要干扰我们的主要的思路啊,再来回到这里面来。只要我这个if成立,就表示我找到了吗?现在我已经把它粘进来了。行,现在我再设个断点,大家再一起来看一看啊。怎么还报错了呢?哦,这个没有了山。好,再启动。好看一下啊。好了进来了是吧。呃,我想带着大家看的就是这个派伦密啊,打开看一下。往下走一步啊走一步。看一下帕打开。每一个对象。打开。
13:01
它的name叫二个零,在表示第一个参数,我们当前是index方法。大姐是这个能看到吗。当前这index,这个index里面有哪几个参数呢?In request是不是四个?看一下。Index方法string string in是吧,有四个。但是不幸的是什么?我们想获取方法名get获取方法名,他结果给我获取的是二个零。老师,你为什么要纠结这个二个零呢?为什么要纠结方法名呢?大家想一想,我刚刚的想法是什么?我如果能够获取到O,能够获取到keyword,是不是就直接get叫request.get keyord了,request.get page number。哎,是不是东军们。那现在你给我阿个零,我怎么就获取呢?我总不能写request.get2个零嘛,这明显不行啊。所以此处听好了,此处我需要获取方法的实际的参数名。
14:03
而不是二个零、二个一,二个二。以前我们是没办法实现,现在你看一下二个零,二个一,二个二,二个三,看到了吗。啊,他是这么写的,好,我们从JDK8开始,我们一个新特性。反射里面有个新特性,我们从JDK8开始呢。我们是可以获取到方法的这个行参的这个名称的。是可以获取到的,我们需要做个小的设置。点他。Project structure。好,再往下啊,不是糖。点file.setting。点了setting之后。我们往下走,下面一个叫build。Build当中有一个叫compile,叫编译器,编辑器,下面一个叫Java compile,看到吗?我们需要在这边加个参数。Perts叫gun parameters。
15:00
这个就表示这个就表示我们Java虚拟机啊,它在给我们编译的时候,他所得到的,他所得到的class文件里面就附带啊,里面就带了这个行参的名称了。好,这样的话,咱们class文件信息量会稍微大一点啊,文件体积会稍微大一点,但是我们这个名称它确实确实带过去。我这么一加之后,我是不是所有的class文件要重新编译啊。那我得把这个production这里面是不是全部是全部是Java类编译之后的,比如说打开它,你看一下。是不是全是class文件是吧?这些玩意儿要全部编,重新编一次啊,那算了吧,两个全是干掉算了。行吧,同学们。奥文尼尔,别删啊,把奥下面所有的全删掉。Build稍等一下啊,我选中这个model。选中幺六这个model build叫build model pro的幺六看到吗?你选中它,它就有这个菜单了,Build一下。1BUILD完之后,这个out里面就多一个。
16:00
正在编,稍等一下啊。打开打开有了吧。行artifect也重新编1BUILD artifect。幺六。Build。好,有了吧,行,现在再重新启动。好,来看我屏幕啊,帕米特往下走一步,好,帕米是不是走过去了,现在我们再来看一下打开。看到了吗?刚才是不是写的二个零二个一,二个二,二个三啊。现在你看这个方法的这个参数的,这个参数的实际的真实的名称就获取到了。
17:05
好,这一步搞定。停掉了啊。好,这是一个小插曲,不管它报错,不管他啊。再来。好,回到这边来。我们这个para。你有几个参数,我们就得准备一个object。Parameter values准备一个数组,同等容量的一个数组。这个数字用来存放参数的值吗?能听懂吗?用来存放参数的值。Parameter values。用来。参数的值。行吧。写一下啊。
18:00
负循环。Parameters点认识。帕尔米特。Terters parater。中华爱。拿到一个per,然后request.get把我们的perter。点get name是不放放进去啊。这样就能得到这个值。PT per value的一套。然后。放在这里面的中国话,I等于para value。把它放进去。我们这边不考虑负永框的情况,什么叫负选框?Name相同,你打到好几个勾,一提交的时候,他给我们返回的这个数组,这是另外一个API,我们给大家介绍啊,Get value。你看他返回的是不是一个数组啊。能听懂我说的是啥吗?我们在表单里面input type等于。切个box。
19:01
比如说name等于。啊,比如说等于football。啊,这个第一个。那我们是不是这个标签有多个。有多个标签。第二个叫。那你想一想。我们如果这两个复选框全部都打勾了,我一提交你这个name叫hobby,是不是就有多个值啊。多个知识编就用这个方法来结束行吗?同学们,咱们不考虑那么复杂啊。删掉。我们就考虑单个值的情况。我们这边仅仅是给大家去去做一个探索。啊,仅仅是做一个探索。我们碰到问题解决问题,碰到问题解决问题,我们第一步完成系统的功能,第二步我们就要开始思考我们的系统、我们的结构能够做哪些优化。啊,这是我们正常的一个路径,但是大家不要指望着我们能够把这个通用代码写的和和我们后面所学的框架那么完美。
20:01
这个第一不太现实。啊,第二个也没有必要,人家都已经写那么完美,直接用人家不就完了吗?干嘛要自己写一套呢?啊,但是这个过程核心的东西,这个过程咱们做一个探索是非常非常有必要的。好,这个p values中括号I我就把它放进去了,那经过这个for循环,我就可以获取所有的参数了。但是同学们。我这个参数里面是不是有可能会碰到这种像这种request。那请问这种你需要去get吗?是不是不需要,所以我们做个特殊值判断就好了。啊,做一个特殊值的判断,我们把这个P比name,把它拿出来剪切。子俊。Parameter name。我们可以做个判断。If。request.equals。帕尔米特。哦,如果你的排name如果等于它。
21:02
我们就把这玩意CTRLC等于request就行了。再来a if,多写几个吧,如果是response,假设我们也支持response啊,我就把它写全了吧,因为后面的项目确实是要的啊,当前库存系统是不需要的。好,S中国I。They respond。好,再来session。三线要用到点equals。Private name。如果是他values。中号I等于筛选哦,这边好像没有筛选是吧?request.get塞选行吧同学们。就这样。Request response,筛选我都已经搞定了。Else的情况。Else,接着下面这两行。扔进去。从请求中获取参数值。就这样的。好,再来。
22:00
那么经过这个过程,我就把参数就全部附好了,我们来试试,我在这边是个断点,我们来看一下它里面参数能不能全部附进去。然后呢,我们在invo进行调用的时候,你注意了不能穿一个request吧。是不是啊,你不可以传一个request,我们要传的是一个parameter values。是不是要穿的是他?十参谋。这里面存放的不都是13吗,全部存进去行。试试吧,启动一下。好,这是第一步啊,统一获取请求参数。如果参数名是。Request。Response session。稍等啊。诶,跑哪去了?好在这再选。
23:01
那么。那么就不是通过请求中获取参数的方式了。这边是从情节中获取参数值是吧,把它注释把它写一下啊好。断点已经跑到这儿了啊,我断点直接把它去掉了,我直接让他一口气跑到这儿。我现在发的请求是不是我发的应该是福禄点多啊。啊,还没出来呢是吧,同学们辅助点读,那么oper是不是默认是index?是不是?行执行一下,到这边来,咱们看一下帕特。打开。Now now request应该是对的。我第一次发请求的时候,那个叫oper的没有啊。没有吧?没有了吧,来看一下三个参数嘛。Or有吗?没有吧,Q5的有吗?配机那么有吗?都没有嘛,没有无所谓啊,没有就没有呗,好。再来。但是我们这个里面有一会会出一个,应该是会要出一个小的bug的啊,一会儿再说,一会儿我告诉大家啊。
24:06
出问题再说啊,再来。那么我要开始往下执行了。我把断点放在这啊,我直接放进来,这样能看到错误啊,直接放在这。所以呢,我直接点一下绿色的箭头,它就是不是就进来了,进来之后大家看一下啊,我们的配件拉码是不是等于呢。按道理来说,配奇,那么等于,那我们应该给它,给它附一个默认值一。是不是呀,要给他附个默认值一。这个他不一定能进来,这是if,但是我们else里面说少了一个逻辑,少了这一步逻辑啊。啊,少了这部逻辑,所以。在外面我们最好加一下。If page number等于得是不是?配那等于一没错吧,把它加一下啊,这样就没有问题了。呃,我先让他报错啊,先让他报错。报个错啊。
25:06
他会给我说,他会有个叫语法错误,应该是啊。嗯,这边还看不出来哦,这边还看不出来,在这这边报了个控制针。这行报了个控制针。啊,控制针就是因为空指针不对啊,这个控制针有问题啊。稍等一下啊,让我看一下。这一行。啊,他执行有问题啊,那应该还是这个浪的问题行吧,我把这个把这个已经加进去了啊。刚才PG拉是等于闹,现在我们再来执行一次啊,停掉。再来看一下还有没有问题。好把这边清空掉。
26:05
好,进来了啊,往下走。我们要准备执行的一个方法,我们看一下perter parameter value,当前应该是浪浪浪request,没错吧。执行进去到这里面来,那么配G纳保肯定是到啊,等于等于,那那么我就负个默认值等于一吧。没错啊,然后咱们应该走的是L吧。是不是啊?走的应该是else啊。对吧。当前OP2没有值嘛,那走的是L行往下走K的,如果不等呢,我就强转,但但是我当前Q的是不是等于呢。那我就直行控制不串。啊,就跑这边来了。那么配,那是只是被适应的是一啊。没问题啊,它的值是一再往下走。那你这个do,我们要去执行一下,执行再往下走,再往下走。好,直行过来了,Float list看一下啊。Size数没错吧?Size是查到了吗?没问题,往下走。
27:00
好,Count。查询一下,查询一下,查询一下没问题吧,现在咱们就全部把它执行过去了。啊,那就没问题了。就是这样的。这个or的值啊,这个值我们有用到吗?好像咱们也没用到,因为咱们这个or的值是表单那个点点,请输入关键字查询是不是才会用到。咱们现在肯定用不到啊,行,跳过去。跳过去。好了,我们回到页面上,应该就没问题了。稍等一下啊,还有一段点吗?还有一段点。再来看一下,哎,可以了吧,这样就没问题了,好把断点全部去掉。啊,这么多断点三。OK。行。再回来下一页呀,点下一页出问题喽。这什么问题啊?
28:00
他报了个错误,叫。别担心啊,这是个这个是我们必须要讲的一个错误。我知道点这步要出错了啊,回到这边来。它是哪里的问题导致的呢?稍等啊,我先把这个错误先把它记录下来,这样大家好复习啊,我把它放到哪一个里面比较好,稍等我一下啊。我要把它放到中央控制器,中央控制器在这儿啊。放到这个下面来。好,站过来。这个错误原因是什么呢?那为什么我们在首页的时候他没有报错呢?为什么现在报错了呢?大家需要观察一下,现在他这个URL和刚才的URL有什么差别啊。是不是多了一个问号,PG,那等于这个值啊,刚才是不是没有啊,刚才没有PG,那是不是直接负了一个等于一啊。
29:02
那请问你现在配件拉板是不是等于二。你配,那么等于二。等于二是不是我可以获取参数获取到二。获取了,听好了,听好了。获取到二的时候。你这个PA values里面存储的是什么呢?注意。存储的是双引号。而不是。这个树造。你说老师这还能有区别呢?你看我们method invo在调用的时候,是不是把这玩意儿这个数字要扔进来啊。那人家这个方法在调用的时候,人家需要的是一个intake,结果你给人家一个string。刚才错误呢,错误在这是不是就出现了阿的参数的类型不匹配啊。能听懂这个错误的原因吗?这个错误原因就在于我们获取到的是一个字符串。但是人家实际需要的是个intake,那你看呢。
30:01
Index。Index,那你看是不是需要的是in,结果你扔一个双引号二进来,当然就不对了。能听懂的错误原因吗?应该能听懂啊,行,那我们就要解决一下。所以。所以回到这边来。啊,我们要来解决一下。你得到这个value,它request get,获取到的一定是死菌。但是。你不一定就能够把这个菌直接往这个数字里面扔。我们需要判断。Parater还有一个方法,除了有get,还有一个叫get。猜一下呗。Get不就获取类型吗?啊,就这个好盖的大转,其他的可以不用看啊。其他的应该都不用看,就这一个get type行点get。
31:07
我们看一下这个get到底是12万样。好,叫T。我们在这边是个断点。同学们。咱们一个一个来看啊。再启动一次。大家先听啊,我知道大家听的很难受,但是我已经讲的很慢了,我把每一个错误一步一步给大家分析啊,已经很慢很慢了,所以大家一定要坚持先听下来。第一遍你听的时候会很难受,80%听不懂,只能听懂20%。啊,你扣下的时候,你你你这啊只有10%啊。啊,那也没关系是吧,90%听不懂没关系。你晚上的时候再看第二遍嘛。看第二遍目标就是我能看到30%~40%嘛。啊,慢慢来嘛,对吧,好。再往下走来往下看啊。
32:02
嗯,往下走t name,咱们一起来看一下啊。当前的,当前的per是谁呢?当前的per是name对不对啊,是or对不对。那么它的time是什么呢?往下走。是不是这个java.language点视剧对的吧。你看这儿啊,不是把它关掉。看index。你看他是不是死军啊,没错,再来。呃,往下走。再来。看下面一个,下面一个这个type name看一下是什么。Keyword是不是还是十军啊?再来。下面一个。Page number是不是Java language.intake呀?哎,如果是死菌没啥问题,你如果是intake,你就不能直接往这个里面扔了。你得把它变成intake,再扔进去吧。停掉了啊,下面我们来写一下解决方法。
33:03
好,回到这边来。衣服。加点language.intake.equals。Type name。如果你是intake这个类型。那么我就使用inte点。把我们的per value,把它放进去,重新付给per value。行吧,同学们。重新附进去。敷完了之后,我们再把它放进去。哎,他这边报错的原因是因为他是子俊是吧。啊,这个真讨厌。那这样吧。叫object。Playme parameter obj。默认情况下等于闹。行不行,嗯。默认,我让他等到如果你是这样的情况,我就把它附进来。Else else就表示你是字符串或者是其他的。
34:03
那么obj就直接等于这玩意儿。你说老师这个写的比较简单,咱们只写了一个intake。按道理来说,咱们需要把。大波。服呀呀。布瓦呀,是不是都要把它写出来啊?只不过我们当前这个项目好像只用了string和intake是吧,同学们?所以咱们不需要把它写全了。啊,没有必要把它写全了,你要想写全也行,但是没有必要,行吧,同学们,大家只要知道就行,行吧,同学们啊,我们就不要在这个上面浪费时间了啊,行,我就把它改成这样了。好,现在我们再来启动。好,那这个注释我删掉了啊。坚持一下啊。
35:03
这边断点已经被我去掉了啊。现在还报了个错,这个报一个错不是故意的,是我少考虑一步啊。你这边不仅要让他怼他,还要让他不得浪。是不是啊哈,还不得闹啊。稍等一下啊。稍等一下,我来想一想啊,这个else我把代码简化一下啊,我们来把代码简化一下,P me obg,把这玩意儿剪切放在这,然后把这else删掉行吗?同学们。好,然后在这边if。嗯,If。Parameter。Value value不等。或者OBD不等啊,都可以。不得,那我再做强者吗?可以吧?哎,是不是套一层就可以了啊。那行吧。这个不是故意的啊,这个确实我欠考虑了。
36:03
行,坚持一下啊,大家坚持住啊,快结束了。好,现在可以了,下一页,哎,这个地方出问题了,哎,还是报的错。不可能啊,怎么还报的错呢?是个断点,试试吧。哦,那这没改,真是的,也没人提醒我。排面的OG等于他把OG放在这边是不是啊。你放那个Y那里这个符值转化一下再付给他有啥意义呢是吧。哎,真是还得再重启一下。又得拖档一分钟了啊。启动一下。
37:04
好,这边全部关掉啊。中怪就算了。来看一下哦。哎,怎么到这儿了?也没报错啊。我看一下啊。旁把它扔进去。Invoke,不可能啊。这边有执行啊。应该会执行这句话呀。哎,奇了怪了再来啊,稍等一下啊。哎,有了怎么干的,没有是吧,下一页。
38:01
下一页下一页可以了吧,首页没有问题啊,说明是对的,新增一个吧,到五页看一下啊,这是萝卜是吧,怎么加一个萝卜20215块55斤,OK,添加五页可以了吧。也没问题,修改一个。修改五页可以的吧,没问题啊,那说明结果,那说明是没有问题的行。坚持一分钟啊,我们回到我们的float controller,大家请大家再回过头来啊,回过头来再看一下当前这个controltler。当前这个CTRL就比较简单了。你看我们这里面的一个一个的方法,是不是就是我们的一个一个的业务操作。我们每一个业务操作,我们是不是只需要去考虑它的业务功能如何实现就行了?你到底怎么去获取参数,你到底怎么去做资源的跳转,我是不是都不用管啊。我只需要做中间的业务操作。这样能够把我们这个组件控制器组件能够。更集中于做业务控制。
39:02
啊,做里面的这些业务调用。那我们之前所写的那些比较重复的、繁琐的获取参数以及资源的重定向都不需要了。我们代码就暂时先写成这样啊,当然了,比如说像这种if else,我们还可以在里面再继续完善。If else if,如果你是stars with Json叫Jason冒号。啊,如果是以森宝传递的是杰森数据格式的啊,这个咱们再说,因为杰森格式咱们还没讲呢啊。那行吧,咱们就就说这么多啊。
我来说两句