00:00
看看这个这个什么登录的这个功能,下边我们来看这个啊,然后呢,下边这个时候来用户登录,用户登录的时候好,用户登录的话,我们首先分析需求懂,你看看用户登录到底做成什么样子的。啊,这样的话你后边才能做,那么来看看到底做成什么样子的,需通过需求这个分析,那我下面我先给大家简单做分析一下,然后我们再看看它需求文档,好下面来分析下这个需求用户登录是这的说用户他一访问我们的系统,一开始先来到登录页面了,现在我们已经做到这个地方了。那用户想使用系统怎么必须有合法的账号密码,然后去登录去,那我说合法账号密码,用户肯定什么,如果是合法的用户一定给他分配好了账号密码了,那这个时候他想用的话,他在输入这个流程就发现了用户输入用户密码,然后他想记住,他可能还会记住密码,知道吧。然后呢,大家跟我说,然后呢,输完之后呢,一点登录或者按个回车按钮,这个时候就要向后台发请求,发登录的请求了。
01:09
那后台可能接收到之后账号密码看是不是对的,如果对的。他点完登录之后,如果是对的再上,那这个时候就跳转到这个业务的主页面了,这样跳转业务主,他想干什么事都可以干。那如果是登录失败了呢,他账号密码是错的呢,对提示他告诉他为啥错知道吧,在这个地方可以给他提示一句话,然后当然这个页面也不用跳转了。这样的话,他就什么再次输入别的正确的账号密码,这样。啊,但是如果没有,没有他就用不了这个系统了,知道吗?好,这时候我说大概他这个需求就这样好,需求有个大概了解之后,但一看他需求文档的描述,他需求文档上我说比咱们说的这个详细多了,这都是给客户确认好了,他说让说用户在登录页面输入用户密码,点击登录按钮,或者按个回车就完成用户登录的功能。
02:05
然后他后边有些特殊要求,他说这样,他说用户名密码不能为空,说这样这个地方用户点登录的时候必须输用户名密码,不管对错必须得输,如果不输的话,那你想一想,你点这个地方不让点,那为什么不让点,他就是去登录,没有账号密码点登录。也没什么意义,所以请求都不让我发,那你要如果发到请发到向后台发请求,发请求也没意义,他肯定是错的,所以请求都不让我在前台,就是验证拦截了。所以将来他一点这个做表单验证,如果是他俩任何一个为空,或者都为空,都不让发请求。提示他用没密码不能为空,这样就行了,好,这是我们说这个这个要求,这个还有个大肠这个地方。那你说老师他输入用户名密码一点登录,是不是就一定登录成功了吗?不一定,他这个地方要求了,这些情况下不能登录成功,不能让他登录得拦截,哪些情况下,第一个输入用户密码了,但是用户名密码错了,不让他登录成功,到时候要给他提示用户名或密码错误。
03:14
那你说他万一他输入密码没错呢,没错就是不是就一定登录成功了吗。对不一定,他说用户如果过期了,即使用户密码对的,也不让登录成功,告诉他他的账号已经过期了,哎,你说老师账号怎么还有过期啊。对账号一般都有都有期,都有期限,他不能说你有你你你一直使用,你一辈子都可以使用,有个账号密码,他不是这样的,他每一个账号都有期限,哪一个大账在用户这个表里,表每一个用户都有一个最大使用金,最大使用期限,就这个看吗?XP看叫失效时间。朋友将来在系统里边任何一个账号都有一个失效时间,给这个用户分配完账号之后,在这个时间之内都可以使用,超过这个时间了,即使用密码对的也不行吧。
04:05
啊,这种需求你问老师多不多,以后大家以后开发的很多吧,任何在系统上,任何一个账号都有最大的生命线,那像我们这些企业级应用都给企业办公用的,给企业的员工办公用的,那企业的员工办公的,包括你的哥,你以后入职之后,假如你们公司要用一些系统啊,那么这个人事会给你分配一个账号,或者你们企业里边AO,那么这个这个什么OA系统,那么给你分配一个账号,那这个账号并不是说什么,你只要有账号密码你是吧,你永远可以登录,一般都是什么都有年限。是什么时间,那这个时间一般都是给你什么对给你的劳动合同这个绑定的,一般大家入职的时候都是签什两年或者三年的劳动合同,你入职办入职的当天,一般来讲都给你分配个账号,这个账号那系统管理员会给你给你设置给你的劳动合同是一样的,等到你的合同到期了,你这个账号就过期了。
05:06
即使你的账号密码是对的,你也不能用公司里边这种什么系统了,知道吧,所以这个每一个用户都有一个最大这个失效时间,知道吗?所以大家这个地方将来我们做登录验证的时候,我们要给他判断他的账号,即使密码用维密码是对的,是不是过期了,过期不让登录,还有当然还有这个说假如你这个账号密码没过期,没过期是不是登录成功了呢?也不是,他如果用户状态被锁定了,也不能登录成功。锁定什么意思,你比如说咱们有一个用户。有一个人他在公司里边跟公司签了三年的劳动合同,假如说呢,他中间干了两年,他离职了,那他这个系统账号密码也对了,也没过期,他还能用啊,那肯定不让他用啊,他办离职的时候,管理员肯定把他撞了,给他制成锁定状态,锁定状态他就什么,他即使什么前面都满足也不能登录成功,告诉他么账号已经被锁定了,那你说他离职直接把他账号删了不就行了吗?
06:09
就一般不会删的,这种系统一般不会随便删,删一个用户的,知道为什么吗?因为他这个你只要在一个公司里边,你只要入职了,他这你这个资料一直在他系统里边存在。万一以后他需要查你的资料的话,那他可能还能查到,咱这块删了就不行了,他只是把你的状态锁定了,你不能用他的系统了,但是你的系统资料还在这个就这个意思知道吗?好,这是我们说的这个这个这个地方这个状态被锁定,大家从数据库里边来看,每一个用户也有一个状态,你知道吗?叫lock类,这个就有一个什么,就一个字符串,它只能取两个值,一个是一一个是零一是启用,零是表示锁定。啊,将来我们做登录的时候,要做表单验证,就要做那个什么数据的验证,如果状态被锁定不能让登录成功,好这是我们这样,那假如既没有过期是吧,你状态也没有被锁定,用户维码也是对的,是不是就一定登录成功了呢?
07:08
对,也不一定是,他说这个IP受限也不能。也不能登录IP受限什么意思,就说这个用户的,我们说他这系统就是企业级运用,它里边就有企业的敏感的数据。那我说他部署到服务器上面,是不是谁在任何网络环境下都可以访问这个系统呢?他说不是,呃,万一什么你在家里边访问,或者在公司里边访问,那这个时候没有什么危险性,所以大家你可以访问办公,正常办公位置,万一有一个人是吧,他去网吧里边去访问了。嗯,或者他在不安全的网络环境下去访问,这个时候就有危险,有什么危险,有一些别有用心的人,在他电脑上会置入一些什么,置入一些这个程序,或者一些这个病毒程序,随着它的请求发过来了,发过来以后在上面一运行这个病毒程序好了,整个服务器弹完了。
08:02
或者数据给你删了,就很有很有有很多这种的,有很多这种技术,或者把你数据库里数据给你加密了,加密之后呢,给你弹过来,有空在什么时间范围之内,在什么时间之内往这个往这个账号里边打多少钱,我给你解密,不打不给解。啊,超过时间这些数据自动作废,那你如果系统里边有很多数据的话,那你就完蛋了。啊,当然这这么这大看这现在这两年好玩吧,就前几年前几年这种事儿很多,包括你个人电脑也这样是吧,你以前就是这种网络环境,因为现在国家是吧,一直一直在整顿这个网络环境,就以前是很多这种事,不知道大家这个那有老师他一打账号不就暴露他的身份了吗。有的有的时候有的不往不往银行卡里边打,那时候打什么。打那种国际上不有那个叫什么币,是对比特币什么之类的是吧,给你个账号买比特币往里边打是吧,这种账号时,你这个就是咱们中国就是控制不了了吧,对,所以这时我们这样,所以这种情况很很很多是所以当然是这样,他说你这个员工,即使是员工有合法的账号密码也没有过期状态,也没有锁定你访问的时候,你也不能在任何网络环境下去访问。
09:27
有可能受到别人的攻击,是攻击,所以大概他是什么意思,他这样,他说每一个人。你经常办公的地方,把你家里边的或者你工位上的IP地址,然后呢,告诉给这个存到这个系统里边,那么你以后只能在这些网络环境下去访问系统,如果你在网吧里边去访问用网,那么他你发过来请求,我在这个地方会获取你的IP地址,看看你的IP地址是不是在你常用的IP地址里边。如果不在,说明你这个IP有可能有风险,我就不让你登录成功,哪怕你的账号全部都是对的,所以这就叫IP受限,所以大家你会看到我们这个系统里边,每个用户在上都有一个allow IPS,知道吗?这就这个每个用户常用的IP地址,就安全的IP地址,将来他登录的时候,我会获取他的IP地址,到这里边去比对,看在没在这里边,在里边说明安全让你通过,然后不在里边拦截,不让你登录成功,知道吗?好,这是我们给说的,就这个他这个需求,这些都不能登录成功,知道吗?这是人家客户提出来需求,知。
10:39
啊,当然我们他这个客户就位以后,你做以后做项目的时候,你们的客户有可能也会提砖而去。基本上都会提出来,好,所以这个地方我们到时候做一做,再一个我们说登录成功之后,所有的业务页面都显示当前用户的名字,什么意思,就这样,假如说这些登录所有的账号都是都是合法的,然后呢,IP也是被允许的,那他就一点登录,登录成功了,登录成功之后他就来到什么业务主页面了,那在业务主页面他就可以工作了,在这里边点工作工作工作。
11:11
说不管点开哪一个页面,在这个地方都显示当前用户的名字,所以有的时候做的友好的还是大家会看到是吧,如果他是上午访问,这上面显示一个是吧,对上午好谁谁是吧,如果下午访问下午好谁谁是吗?是吧,反正总之就是在每个页面上面都显示当前用户的名字就行啊。这是他这个要求,还有个大看,要实现十天免登入,什么意思,就是这个地方。他每次输入用户密码都都很烦,那他就可以记住记住十天之内就不用再输了,来到之后直接什么输入,然后一点回收或者一点按钮就直接过来了,不用每次输了,就他要实现这种功能。好,再一个我们说登录成功之后,要跳转到业务的主页面,就是登录成功要来到这个页面,来到这个页面它就可以工作了,他是哪个部门的,点哪些功能就行了。
12:05
好,那如果登录失败了,页面不调转提示一下就行了,就在这个地方提示,如果登录失败了,一点登录没成功,那什么在这种提示告诉他为啥没成功,是账号密码错了,还是过期了,还是IP受限,还是状态被锁定了。这些给他提示一下,当然页面也不用跳转了。好,这样的话,大概他这个需求我们就给大家说到这儿。所以你做任何一个功能,你必须先理解需求,如果需求都不理解,那你后面没法做了,好这时候我们说这个需求我们就给大家看看,然后呢,大家看我们这个地方,那下边来这个简单设计一下啊,设计的话我们还是再画一个流程图啊画,我们说每做一个功能都画一个流程图。这样大家思路更清晰,好下我们来这个这个下边我们这个地方来个用户登录。用户登录,嗯,用户登录知道吗?然后呢,把它双击打开啊,双击打开知道吗?然后呢,下边来画这个流程图,我们说了所有的流程都是从客户端发起的,这个客户端其实就浏览器,那从技术上的角度上来讲,就是JSP网页,将来我们写的JSP网页从上面来发起这种请求。
13:21
因为我们的网页将来就运行在浏览器上了。运行的结果就这输入到浏览器,在浏览器上面运行,所以呢,这个地方来个客户端,那么客户端如何发起整个登录的这个流程,那我们来看看这个地方,那这个地方来看看,那我们说在这个什么第一个环节上面,用户如何发起整个登录流程,需求说的很明白了,需求说什么。在登录页面上边输入用户名密码,那我们这地方叫什么,这用户输入用没密码。用户名和密码输完之后干什么?
14:03
对这种需求跟我说的很明白了,输完之后你就干什么,对点登录按钮或者按个回车是不就可以了,对输完之后用户点击登录按钮,登录按钮,然后呢按钮。对,或者按回车键,回车键摸他一点登录按钮,或者按个回车键,大家看发生了什么事。一点他发生什么事,判断验是不是判对,判断是不是合法的,是不是这总那判断是不是合法的,是不是得在后台判断了。因为我们的数据都在后台存着呢,你到后台数据库上去比对账号是不是正确,密码是不是正确,然后是不是被锁定了,是不是过期了,IP是否允许,这些是不是都在后台判断对上后台判断你这个现在在前台是不是得在得向后台发请求了。
15:05
那向后台发请求,那你后台得提供一个CTRL接收并且处理请求了,所以大家这些类都是逼着你创建的,这需求推动你创建,如果你以后一个项目里创建几百个类不认,你一拍脑子我随便创建就创建了,需求推动性创建了。每一个类,每一个方法都不是随便转的,所以那在这边提供一个CTRL,提供这个CTRL是在是新创建CTRL,还是在原来CTRL系上加方法。创新创建还是还是在原来加工想一想。按原在原来那个原来那个那个什么,对,那你看这个品出了处理请求,处理完了之后返回响应,你返回到哪个页面,那个页面所在的那个目录。它会占一个cler,看那个目录以前对应的cler写没写,如果写加方,如果没写新状态CL是不是这样的,那我这个cler。
16:02
将来处理完请求之后,返回响应信息,返回到哪个页面去?我一点登录要验证了,他返回详信息返回到哪了?对就是这个页面是吧,就是返回这个页面,大家能理解这个意思吗?诶你们老师不是跳转到这儿吗。不是跳绳对,成功了才跳转,这失败了呢,我还不跳转到那去呢,我还还是返回到这个页面上,在这个页面上面看成功了再跳转,从这个页面跳转失败了,我还不跳转,大家能理解这个意思吧,所以响应信息应该还回到这个页面,成功了跳转了,不成功不跳转,所以还访问这个页面,那这个页面所在的资源目录在哪了?是不是在这个地方呢?这个页面就是登录页面,是不是在这个目录下边,这个目录下边对应的ctler有没有有叫什么对userr crler,所以这个地方不用创建新的ctrler干什么,Ctrler在我们刚才已经创建好了那个ctrler,在这个ctrler基础上加方法,就大家能理解这个意思吧,对,大家要跟上我的思路啊,你要不跟上思路以后你也得这么写,你到公司里边也得这么写。
17:23
知道吗?所以大家我们到公司里边你也得这么写,你不能说到公司里边别人都这么写,你随便创建很多品牌,一天一天都创建几十个上百个类。啊,只要做一个请求,什么创业感么?做个请求干什么,那别人都不想跟你知吧,不想跟你合作是吧,你你创建那么乱七八糟的都是些类道对啊,所以呢,你必须得理解这种,所以向他发一个登录请求道发一个登录请求知道吗?这么发一个登录请求,那这个请求大家想一想是同步的还是一步的。
18:09
对对,是不是异步请求,呃,为啥发异波请求,同步请求和异步请求有啥区别吗?个页面对同步请求整个页面都刷新是吗?然后呢,异步请求是什么?局局部刷新异步请求能能整个页面都刷了,E步行求对可以也可以是吧,也可以,那你为啥说那什么时候用同步,什么时候用异步呢。对看情况,看什么情况,什么情况下发同步的。对,如果是,那你看响应回来是不是要刷整个页面,是不是这么响应回来,假如说需要刷整个页面,同步的还是异步的。同步是吧,那异步也行,为啥不用异步呢?对,费劲麻烦是吧,所以优先用同步,如果局部刷新知道吧,所以优先用同步知吧,啊那然后再考虑用异步知道吧,优先用同步,假如说做局部刷新呢?响应回来之后,我想做局部刷新对什么用?是不是只能用异步了?对,只能用异步。
19:25
那假如有一种情有有有,还有还有这种情况,假如我响应回来之后,不一定是全局刷还是局部刷,在某些情况下,全局刷,在某些情况下异步刷用同步还是异步异对对,是不是得用异步,如果用同步可不可以我可以同步的话,不管什么情况下是不是都是全部折知道,所以那我们就总结三句话,如果全局刷你确定了同步,如果局部刷确定了异步,如果呢,既可能全局刷,也可能局部刷,根据返回器条件来确定判断是不是只能也是只能用异波,那我们这个地方用同步还是异步,对异步他死在哪种情况。
20:12
部对第三种既可能全局发,也有可能局部发,知不知道吗?那将来就看看登录成功了,失败成功全局发,局部能发,这个失败不法知道吗?所以我们知道义不创新,这个义不群求不群求,所以这些大家要总结,要会用是吧?你学了语法了,你得会用,知道什么情况下用什么技术,这才是我们真正学会了是吧?啊,这才是最难的是吧?你光语法谁不会啊,看一眼我,我也会知吗?谁都会是吗?语法谁都会,关键是语法学会了咋用,这才是最难的,这才学编程是最难的,所以你看到我们这一阶段没有新的技术,但是他是最难的,他要把你这些技术用起来。你知道什么情况用它啊,好,这是异不均,异不均又需要提供什么参数呢?
21:06
所以你要发请求有可能带参数,需要提交什么参数,对,那需要什么提交什么参数,我们这个用户没密码是吧,这样。那假如别的地方呢,有谁来决定需要提提交什么参数,对需求需求哪一块需求是吗?看谁呢?到底提交什么参数,提交不提交参数,提交几个参数,提交哪些参数,看谁呢?看下一个环节,看这个CTR的处理请求的时候需要什么函数,他需要什么,你给他传什么。他如果不需要你传也白传,除了营养效率。如果他需要,你没给他传这个请求,他就处理不了,是不是这样的是吧,所以你看他需要什么参数,那这个CTRL需要什么参数呢。
22:00
对,但是他,那他需要什么东西,看他干什么事,他干什么事。他得验证这个用户名密码是不是正确,是不是这样的,那你得把用户密码是不是得给他,再一个他还得知道看什么,是不是需要记住密码,如果需要记住密码,是不是我们以后我们以前学过,是不是得通过cookie来实现啊,他要往外写cookie,到底要不要往外写cookie,是不是得把是否记住密码那个状态传过去啊,所以这个地方他为了做这些事必须知道这几个参数啊,这个logo音艾叫账号。还有啥呀,密码logo in p WD,还有一个呢,Is叫remember p WD,是否记住密码,然后呢,把这三个传到后台,那这个controltrl就能够处理清楚了。他该判断的就判断了,知道吧,该判断就判断,然后呢,需要记录面,他又往外往外写库费啊。好,这个我们就给大家涉及到这后边还有呢,这些分析我们说了,我们这一届呢,最重要的任务就是就是这个流程图啊。
23:05
刘中农,你会了语法就好写了,知道吧?啊,所以大家这个地方后边还有我们一时半会儿我们也说不完这个下课我们再再怎么涉及到这儿,那我们这个阶段给大家讲课的时候,跟以前不太一样了,跟以前怎么不太一样,以前大家讲的那些每天讲几个知识点,老师给大家讲的,按知识点一块儿一块儿讲的挺好,咱们这个一个功能很长,所以有可能一天一个功能做不出来,就一有一个功能做不完,那怎么办,都是跨天了知道,所以我们有可能以后一个功能做一半,那这今天就就做到这儿了,知道吧,那下一天那么接着来做,所以它的功能比较比较多。它不是一一节课两节课就完成一个功能,知道吧,所以大家那你课下怎么我们讲到哪儿,你看到哪啊,你看到哪,你写到哪儿就行了,知道吧,好把我们课堂上写的代码你看一下都要独立的完成了,独立完成你没你别考我的代码知道吧,你可以参考一下,你说哪个思路跟不上了,你可以看着我的图参考一下,知道吗。
24:08
好,当然你课下情况,你得自己写代码,自己不写永远不会写知好这时候我们给大家说的这个我们这一块这样好,这个我们先设计到这儿,明天接着来做,好在今天到这儿吧,大下课好下面呢,我们继续来设计我们这个用户登录的这个流程,用户登录流程好那那现在这整个流程呢,它已经推动到推到这个u user control这个地方来了。推到这个CTRL了,那推到这个环节了,这个CTRLL接触到请之后他干什么事呢。他干什么事儿?对,CTRL层代码三个职责,我们前面给大家分析过,第一个职责干什么?对接收请求是吧?接收请求你只要给他分配ul是不是他就可以接收到了?对接收请有参数是不是得收集参数,对需要封装还得封装,这是咱们前面给大家讲的代码分层的原理,所以这个地方接收到请求之后有参数获取参数,怎么获取参数?对定义行参是不是就可以了?对什么spring VC接收参数的话,定义在CTRL方法的定义行参就可以接收到了,接收到之后是不是把它们封装一下子,这参数比较比较多,将来这些参数要传给service层,传给map层,传给S语句,那么传的时候如果是分开传的话,将来那些方法都得定义很多的行参,这个时候我们最好给它封装一下是吧?那封装一下封装参数,那封装参数分装是什么?
25:47
在你们以前都是封装什么?是不是用的最多的可以把这些多个参数放到一个map里边呢?对,也可以放到一个实体类对象里边,是不是也可以了,这是大家最常用的两个封装参数的一个设计对象,那我们这个地方封装什么,它有标准的什么标准我后边再详细的给大家说,这个地方我就封装到一个map里边,可不可以啊,对霸这一参数分装map,我这个地方就分装map,为什么分装map,后边详细的再给大家说啊,我一次不给大家说太多,太多的话,我们说我们这个说的太多的话,我们这个功能啊做的就这么,就是个思路就不明确了,是我们这个地方就封装map,要放到map,把这参数放到map里边,这样的话大家接收L到请求,参数获取到也封装好了,CTRL存的第一个指责就完成了,CTRL第一个值导完了,那CTRL第二个值责第二个指责干什么?
26:41
对处理业务对吧,处理业务,那处理业务干什么,其实说白了就是处理数据,处理数据,我们这个地方处理数据,处理什么数据。是不是就是根据这他输入的账号密码到数据库里去比对一下,比对看看账号密码是不是正确的,正确的怎么再进一步的判断这个账号,这个账号是不是合法,那不正确不正确,那在这个地方就给他返回登录失败了,知道吗?所以说要去比对,怎么比对,那说白了其实就是查询去到数据库里边去根据账号密码去查这个用户去看能不能查出来,如果能查出来,说明账号密码没问题,再进一步的判断是不是过期了,是不是状态被锁定了,是不是IP受限了,再进一步的判断这些,那如果说没查出来,没查出来说明要么账号错了,要么密码错了。
27:33
那这道吧,所以说大家那这个地方,我们这个地方处理业务,其实说白了就是什么,根据账号密码到数据库里边去什么查询用户去看能不能查出来知道吧。所以说那插出去的话,CTRL一般来讲他不自己去查去啊,因为他是控制层处理业务,他不他不这么他不自己去处理他的调查呀。对调service层,让service层去具体的处理业务,但是他会决定调哪个service。
28:05
你不能说随便调一个service就行,所以他是控制流程的,真正干活他不干,它指定让哪个service去查去。知道,所以它是控制流程的嘛,控制层它是控制流程,那他这个地方调哪个service呢?调谁的service。对,调查询的是查询的,那查询的如果是surface,我们以后会创建很多的surface层的类,那调哪一个service层的类呢?对user service,就是为什么调优service呢?万一还有别的市场活动的service,还有什么线索的service,还有交易的service,有很多service费车类,为啥掉优券消费者呢?对他因为他查询的是什么,是用户那个表是不是这样的,他得到用户表里边去比对,大家明白这意思吧,这样所以大卡我们前面跟大家说CTRL这个类到底要不要创建类,还是在原来类基础上创建方这个创建方法。
29:06
那么到底创建几个CTRL类?它的什么?它的依据是看将来这个CTRL处理完请求之后,返回响应信息的,返回哪个页面,那个页面如果占一个独立的资源目录,一个资源目录对应一个CTRL类,那后边这些service层、me层和实体层。这些代码到底要不要创建新的类,还是在原来的基础上加双方?他们的原则是什么?他们的原则不是看资源目录了,他们的原则干什么?他们是处理业务数据的,他们是看表。一般来讲,访问一张表对应一个实体类,对应一个map接口,对应一个service,知道吗?一个表对一个表的访问,然后呢,调这个表对应的这些层层代码知道吧,他不看前台的页面,后台这都是后台的嘛,后台上面看访问的表前在这个CTRL了,看访问的那个资源目录知道吗?所以我们这个地方要什么要访问用户那个表了,要根据账号密码去查询用户表了,那得调用户那个表对应的service,那用户那个表对应service我们现在还都没写呢,下边我就设计一个用户那个表对应的service了。
30:25
那这个这个类我就直接写了,我就叫它了,对叫user service就见明之意知白吧,因为我要访问用户那个表了,所以大家跟上这个思路,我你说你以后你得自己去设计到公司里边是吧,你不能说我随便创建一个类就行,随便创建一个类,就你要是随便创建类,在公司里边把公司的代码弄的乱七八糟的。那可能可能你试用期都过不了知道,因为你没做过开发,所以你也得以后这么来设计,知吧,你也得这么去想知道吧,好这样的话大跟我们说,那说在这个service,我我们将来要一会要定一个方法,然后呢,让这个ctrler去调查,去调它干什么,根据账号密码去查用户看能不能查出来,那这个方法名叫什么,我这个这条线我就双击它在这写这个方法名,这个方法名我就设计了,我就设计了,但这个方法名理论上来讲随便写,但是呢,一般来讲建明之意,看到方法我就知道他是干什么的。
31:22
那我这个地方就准备写这个,它既然是查询用户的,我就叫query query,然后呢,U知道吗?BY根据什么去查,叫log in艾和那么and pwd根据账号和密码去查询用户,它这个方法小括号是方法的标志,必须带上小括号,不带小括号它就不是一个方法,知道吧?好,那方法里边要有参数,那这个这个方法大家看我们说它的参数是什么类型呢?什么类型的?对,什么类型的。
32:02
对,Map前面都封装好了,是map是吧?对,是map前面都封装了,参数都在这个map里边是吧?把这个map CTR的都封装好了,把map传过来就行了,一调的时候传过来就行了,那传过来这个service要访问数据库,然后呢,根据账号密码去查用户了,那我们说service层,它不能直接访问数据库,按照我们代码分层的原理,然后呢,真正访问数据库是哪一层代码,对do层或者叫map层都可以,因为我们用my body my body叫映射技术,所以我们一般来叫叫map,但你叫刀风也行,知道吗?那所以说它得去调什么,调map,调某map,那调谁的map?对我们说了service层、map层还或者叫刀层,还有实体类层,一个表对应一个实体类,对应一个map,对应一个service,那我这个东西访问用户,那个表肯定调用户的map。
33:00
所以这个类我就叫user map,然后呢,在这个user map提供一个方法。然后让这个service调过来,然后双击它,这个方法名叫什么啊,理论上随管写,那我这个地方就建名之意了,既然是查询的,我就叫select,然后呢,这个地方来个U。知道吗?让道呢,根据什么查摆根据账号知道吗?对,按照密码去查它这个方法小括号在里边传个参数什么类型的,对map知道吗?然后呢,这个地方知道好这是我们说的这样,然后呢,大家这个map就可以用啊,通过my body去访问数据库了。访问生序干什么,那这什么肯定是执行so狗语句,那他就什么执行so狗语句,在这个上面执行骚狗语句,其实现在大家就能够大概想象一下,这个Soo语句是个什么样的造语句啊。是吧,对查询的那就是c select的什么这些语句是不是这样的,其实这个代码什么这个流程你设计的时候,其实代码你要是说做熟练了,在你脑子里边已经已经写好了,剩下的就是一个敲的一个过程,知道吗?然后执行骚手句,然后呢去查询用户知道吗?那执行完了之后,把执行的结果往回返。
34:19
那么用这个虚线往回返知道吗?那返回值,那它返回值这个方法返回值是什么类型的。纺织什么类型的?那查询数据,他要把查的结果返回,那查的结果那就把这个用户的信息都得返回了,用户的信息,那用户有很多字段,这些字段以什么形状往回返,对实体类对象往回返知道吗?实体类对象往回返,那你要查一条记录,是不是以送到实体的对象往回返了,对你要查询一条记录,那这条记录肯定是封成实体对象往回返啊,你要说只返问一个印的,那他这就是一个数量。
35:00
我将来要拿到这个用户的信息,所以封装至实体类,我们那封装至实体类,我们这个地方是封装实体类,那这个实体类那就这个U。那是一个,那封装是几个实体类呢?那你看他这个地方能查出来几条记录,他是根据查询几条记录,他根据账号和密码去查,一般来讲在一个系统里边,这个账号能不能重复,对不能,你要是重复的话,那我说那是哪一个账号,谁是谁啊,所以根据账号啥账号是唯一的,不能重复,如果能查出来的话,是不是一定只有一条记录,对,一定只有一条记录,所以只有一条记录就放到一个实际的对象,它不可能反一个list,知道吗?所以说就是一个实际的对象往回反就行,知道吗?然后那这个什么mapper查询了一个什么一条记录封装设计对象返给service,那service拿到之后继续返回给C。谁调到返回给谁,那把这个什么UR返回给ctrler知道吧,那这个ctler就拿到这个URL了,就拿到URL了。
36:05
拿到user之后,他已经比对完了,根据账号密码去数据库里边比对完了,比对完了大家看第一什么,他这什么第二个职责就完成了数据,你说比对完了,那他的第三个职责了,就第三个职责是什么?根据比对的结果返回响应信息,知道吗?根据处理的结果发入相近,看看比对成功了还是失败了,那么成功了还是失败了,那我们这个地方根据,那么然后呢,查询结果,结果然后呢,生成响应信息,响应信息,这是响应信息,这是我们说controller的第三个指责,知道吧?那如何根据比对结果生出相析,那就看看这个U查出来没有,怎么查出来怎么判断,查出来没有,看看它是不是等于now,如果等于闹,说明肯定没查出来,没查出来说明什么?用户名或密码错了,是不是这样的,对,因为系统里面压根就没有这个用户名或密码,那就错了是吧?那如果说它不等于那呢,是不是就一定登录成功了呢。
37:10
不一定,还得进一步的判断,根据查出来这个账号,进一步看是不是过期了,过期也是登录失败,然后还得判断是吧。是不是状态被锁定了,那如果既没有过期,也没有状态被锁定,是不是就一定整成功了呢?也不是,还得判断什么IP是否受限就知道吗?如果这些都满足了,都没有问题,这个时候才登录成功。是吧,查出来了,而且这些都是满足条件的,这个时候才登录成功,否则只要有一个不满足条件就是登录失败,然后呢,把这个比对的结果,我们说这样的话,判断的结果以响应信息的费用返回到前台,因为前台发的登录请求,我这个地方要给前台返回一个处理登录的一个响应信息,响应返回前台一个响应信息。
38:07
那大家想一想,这个响应信息是个什么样的信息,是个什么样的信息?那从格式上来讲,前面发的是个什么。异步请求,异步请求是不是阿贾克斯发的响应信息给到阿贾克斯,对,你要把这个响应信息给阿贾克斯,阿贾克斯能解析的数据,对是个什么?对,杰森,你要给他返回一个网页,阿贾克斯能解析吗?不能,就像咱们昨天往回返回网页,肯定你这个地方不能返回网页了。你要返回网页,阿贾克斯解决不了,那你说老师你昨天都是返回网页,昨天是同步请求,所以我返回网页都是跳转页面的,那这个地方是么是异步请求,是一个什么阶层字符串,从格式上来讲,返回的一定是个阶层字符串。知道吗?从格式接S,那杰森字符这二再看我们说,那我们习惯上都是这么一个大括号,这是个杰森的一个对象,知。
39:05
我就返回这么一个字符串,那这个字符串里边包含什么呢?里边包含什么呢?这个豆腐串里边。对这个字符传里边包含什么,谁来决定呢?对它里边我怎么想这个事,那我你我不能说我随便,我随便就返回一个东西啊。他谁来决定的,我我咋想这个事儿知道吗?谁来决定?我们说原来我们给大家分析的时候,前面发请求带什么参数,谁来决定呢?对,后边ctrller来决定的,Ctrller怎么处理,需要什么参数,你给他提交什么参数,CTRLL不需要你提交也白提交,除了影响交流,Ctrler需要,如果你要不提交,那ctrler不不能处理请求。那我这个地方CTRL要往回返出去了,谁来决定呢?
40:02
谁来决定?对前台来决定,看看这个浏览器需要什么,前台需要什么数据,你给他返回什么数据。前台不需要你返回也白返回,除了影响效率,那前台如果需要你没返回,说那前台不能进行局部刷新,那能理能理解这个意思吧?对,看看前台需要什么。但是关键是我怎么知道前台需要什么呢?那个。我怎么知道呀?你你咋想这个事儿,你不能说我一拍脑子前台需要就需要知道这个数据了,那你你得有原因啊。在这次里面写那个。对跳转的业务业务条件,那那你怎么知道跳转呢。你这个重点对,那你说他就是这样工作,他就这样,谁告诉你是这样做的,对需求告诉你了,看需求吗?需求人家前面做好几个月的需求了,就是告诉你怎么做,你知道吗。
41:12
所以看需求,所以说大概我们是所有的依据,我们开发的所有的依据全部都是需求,知道吧,全部都是需求,你得会分析需求,你看这个需求文档是吧,好几百页的文档,他为什么做好几百页,因为他很重要,在别人看来好像都是废话,但是对我们开发人员的来讲的话,这是很重要的,你唯一一个依据就是需求知那需求怎么说,需求怎么决定,需求给你说了,如果登录成功了,告诉你要跳转,怎么跳转,这都是咱们语法的事儿,咱们前面已经学过很多次了。那就跳转,如果登录成功了,就直接跳转就行了,怎么跳转呢?根据咱们以前学的是不是window location就跳转了,对这样,那如果登录失败了呢。对,提示信息页面不跳转。
42:03
所以说大概总的而言,前台只需要知道什么,怎么跳转,我们我们都已经自己会了,那前面前台只需要知道什么对成功或者失败,成功就跳转,直接写一行代码就行了,失败呢,不跳转干什么?提示信息给他弹给他什么提示一下去了,所以你得告诉他为什么失败,把那失败的原因告诉他就行了,返回到前台就行了。所以总的而言,前台只需要知道这么两个数据,第一个成功还是失败。第二个,如果成功了无所谓了,如果失败了,还得把失败的原因返回到前台,就前台就需要这两个数据是吧,所以你只需要返回这两个数据就行了。是吧,把这个这俩数据放到这个阶段字符串里边就行了,那放到这个阶段字符串里边,这俩数据返回大范围的。其实那种理论上来讲,那就那种理论上来讲,那就那那咋咋都行,我返回一个一成功了。
43:00
然后呢,零失败了,或者出成功了,False失败了啊,或者说什么这个什么,然后呢,这是一个信息,然后再返回一个信息,就把那个提示信息返回就行了,这道吗?然后呢,一假如说如果成功了,就是一或者处这样就行了,如果失败了零或者是false,然后呢,把它失败的原因返回就行了,按理说这么返回就行了。但是我们做项目一般来讲这样写太随意了,我说这样写太随意,而且以后维护解析不好解析,那怎么办呢?这他既然是个接森的对象,接线的对象呢,接线的语法都是什么?属性名属性值属性名属性值,那我这个地方什给它两个数据分别起上属性名,然后呢,把属性值复制给他就行,首先一个属性是表示成功失败的,这个属性我就叫做扣子,表示一个处理的编码。然后呢,它的值是一个什么,如果是成功了,我就返回一。
44:01
否则如果失败了,我这个值,这个属性值给他付个零就行了,知道吗。那么将来前台拿到之后,直接获取了这个对象呢,Q的属性就行了,看是一还是零一成功了跳转,零失败了不跳转,然后呢,提示信息,这是一个数据了,再来一个数据,那个提示信息,提示信息也给他定一个参数属性名叫message,然后呢,如果失败了,把那失败的原因复制给这个水印就行了,这样的话,他看我就返回这么一个阶层。前台只需要知道这俩数据就行了,我把这俩数据放到一个对象里边,从前台将来解析就行了,我返回这个数据,大家能理解吧,能理解吧。我仿可以吧,对,可以啊,这些大家以前没写过吗?简写的比较简单是吧,但是我们做项目我们就稍微这个正规一些了,是吧,所以大家要跟上我们这个思路是吧,要能够理解是吧?好,这是我们说的,这样的话,我们把这个响应信息返回到前台了,返回到前台,返回到哪儿了?
45:11
那肯定返回阿贾克斯的回调函数了,那阿贾克斯的阿贾克的回调函数干什么?拿到这个,拿到这个杰森串之后怎么呢?对,看看里边有什么数据吧。然后呢,我们把它叫解析杰斐,对解析J斐啊怎么解析那什么那直接什么那个data塔点PRO1还是零,然后data大点message,那就拿到这个,这值了,知道吧,然后拿到之后呢,知道吧,如果是一跳转,如果是什么零不跳转,然后呢提示message就行了,知道吧,所以我们把这个过程叫做渲染页面,好这样的话的话,我们这个流程就设计好了,知吧。这是我们设计的第一个稍微复杂一点的流程。这个流程,但这个流程你必须很清楚,每一个环节为什么这么做,你必须很清楚啊。
46:03
所以课下大家也要再看一看这个流程,我们是怎么设计的,怎么想的,你的脑子以后也要这么想知道吧。所以这一个过程,我们说这个过程是改变大家这种思维方式的,应该说这个大家应该好好琢磨,琢磨是因为这个不容易,应该说这些你改变人的思维方式,这就不容易知道。
我来说两句