00:00
好,我们接下来来看后台同学们,User controller,咱们能填一个了啊,这叫什么?是不是log in呢?一。好。好,咱们这是进入到验证登录的这么一个操作,对不对,首先我们需要把这个参数给他接收一下啊同学,参数从这个前端给我传了一个login a cp,一个login p WD,对不对。参数接收一下啊。等于什么?request.get per对不对?Log,再来个log in。PWD对吧,好,但是大家注意啊,你拿着这个PWD123,你跟我们数据库表中这个这这一大串数永远比不上。首先得把什么呢?哎,将密码的这个啊,铭文形式啊,转换为MD5的什么呢?密文形式啊,好,咱们log e。
01:19
PWD等于咱们这个MD5U直接用就行了,对吧,好把咱们这个log in p WD传递进去转一下对不对?好除此之外呢,咱们是不是还得接收这个一个IP地址啊。IP地址,好,咱们来stringp,等于让你们回去研究呢,这东西叫什么来着?Request get。DR是不是接收这个IP地址啊,怎么说啊。浏览器端的IP地址,我把这个IP地址啊,我给你输出出来啊,咱们一会儿看看这个IP地址到底是个什么鬼行吗。
02:11
加上这个IP啊,因为控台里边信息比较多,OK吧啊,所以说咱们加点这些个标识啊,把它放在这吧,行吧,哎,有没有觉得我们这些个操作好面熟啊,貌似做过呢,看看是不是刚才咱们这个就算完全按照咱们现在这个流程来了。哎,在我们这个controller里边干嘛呢?这个接收log和log p WD对不对,然后呢,接收IP地址,接下来该干嘛呢?无脑按照这个图来做是不就行了,创建service对象是这样吧,好,咱们来一个user service,等于new user service ipll是。
03:03
咱们业务层对象吗。我要用他吗?这是什么形态呢?这个接口对象什么形态呢?Ipl,普通实现类形态呢?普通实现类形态,咱们就不走事物啊。对吧,老师我登录走什么事务啊,登录确实是不用走事务,但是在将来这个登录的这个业务里边,有可能用户要扩充日志相关的这个操作,那一旦接触到添加修改,你到时候还得填事物,能理解吧?啊所以说啊,咱们以后统一就都得加事物了,那加事物用这个ipl的这个形态就不行了,咱们是不是得加这个代理类形态,以后你就记住啊,未来的这个业务层开发啊。业务层的这个开发啊,统一。使用什么呢?代理类的形态的这个啊接口对象OK吧,行就不应该这么写了。
04:07
怎么弄来着?Service factory啊,我正在写,你在你在回忆行吗?Service factory,咱们调一个方法,Get service,这个get service的作用是传张三取李四,传ipl,真正实现类取得代理实现类对象是这样吗?哎,传一个new,什么use service I PL,你看看这回us什么形态,是不是代理类形态了?OK吧,好,那需要做一个强者啊,OK,好,那接下来咱们来个us,调一个什么呢?点log个in,是这样吧,好,咱们要传谁呢?同学们看图,是不是得把这三个死令都传递进去啊,哎,传log in。Act log inw de。
05:01
咱们这个IP地址对不对,好给我返回一个什么,完了,这这都已经剧透到这步了,最后返回回来一个什。优对象对不对,然后最后把我这优对象保存到哪个域中。Section,好,咱们来一个request get session点。Request get section.get atribute是这个吧,好,咱们来一个什么?Get attribute,应该是set at tribute是这样吧,好,比如说咱们来个user。User行吧,OK啊,但是大家注意啊,这是我们一种非常理想的形态,也就是说什么呢?啊,咱们肯定是登录成功的这么一个形态,是这样吗?你如果登录失败了,你想一想,咱们是不是不可能那么顺利的把这个有对象给它保存了,也没有这个必要,对不对?好,所以说我们选择使用的技术,在业务层咱们选择使用的技术是不是自定义常啊。
06:09
是这样吗?我想要做的是什么呢?我一会儿调业务层,注意看老师的啊,注意力集中看54行us.log in,调业务层的log in方法。这个方法如果一旦啊验证登录失败了,不论你是在哪一步失败,我要往上一层抛个一层,谁接呢?我现在当前在controller里边来接,能理解吧,我接收到这个异常之后,我是不是就得处理这个异常。是这样吗?好,所以说啊,我现在来搭建一个什么呢?Try catch结构好,来一个exception好。好,大家注意看啊,我现在把这两句。给它贴过来,贴到咱们这个踹里边OK吧,踹里边如果大家注意啊,如果啊,Us掉这个login从业务层给我抛异常了,咱们是不是往开圈跳,表示这个登录失败啊,对不对?好,那大家现在注意这么一个问题。
07:12
我这58行,也就是说把这个U对象保存到三域当中,我用不用判断一下啊,我判断一下这个U到底为不为空,它为空的话,我说没有必要保存。用判断吗?不用吧,为什么大家注意啊,因为如果56行,如果一旦接收异常,是不是说明业务层给我判断登录失败,登录失败直接给我跳到那儿,是不是跳到K区块啊,那这行咱们是不百分百不执行。如果我现在走的这一行,大家注意啊,56行这一行如果能够顺顺利利的走到我的58行,说明什么呢?说明业务层没有给我抛任何的异常,说明什么,登录成功吧,没毛病对不对?好,所以说58行执行把这个U,这U肯定是有的,对不对啊,给它保存到这个三选域对象当中,是这样吗?好所以说啊,我们如果啊,大家注意啊,如果程序执行到此处啊,此处。
08:26
好,说明什么呢?说明啊,业务层没有为控制器啊,Controller啊。抛出任何的异常好表示什么呢?登录成功是这样吗?表示登录成功,那一旦咱们走开块了呢,同学们。一般程序。只行了。
09:00
开块的信息好,那说明啊业务层啊,为我们验证。登录失败是这样吗?好啊,抛出了啊,为这个controller抛出了异常好这块表示什么呢?登录失败啊,OK吧,如果登录成功,咱们应该给前端返回点啥呢?同学们。咱们是不是给人家返回一个。SS就是success,咱们是不是来个true就行了,后边那个消息还用返回吗?来看看这个MSG有没有返回。不用吧,哎,是不是人家拿到一个处就行了,对不对,那大家想如果咱们这个登录失败呢,应该给这个前端返回,是不是除了他之外,怎么说还得返回一个错误消息啊。
10:09
MSG是不是哪错了,对不对?是这样吧,好,那这东西怎么用?来看看,如果按照我们以前来讲的话,拼这个字串其实很简单的,对不对?Str还记不记得这么一样一个操作啊,Success处啊,咱们来回忆回忆,是这样吧。好,然后给前端打这叫什么response.get right点是不是这个str啊,这个咱们当时是不是相拼的呀,对不对,但是以后啊,给这个前端所这个提供的响应信息啊,肯定会越来越复杂。我们手动拼那是不可能完成的,OK吧,好啊,可能完成它也是很复杂的,OK吧,所以说呢,我们将来是不是都是使用工具啊,我们上一个阶段使用的是那种这个杰森二维的形式,对吧?好,我们这个阶段啊,所使用的到底工具是什么呢?叫做杰克逊啊,杰克逊这个工具啊,好,我们来看一看这个工具啊。
11:16
杰son,但是这个名字是我起的啊,好,大家注意看啊,杰克森里边啊,这个包里边,咱们需要提供的是这三项信息,OK吧,好,那么我们来看一看它的这个核心是什么呢?它这个核心其实和你们以前那个J32位是一样,就是把我们的对象。对象数组,我们的map集合或者是咱们的对象集合,给它有效的解析,为什么呢?接身串OK吧,好,也就是说通过一个核心的object map,调一个right value at string,就可以把我们这个Jason串返回。例如我们现在提供的第一个方法叫print Jason flag,看没看到我是不是只接收这个flag呀?
12:11
那老师接受一个response干嘛用的,大家想一想,是不是相当于一会我要调这个方法,这一句话就不用我在上一层写了,就直接在这个工具里面写就是不就行了。OK吧,好,那么我现在啊,需要翻译成这种形式,我现在要的是不是这种形式的这个字符串,哎,首先会把我们的什么呢?会把我们传过来的这个处或者是false给它变成一个map中的这个键值,对的关系,看到没?他会把我们这个success等于true或者是false,给它解析成什么呢?这个介身串success true或者是false,如果我们仅仅只是为前端需要提供一个true或者是false,一个标记位,表示成功还是失败,咱们就调这个方法就行了。例如我们以后是不是在做添加、修改、删除,是不是做完这些操作之后都得给前端提供一个信息,你到底是成功了还是失败了,对不对?好,到时候咱们调这个方法就行了。好,接下来一个方法是什么呢?大家注意看啊。
13:13
Print杰森OBJ啊,它的方式跟刚才啊一模一样啊,一模一样,看看啊,它能够将我们的person p还记不记得我们以前自己手动拼呢。对吧?哎,能把你的person p以属性为key,属性值为value的形式给你有效的解析为解神串看到没?能够把你的list集合解析成接身串,能够把你的map解析成什么呢?接身串那map就好理解,Map中本来本身就是键子对的关系对不对?给你解析成阶省的键子段关系,如果我们为前端所提供响应的信息不仅仅只有flag。不仅仅只有true和false,我们是不是应该用这个东西啊,用这个方法对不对?好,那现在大家想一想啊,我现在可以想给前端提供这么一个东西。
14:07
怎么提供?首先啊,咱们这个工具叫什么print Jason对不对,这两方法应该调哪个,第一个还是第二个,第一个为什么用,第一个是不是提供一个true还是false就行了,好来一个response一传,这里边咱们传一个。是不就行了。OK吧,好,那么下面啊,大家注意啊,如果一旦这个程序执行失败了啊啊登录失败了,咱们是不是得提供这个东西对不对,但是大家注意看啊,咱们这个MSG其实还少个东西,OK吧,MSG错误消息在哪呢?里面以前怎么去啊,是不是从这个E里边取啊,你所有与异常相关的信息是不是都从E里边取啊,好,E里边啊,大家注意啊,通过这个方法是不是在控制台上打印咱们这个异常相关的信息啊,那其中也包含这个错误消息啊,好,咱们来一个MSG,大家注意啊,从E里边去get什么就行了。
15:07
Message,至于这个错误消息,我由业务层来给他提供,这个先不急,OK吧,他的问题是什么呢?他的问题直接直接取出来就行了,OK吧,好。那现在咱们来看一看啊,如何为前端响应这两个信息呢?这是我们需要动脑筋呢。哎,咱们是不是可以把这俩信息给他打包成一个什么map啊,除了打包成map,还可以打包成一个什么。来注意力集中,同学们打起精神来啊,最重要的问题来了啊,好,也就是说我们现在啊,现在作为这个控制器啊。好。需要为咱们的阿贾克斯请求啊,提供。
16:00
多项信息是这样吧,多项信息OK吧,如果是提供多项信息啊,可以有这个啊两种这个手段来处理啊,一种是什么呢?将多项信息给打包成什么呢。成为。Map可以吧?好,然后将map解析为什么呢?剪词对是不是就行了啊,接身串是不是就可以了?好,那还有一种是什么呢。除了map,咱们可以使用什么?还记不记得可以使用。创建一个同学说的非常好啊,使用对象,哎,真的是很棒,但是咱们现在对象是不是只有user对象,你user对象能存这俩信息吗?所以说你需要创建一个用来展现为前端提供值展现值的这么一个类的对象,咱们创建一个什么?哎,是不是VO啊,对不对,然后这个VO的这个属性有两个,一个是什么呢。
17:11
S,这个success我看看啊,这应该是一个布尔值对不对。布尔success属性对吧?啊,给他写全了啊好,还有一个什么属性呢。死MSG。这个属性。OK吧,好,那么我们是不是把这俩东西啊啊给它经过经过这个settle方法执行一个封装是不是也行啊,对不对,但是到底使用map还是使用VIVO,这个还记得吗。如果什么呢?哎,这个啊,如果对于展现的信息啊,啊,将来还会。啊,大量的使用啊,使用好,我们创建一个VO类啊这个啊使用方便是这样吗?那如果啊,对于展现的信息啊使用。
18:13
在啊啊这个需求中。啊,能够使用好,那么我们使用什么就行了,Map就可以了,为什么呢?因为你创建一个VO仅仅只是为了这么一个需求,你就多创建了一个类啊,咱们说系统开销太大了,是这样吗?那将来得创建多少VIVO啊,所以说对于我们现在来讲的话。就这种需求提供一个布尔值加一个错误消息。是不是用map临时处理一下就行了,没有必要创建VIVO啊,是这样吗?好,所以说我们现在啊,需要来一个map。
19:00
String SG啊,Object等于map string or?Map点儿。Put咱们来一个uses,咱们这个来一个什么,是不是得是false对不对?好map.put这块咱们来个MSG是不是上面咱们得到的那个MSG啊,对吧,这个MSG对不对?然后将这个map解析为这个接身串,并打回到前端,咱们就直接使用工具去了print接身,这回是第一个还是第二个,哎,第二个好来rice后边是什么呢?呃,咱们传一个这个这是map吧,对不对,好,这就可以了,OK吗?好,那么控制器啊,咱们也写完了,那控制器里边需要的是一个这个log in方法对不对?好,Log in方法咱们来创建一个,还记得这种双击。
20:14
双击完鼠标双击什么shift还记得吧,这种形式啊好生成一个。咱们这个log in的这个方法啊,OK吧,好,也就是说啊,以后我们啊主要玩的就是什么呢?主要玩的就是这个业务层,业务逻辑,为什么这么说呢?因为对于持久层倒层而言,其实我们已经学习过这个买了,我们已经这个享受过这个啊去除代码之后啊,啊这种机制了,对不对啊,倒层呢,其实由框架帮我们写啊,买白是这样吗?那将来我们的控制器啊,控制控制器由谁帮我写,由spring Mac帮我们写,那将来接收参数就变得容易了,OK吗?但是你想一想,你的业务层能不能让这个框架帮你写,可能吗?
21:00
这是不可能的,为什么?因为因为业务是什么是人决定的,是这样吧,啊,什么样的公司有什么样的业务,对不对,他是啊,他是不确定的,所以说我们将来在实际项目开发当中啊,主要的时间都是用来处理业务,OK吗?好。下节课啊,咱们来处理业务。
我来说两句