00:00
好了,那么接下来咱们来开始去写我们这程序对吧?呃,那么在写程序之前呢,我还得再给大家讲个东西,叫什么呢?叫分层啊,就咱们现在呢,在开发的时候啊,一般呢,它都要做一个分层的,那么现在咱们的主流的分层方式呢,一般呢分三层啊分三层一个呢是我们这个标志层对吧,一个呢是我们这个业务层。还有一个什么呢?还有一个呢,叫持久层啊,还有叫持久层,那么咱们当前表示层它主要干什么呢?它主要负责接收用户的请求啊,我给大家说写一下吧,是吧,咱们现在呢,这里我们要分层是吧,分层第一个表示层。那么还有什么呢?还有们业务,还一个是我们这个层。
01:08
啊,那么咱们现在表示主要作用干什么呢?它是接收用户的请求啊,然后呢,这个像咱们的用户啊和调用吧,调用咱们的业务层进行处理,然后将我们这个处理结果返回给咱们用户,比如说客户端对吧,然后业务层呢,它主要做业务处理了,然后持有层呢,主要是操作我们的数据库。啊,主要做到数据库,那么其实最早的时候呢,大家注意啊,这个东西呢,是没有分层的概念的,咱们说我一开始要发送请求,把请求给谁,是不是给咱们serve light就可以啊,这个light是个什么呢?它其实也是一个Java程序,对,就是你就我们刚开始学的时候,我们就serve light,我发什么请求给serve light,给一个Java,然后呢,Java要响应页面,对吧,给咱S,我们当时写的特别痛苦,你知道怎么痛苦吗?对吧,就是我们现在在Java代码里边,我们要对吧,Response对吧,有个响应,然后接下来点我right往回往里面写东西,写什么呢?对吧,就是把咱们现在这个HTM页面给它拼接上,写一个这个东西,HTML开始,然后接下来再来,对吧,这个什么HTML结束,然后中间有什么body,然后body里边又有什么什么东西,就是我们现在在扎里把这个代码格这界面给他拼了。
02:44
对吧,页面P上,然后后来呢,说这个东西不行啊,说这个页面展示你不应该用我们这个,So,然后后来有谁呢,有GSP对吧?GSP有了之后呢,说我现在啊,如果要处理业务的话,你在serve链这信如果做页面展示的话呢,你在GP里边来做就行了,对吧?那有了GP之后呢,那发现也有人不愿意分层什么呢,它就出现了个极端,在GSP里边呢,它就通过咱们现在这个东西对吧,开始写账va代码了,你会发现在GP里边,本来呢,您这里说诶这这JSP,然后呢,去写页面的,结果这里面嵌套了一个下一些账va代码是吧,这是没分层对吧,但是呢,如果不分层的话,大家想一想你的业务,然后你和咱们这个接收的响应,接收请求以及给用户的响应,然后以及和对数据库的操作全混在一个文件里边,这个东西操作起来比较麻烦,对吧,所以说呢,那咱们对我们整个这个的这个项目做一个分层,如果说诶我现在表示层主要看什就是来接触用户请求对吧?那么业务层就是做业务处理,持久层就是和数据库打交道对吧,就是和数。
03:45
打交道,那么我们现在在我这个项目里边呢,我慢慢的会把咱们这几层呢,我都给大家渗透进来是吧,但是不能一下子都给,就一下子都把这事都给创建出来,咱慢慢来,先来一个什么呢?先来个表示层。啊,先来个表示层,那么这几层啊,一般咱们有一个什么呀,基本上不算是标准,但是呢,那么在咱们企业里边对吧?那么基本上你如果要是有经验的话,你一看你就应该知道,那么它是哪一层对吧?那么怎么看呢?你打开咱们的项目,一般表示层都是什么,Controller对吧?然后业务层呢,一般是service对吧,或者是B。
04:22
然后呢,咱们持久层呢,一般是往们里倒啊,跌层啊,一般是这些,那么除了这个之外呢,那么你在咱们这个,假如说啊,你刚去公司,然后你看到一个项目,除了这些之外呢,你可能还有什么B看到了be幕,B里面是不是放了些实体啊,有可能叫nity,对,有可能叫咱们这个port对吧,有可能叫什么,有可能叫咱们这个读卖对吧,这这个对吧,还有什么呢?U,这U应该好理解对吧?有一些这种工具类,还有一些咱们common对吧,可能有一些什么常量或什么的东西放在这里边,对吧?哎,那么这块呢,是一些我的项目结构对吧?那么咱们现在干什么呢?咱们现在啊,来先把表上都写完,因为你想一想,我生成数据之后,我是不是要把这数据给你发送到某个地址啊,对吧,那你是不是应该到这个地址拿过来数据咱们进行处理啊,对吧?那么我现在呢,在这里啊同学们,那么我大概呢,我这我都把这个东西对这这个表述都写出来,那么如果写表示层的话,那么咱们首先第一件事也在这。
05:22
啊,你得把这个结构创建出来,怎么创建呢?我在这里新创建一个包啊,新创一个包,这个包呢,就叫CTR啊,这个包就叫CTR,然后接下来在咱当前这个包的下面出个类叫log controller,叫log controller对吧?那么当前的类它干什么呢?它接收我们这个模拟器生成的数据啊生数据,然后呢,并对数据进行处理啊,并对数据来进行我们处理,对吧?那么大家想一想啊,那么你现在呢,有了这样一个类了,那么你要想这个类干活的话,那你是不是得创建这个类的对象了。
06:06
你想一想,咱们现在这里我有一个类,这类叫什么接触我这个模拟启示数据,然后呢,就对数据进行处理,你是在创建对象,咱们以前创建对象怎么创建的,你肯定自己我你是不是现在呢,我们如果有了框架的话,不需要咱们说我现在这个springboard是不是,其实它是一个全家桶集成了什么spring呢,Spring Mac啊对吧,这些东西对吧?那么咱们在这里它的作用干什么呢?它的作用其实主要有两个注意啊,在这里我们呢有一个spring框家,那么它有两个重要的功能,一个叫AOC,另外一个叫做a opoc。啊L一个叫loc,一个叫AOC,那这个AOC干什么呢?这个AOC啊叫控制反转啊,这个AOC叫控制反转,这个A呢叫面向切面编程啊,叫面向切面编程,注意啊,这个东西同学们不是重点啊,我就给你们扩展东西啊,不是你听一遍了解就行,重点东西呢,我会让你们,我会让你会,我给你们说的。
07:07
啊,就是如果说你以前第一次听过的话,以前从来没听过,这是第一次听的话,你应该好好听一听啊,就是你得大概知道是吧,那么咱们现在的spring啊,这个框架有两个重要内容,一个叫AOC,一个叫AOC,那么这个AOC叫什么呢?就控制反转,到底反转的是什么啊,不是反转,反转啊,到底反转的是什么啊,我问大家,在没有我们什么容器之前,我现在呢,我是不是自己new,然后呢,咱们对象出来主,现在有了容器之后呢,这个对象创业呢,不需要咱们去做了。对吧,那么它底层怎么做呢?它底层会通过反射来帮你创建这个类的对象。并且呢,维护对象之间的一个关系。啊,并且没有对量这关系,说老师什么叫没有对量这关系啊同学们,假如说我现在呢,有一个类对吧?这个类在哪呢?这个类在package,注意看啊同学们大概原理就这样,Package com.at v母这个包的下边是吧?那么这里有一个类叫什么叫A,然后进下来在它A里边呢,有一个类叫有一个属性叫B对吧,然后接下来,那我现在呢,想把这个A和B对象创建好,并且把这个关系给我维护好,那么你如果要是没有它的话,那你怎么做,你肯定这么做的对吧?首先第一个咱们呢,你有一个A出来,然后呢,这个你你有一个A出来对吧,这个呢是我们一个A对象,这样能跟上吧,同学们,然后接下来你再用一个B出来,这个呢是你的B对象啊,B对象,然后接下来那么你去调用咱们这个A对象里边有一个set b这个方法给谁呢?给我们这个A对象B属性来复制。
08:51
是不是应该这样来流通之间关系啊,对吧,那我现在这个东西你得自己写对吧,现在如果有了任的话,对吧,这不需要对吧,那么他会怎么做呢?它呢会通过反射把咱们A和B对象把你创建出来。
09:04
对吧,然后并且呢,咱们把这个关系也给你维护好,你想啊,我现在这里边,我通过反射,我是不是可以把这个A和B对象串联出来,对吧,那关键是咱们怎么知道这里面有A,这里面有B呢。对你你得告你得告诉,你得告诉我们现在这这个spring容器呀,我需要让你帮我把这个A和B创建出来,你怎么告诉他呢?那么最早的时候呀,它是有个配置文件啊,最早的时候有个叫OB对点叉mlil这配置文件,在这配置文件里面配了一个什么呢?配置一个bin标,有个B标签啊,有个并标签啊,在最早的时候啊,有配置念有并标签,然后在并标签里边呢,有一个ID属性,有一个class属性,然后这个ID属性呢,是你随便取的名字叫叉叉,然后这卡属性呢是吧?这这这个代表什么全全权限的名,比如说a com I的硅谷,然后点A对吧,然后接下来在咱们这里边,你呢给我打过来对吧?诶我现在在这里,这个呢是YY对吧,然后这个呢是B对吧,然后接下来当你服务启动的时候呀,它会读取咱们这个配置文件,读取配置文件之后呢,发现咱们当前的这里面有一些B,对吧,需要我去帮你创建对象,怎么创建呢?大家想一想给你。
10:18
你这个字符串,你能不能把A对相互创建出来,反射是不是就可以了,对吧?但是它们之间关系没法法维护,怎么办呢?在咱们这个A里边啊,比如这个就是我的A了啊这个A了,那接下来咱们的这里边有一个properties啊proper对一个proper,然后接下来那么咱们的property里面呢,这个是当前的属性名对吧?因为我要给我A的一个属性呢,来赋值你的属性叫什么,你的属性是不是叫B呀,对吧?那么给谁付过来呢?把把谁赋制给他呢?Ref对吧,Ref,咱们这个YY,这个YY是谁?是不是咱们先创业对象啊对吧?大家想想,那这样的话是不是相当于把咱们这个A和B的关系给维护起来了呀,对吧,但是呢,那么咱们现在基本上配置文件的方式呢,用的很少了,都用的很少了,那么如果没有这个配置文件,那么您怎么告诉我们现在这个spring容器呢?怎么告磁分容器,我现在呢,需要帮你传递项,那么只能咱们通过注解的方式啊吧,通过注解方式托什么注解呢?咱们现在啊,如果说我们现在。
11:18
是表示层的话啊,如果是表示层,那么这个时候呢,你这里有个注解就要control出ler啊,就control出ler,如果是业务层的话,那么这里呢,你要让容器,什么容器来帮你创建对象,这个呢叫service对吧,然后接下来如果持久层的话,那么你要让他帮你创对象,这个叫P。啊reporting,那么基本上这个现在呢,用的很少了啊,因为我现在一般都用my my beness my be呢,它其实呢,是通过配置文件,它帮你来对吧,通过反射来生成一些网实现对吧?那你不需要自己去让我们不容器来帮你创建对吧?这会呢,一般的就不多了,对吧?那我现在呢,那这里我当前我这我这个东西我肯定是有CTRL的呀,那我想让他帮出来对象,那咱们需要在这里来CTRL的给加上是吧?加里CTRL注解,CTRL注解的目的什么呢?将对象的创建啊,将对象的创建交给谁呢?交给我们这个spring容器啊,将对象创建交给咱spring容器啊,咱们就不用创建了,对吧?我问大家一开始是不是得咱们创建呀,现在是不是交给容器了,这种对对象权限的一个反转叫做控制反转。
12:29
为什么叫loc loc叫控制反转,反转的到底是什么?反转的是对对象控制的权限啊,反转的是对对象控的权限,好了,那这样的话,咱们现在呢,这个spring他帮你创建一个咱们当前类对象的出来,那么创建对象还不行,你要干什么呢?你要处理请求啊同学们,咱们在这里为I'对吧?来vm application practice,那么咱们是不是把这个数据要发送到这个地址啊对,要发送到这个地址,那么你现在呢,你得把这个请求给我处理一下,所以说啊,注意我现在呢,要处理我们现在这个请求,对吧?那么怎么处理请求呢?那你肯定是得把这个请求交给哪个方法去处理啊,所以说啊,咱们现在我要提供一个方法啊,我现在要干什么呢?我现在要提供一个方法。
13:25
方法来处理客户端或处理咱们这个模拟器对吧,生成的一个数据啊,生成的一个数据对吧,那么这个方法呢,我就public,然这方的返回值呢,比如说是string对吧,比如string,然后这方法名比如就叫a log对吧,那接下来对吧,大家想一想,那么你现在呢,在咱们当前的类里边有可能不止一个方法吧。对吧,你可能还有方法M呢,对吧,你这里可能还有方法M呢,对吧,那你怎么知道我现在要把咱们当前发出的请求交给你这个方法处理啊,不交给这个方法处理呢。
14:00
对吧,所以说呢,那么咱们在方法的上面呢,再加了一个注解对吧?这个注解叫什么呢?这个注解叫request yping啊,然后接下来在注解里边呢,它对来指定一个值对吧?来指定一值对吧?能表示什么?表示的是我当前的这request啊,这个它表示的是对吧?那当前啊,或者说把我们现在呢,这个APP,咱们这个log请求交给谁,交给我们这个方法来进行我们的处理啊全处理说老师APP log了,他要加什么呢?他要加当前你服务器的地址,大概咱们现在请求的这个是不是我服务器的端服务器的地址,这个是不是端口号了,这个是不是请求的一个地址啊对吧?那么你现在把这几个交给谁呢?我要交给我当前这个方法来进行处理啊,要交给咱这个方案进行处理,那么咱们现在在接触的时候呢,那么注意啊,那么这里我呢,那你得接入数据,那么怎么接触数据呢?对吧,那么这里啊,我们对吧,这。
15:01
嗯,然后呢,这个对吧,那我能简单去看一看咱们这个程序了,看谁呢,看模拟这数据的程序啊来在这里我们呢去打开,打开谁呢,打开一个Mo,这个Mo程序是谁,就是我刚才给你们说的说啊我在提供的资料里边。这里有一个模拟器用行为有一个模拟器源码,你们感兴趣可以看一看,对吧,如果不感兴趣对吧,就可以放在那这个没关系,对吧?然后接着我现在呢,我要带他简单的看一下啊,我要简单看一下对吧,说以我现在呢,这个模拟是数据,它本身的底层也是一个spring,呃,也是一个spring的程序,对吧?那么咱们要模拟我现在日志,它是怎么来生成日志的呢?对吧?在这里,对,在这里,那么他去找到一个执行的入口,你想既然是spring步的程序,它是不是应该有程序直行的入口啊,这个入口在哪呢?在这儿呢?啊,这是spring BOO成以直接入口,那么在咱们入口里边它干了件什么事呢?大家看是不是叫什么Mo task,然后执行这一个任务呀,那么点进去看咱们任务,那么在咱们任务里边是不是要执行一个什么run方法呀,那么点进去看的run方法,那么在咱们run方法里边,那么他要干了什么事呢?对吧?那么这里大看它本身呢,要判断一下,那么你当前你这个Mo type是HTTP还是log?谁是Mo type呢?那么咱们在生成数据的时候,大家看这里边我是不是有一个属性叫做Mo type呀,对吧?那么咱们在设置的时候,你看我这属性的值是不是HTTP呀,就那么如果是HTTP的话,它要干什么呢?它封装了一个htp to这样的一个工具类,然后调它的POS方法来发送请求,对,把谁呢,把它模拟生成的数据啊,注意这个就是模拟生数据,然后呢,来来来发送给我们现在对吧,这这个发送出去了,发送给谁了,那你得看poose方法。
16:52
点句在我poose的方法里边对吧,那么这里呢,它用的是我们这个对吧,这个at ttp对吧?概它其实呢,拿到了一个ATP的u to,它里面这样的一个实例,然后既然具体发送的时候,怎么发送呢?大家看一看,那么这里它有一个request对象啊,发送请求吗?它封装了一个请求对象,那么这个请求地址是什么呢?这个请求地址大家看一看叫什么叫mock URL,这个Mo URL咱们在这里大家看你是不是配了一个Mo标L,也就是说当你运行我们这个模拟生成数据这个程序的时候,那么它呢,会往我们这个地址来发送一个数据,而且这个数据呢,其实以什么格式发送呢?其实以JS的格式来发送过去的,对吧,就是说我现在啊,它其实呢,会往到这个地址发送这个J这个JS个数据,并且发送的方式是什么,发送的请求的方式是posts请求,对吧,就什么叫post,那天我给大家简单说过,说我一般在发送请求的时候呢,那么常见请求方。
17:52
是一个是get,那么另外一个呢,是post,对吧?那么get题和post型差什么区别呢?简单理解对吧?第一个get更倾向于获取post是不是更倾向于发送传递啊,对吧?那么如果get的解求的话,那么它的数据是通过什么呢?是通过咱们请求函数传递过来的,也就说我现在在咱们这里边,你一般在浏览器里边说我现在输一个地址APP,然后呢,在这里访问一个地址,比如说local host,然后账号8080,然后在这里p log,然后你传log,然后传一个咱们这个什么参数过去,比如说A,对吧,它等于八转到这个就什么get的请求,浏览器默认发送的请求就是get的请求。
18:34
注意啊,浏览器,就咱们在这里通过浏览器做发送请求,默认它的请求方式,对盖的请求。啊,那我现在呢,在这里,他在发动起的时候,把这个电局,他这这个数据从哪传的,通过咱们现在你可以通过地址啊,其实是请求函传过去的,那么但是我发送请求线的时候呢,是post post,它这个请求参数通过什么传递过去的,它是通过请求体传过去的,所以说那么既然通过请求体传递,那么这个候呀,你在接收的时候呢,那么你得告诉他一声,通过一个注解叫request body。
19:09
啊,通过一个叫request body的注解对吧?来说明一下这个request body注解干什么呢?它这个做一个声明,注意啊,这几个注解啊,来做一个声明啊,表示的是我们要从请求体中来获取我们这个数据啊,从启示体中获取数据对吧?哎,那么咱们现在获取到数据之后呢,那你要干什么呀,同学们,我希望把这数据呢,做一个打印输出,对这个数据其实就谁呀,其实就是我们模拟生成的,我们的AP log,就它模拟生的数据就这个,对,其实呢,是我们这个或者Mo log模拟生数据,其实就这个,我把它打印输入出来,那么另外一个呢,咱们现在是不是给你响应呢?那么怎么响应呢?通过return对吧,给这个响应响应,谁也可以把咱们这个东西给他响应,大家想想你这响应其实响的是谁,是不是给咱们这个,呃,这个模拟器给响应啊,对吧,但是注意啊,默认情况下,你如果返回string。
20:09
那么这个时候他认为它不是响应,是页面跳转,所以说呢,咱们在这里我加CTRL的时候呢,现在基本上很少用啊,对就CTRL一般用的不多,对CR用的不多,那么如果CTRL你要在这加CTRL的话,你在咱们的方法上面,那么你还得再加一个什么叫request啊response呃,Response body,你需要加一这个注解,那么这个response body注解干什么呢?这个response body注解表示的是我当前返回的这个值,不是做页面跳转,是直接给你响应数据啊,直接给响数据,所以说咱们现在呢,这两种方式处理,注意啊,我现在在咱们这类上,我是不刚才在家里CTRL了,表示的是我把这个类对象创建交给容器呀,对吧?那么除了这个之外呢,其实还有一个,我想用另外一个对吧,这个呢来叫什么叫rest controller,对叫rest controller,那么这个rest controller,注意啊,那么这个rest controller,其实它等于什么呢?来我现在呢,在这里把这个拿过来。
21:09
啊,这个了,它其实等于我们这ler,再加上我们这response啊,等于它再加上咱们的response body对吧,那么咱们现在表示什么含义呢?对吧,如果说CTR的话,那么方法返回啊,方法返回短会默认会。当做跳转页面处理,看这为样啊,你现在想跳转到某个页面去对吧?跳转页面处理对吧?哎,那么咱们现在呢,在这里啊,如果是这个rest control的话,那么这个时候呢,方法返回咱们string对吧?那么会转换为什么呢?啊,会会返返回子缀化对象吧啊object啊,只要返回对象它都会转换为咱们的Jason格式字符串啊进行一个响应啊,他给咱们这个请求客户端响应的什么呀,响应的是我们的接层格式的一个字符串啊响应接个字符串对吧?哎,那么底层啊,这底层做的事啊,这底层做的事对,所以说呢,咱们现在一般如果要响应的话,尤其是在做发送一些异务请求的时候,是阿雅克斯发送请的时候,一般呢,都是使用我们的rise ctrl啊,一般都是这样好了,那么咱们现在呢,在这对吧,把这个呢这个处理对吧,就完事了。
22:38
就相当于把这个东西做了一个输出,对吧?来来,大家想一想,我写了几个注解啊,同学们。来,王其东,你们记了几个,我我写了几个主题。精神一会儿啊。
23:00
呃,大家想一想,首先我在那加了一个注解,这个leg的注解是什么?Controller或者是谁,或者是咱们一个rest controller对吧,这是第一个,他表什么呢?表示的把咱们对吧,如果精神如果要是不困的话,就做下对吧,然后可以做下啊不是不是没有没有什么,就如果要困的话,他可以主动站起来对吧?那么咱们尤其做项目的时候把尤其做项目的时候,那么咱们首先在队上加了1CTR中金表示的是我现在呢,对吧,要把我当前的对项创业交给容器去维护,不需要我自己管理了,这是第一个,那么第二个咱们现在我类里是有方法呀,我怎么知道这个方法该处理哪个请求,咱们是不是在方法加一注解,这个注解叫什么?叫做request makingping,然后在request making里面是把你请求短这个路径,然后呢,这个给它加上。啊,然后呢,如果说我现在你发送这个请求了,那我就把这请求就我这个方式进行处理,对吧?然后呢,我现在在当生入数据的时候,我把这个数据是不是以咱们这个POS的方式发送到咱们这个这个路径来的呀,对吧?那么如果要是以POS方式发送,那咱们是不是在接入参数的时候,我得告诉参数,告诉咱们这个参数得去哪去获取,是不是得到咱们请求体去获取啊得有个注解,这个注解叫什么叫request body啊叫request body哪有那么多注解,不就仨吗?啊仨注解是不是就讲的这么迷茫,是不是,所以说注意啊同学们这个东西呢,就是因为我们现在这个跳过了死spring,跳过了spring,就是跳过什么这个spring VC啊直接呢是spring boot。
24:32
啊,所以说呢,用的注解不多对吧,我现在呢,只讲其中一层这三个注解表示什么含义对吧?第一个咱们定义这个类来对这个标标示一下,创建对象,然后接下来那么第二个呢,那么咱们现在表示的把这个请求就这方法进行处理,第三个从我们请求题里边来获取数据,然后这两行代码能看懂吗?同学们。对吧,如果说学了半天这两个代码也看不懂的话,那就后退了,同学们对吧,稍微下课休息一会,精神精神啊。
我来说两句