00:01
是好,那我们这个流程后台就行了,下边就写前台了,前台我们说就两件事,第一个发请求,第二个处理响应好,那后呢发请求,那我们首先来看什么是发请,那发请求根据我们的这个需求,那说用户来到登录页面之后,输入用户密码,一点登录按钮,或者一按个回车就发起了。所以下边我们要做的事呢,就是给这个登录按钮加个单击时间就行了,它将来一点登录按钮就要向后台按了,知道吗?所以下边我们来做这个页来做这个事儿,给登录页面上面有个登录按钮来看一看登页面就这个页面,它上边有一个登录按钮,大家可以看一下登录按钮就这个知道知道吗?给它加个单击时间一点它就发请求了,知吗?但是这个按钮大,你会发现它是一个什么?对,Submit是吧?Submit什么意思?对,提交是吧,提交他也可以向后台发请求,但是他发的请求是一个什吧?对同步请求,同步请求响应回来之后,你不管成功还是失败了,是不是整个窗口都是么都变了是吧?那我们这个地方显然不不是这样子的,登录成功了,我们整个窗口变了,登录失败了,我们是不是还不变了,对,所以说不能用submit me,那这个地方给他改一下行了,改成什么对八。
01:25
啊,叫普通的button按钮就行啊,当然我们说这个按钮button和萨显示效果是一样的,就显示效果一样,就是它作用是不一样,知道吧?好,这是我们知,那下边我们给它加单机事件了,那加单击事件怎么加呢?对,那我们知两种方式是吧,你知道最原始的那种方式,咱们以前学的什么对on什么什么加什么事件on什么什么是吧?单击事件on可雷,双击事件on BB可雷是么?然后呢,还有一些别的事件,鼠标悬停事件是吗?Mo over,鼠标离开事件了,对,Mo off是吧,键盘按下事件知道吧档是吧?键盘弹起事件了,对,K up是吧?啊,得到焦点事件了。
02:11
On focus是吧?啊,失去焦点事件了,对on这些大家都要会是,那我们以后是吧,经常用的这些,那我们这个是单机实验。一按理说on click是在这里边写什么,调某一个函数是不是就道吗?那么将来我们定一个函数,把代码写到里边行了,但说这种加实验方式,一般来讲我不推荐了,那为什么?你看这里边这代码是不是GGS代码,那你看这些代码在干什么?ATM2标签GS代码A标签混在一起,将来你的代码很难维护。因为他们不是一类代码,它甚至都不是一门技术,知道吧,将来我们这个页面,我说现在我们页面比较简单,以后会有好几百行,甚至上千行。如果你把A加码和GS代码混在一起,将来你很难维护。
03:01
所以一般来讲,我们知道GS代码写的GS代码里边,然后HTM代码写到HTM代码里边,所以我们加事件这种方式呢,一般都是在GS里边给加,在G这边怎么加,就在那个入口函数里边加,那在入口函数里边给元素加时间咋咋加。获取要那个啊,获取那个按钮的ID,对拿你要给哪个元素加事件,是不是先获取那个元素,拿到它的解块的对象后边调什么事件函数是不是这样的,调不同的事件函数加不同的这个事件知道吧?所以我们这个地方,我们将来在入口函给这个元素加视角,加数角,我要获取它的是吧?对,获取它的这个解块对像获取解块对像我们从ID选择器获取最简单了,所以我们就给他起个ID,但这个ID的名字叫什么就无所谓了,我这对我就简单写了登录的叫log in是吧,Button是吧?Button表是什么按钮的意思是吧?所以我们这个地方来给它加个ID,然后呢,在这里边加个入口函数就行了。
04:05
对入口函数为什么加在入口函数,因为入口函数当整个页面都加载完了才执行入口函数,所以这些元素也都加载完了,那什么就可以为加视角了,所以这个地方加个入口函数,那入口函数咋加呢?对square的是属于它入口函数属于GS的是吗?属于GS的代码,这时候我们说这然后呢,Dollar,然后呢,是不是这样呢?在这边写一个什么三个谁,那么当当整个页面加载完会自动掉这个函数。我就在这个函数里边给我的元素加视角,写在这里边就行了,对,所以下边我要给我们的入给那个登录按钮添加单击时间登录按钮添加单击事件知那我你要给他加视角,我首要拿到它结块对象对选中它ID选择器是不是这样的,然后呢,加视角调视角函数对叫什么对可Li什么单什么单击时间的,如果双击时件DB可Li,然后呢,如果是鼠标全屏时件Mo over等等这些。
05:19
那我们说这些事,这些函数都叫事件函数,是给我们的事件一一对应的,而且事件是什么,他们的函数名就叫什么,大小写都不带变的,知道吧,所以我们说这种方式给我们1ON那种方式,那么on可on那种方式加的方式基本上是一样的,一样的,它们在那种方式加试角能加上,在这个地方一样同样不能加上,所以我们这个地方,那它这个函数加一个小括号,函数是那吧,小括号是函数的标志,那么这样的话就掉这个函数了。这是一个可Li是个函数,叫事件函数,那么就给这个元素加上单机事件了,那加上单机事件调这个函数的时候,这个函数里边有个参数,这个参数本身是一个对函数知吧,诶你说老师这个函数怎么能做参数呢?我们说在GS是弱类型的语言,在GS里边函数跟变量一样,跟数据一样,可以作为参数直接进行传递,那它这个什么传一个这个函数的含义什么?就是当这个事件上这个按钮上面发生单击事件的时候,会自动触发这个。
06:25
对,我们把代码就写到这里边就行了,写到这里边干什么?两件事发请求处理响应知道吗?就这两件事,发请求的时候有可能会有参数,那首先得把参数获取到,所以前台首先什么来对收集参数,收集叫收集参数,嗯,收集参数是吧?因为这些参数是散落在页面的各个角落,我要想发到后台,我得把他们都拿到。那拿到那都有哪些参数,那你看看哪些参数,我们已经设计好了,就这三个参数。
07:01
那就拿就行了,首先这个账号怎么拿,是不是这个输入框里边的值啊,来获取输入框里面值就行了,那获取输入框里面值咋获取。对,通过解块获取是不是就可以了,那解块拿到它的解块对象调VL是不是就获取获取到了对调V,那那拿到它解块对象也得给他起个是吧ID是吧,用ID选择器获取它解块对象,对那这个ID值你随便起了建名之意,我就叫log in艾知道吧,然后呢,这个地方,然后呢,来获取它的值,那获取它值来一个包啊然后呢,这是它的解块的对象对调什么对李欧这样定一个变量,把它保存了,这个变量名我也随便起,就叫建名之一,我就叫劳文,但然这个地方有点问题,有啥问题,假如我输一个张三是吧,张三,然后咱说用户有的时候不小心是吧,打一个空格你看吧,然后呢,他就输别的了,打这个空格你能看出来吗?
08:08
就他发现不了,发现不了发到后台查数据查不出来,他说我们说的没问题啊,但数据查不出来,所以这个时候有的时候经常怎么干呢?对把这个空格给他去掉,不小心加了对吧?去空格咋去?对DOLLAR2负二叫吹去个空格,把前后的空格不小心加族给他去掉,那有同学老师,万一他这个用户名里边确实有个空格怎么办。他就是有个空格,你不也给他去掉了咋办?对不让他有,一般来讲这些用户名啊,这些东西一般空格都不会,就当来将来什么添加用户的时候会做验证,如果他这个添加这个用户的账号输入空格了,就提交,不让提交就添加用户啊,就做验证的,当然这些功能咱们没做,给大家提一下就行了,你以后万一的工作者做了,其实就是这没有空格,实际上就没有空格,所以给它去掉就行了,好,这是我们的账号,就拿到了账号呢,同样密码是不是一样的,对一样的,那给密码也得起个ID,这个地方叫log kwd啊,然后呢,来获取它就行了,这个地方来一样的道理,这个Dollar符号啊,然后呢,拿到解块就行掉VL这样就行了,那同样他也得去个空格,知吧,他也给他去空,其实这个地方去空格不去空格无所谓了,为什么他这如果不小心加上你看吧,这个地方他就说多了。
09:36
对用户能发现吗?能发现就怕这种发现不了的是吧,这样所以说,但一般来讲,我们习惯上也是这他自己输的,我也给他去个空了,他没有我大不了不去呗空,然后呢,这个地方点儿来个推,然后呢这个地方来一个这样,然后呢这个地方也是这样,然后呢,这个地方定个变量log音PWD这样就可以了,好这是我们说这两参数,还有一个哪一个参数对这个是否记录密码。
10:08
把这个拆个bos是否记住密码了,这个状态是吧,获取到提到后台,诶是否记住密码,他怎么获取。对,给他加个ID是吧,加个ID我就是这叫is remember pwd,那我要获取它怎么获取啊,对,拿那还是来ID来拿到ID呗,刀符号啊拿到他解块对象了,获取他怎么获取,有同学点点VL这样行吗?这不是这样是什么意思,对,他不管选中不选中,这个值是不是都一样的,对都是一样的,所以我只需要把它那个选中和不选中那个状态拿到就行了,不咱咱们回去。
11:01
我。在在哪个里边,这里边吗?这里边儿。拆开它看能不能获取到是吧。啊,其实大看真正是吧,拆了boss是不是选中这个状态大圣,它有一个属性值来决定的。对哪一个属性值,对check的属性值。如果是选中了check属性值是true,否则如果是不是选中check属性值是for,对,我只需要获取它的check的属性值就行了,那明白这意思吧,那获取这个元素的拆开属性值咋获取?对,有一个PP,我们以前学一个哪一个at t2是不是用来获取某指定的元素上面某一个属性值啊对,把那个属性名写到这儿就行了,知道吗?但是我们说这个函数呢,它有它是解块早期版本的一个函数,这个函数是用来获取。
12:06
指定元素的某一个属性值的对吧,这是我们这个地方来看一下第三个来一个,然后呢,来使用解query,使用解剖RY来获取指定元素的指定属性的值,在解剖RY当中,它有两个函数,一个函数是这个adt语法就少,你想获取哪一个元素的属性值,选择器选中那个元素,拿到那个元素的解块对象掉at条,然后呢,把这个属性名写在这,这样就获取属性值了,但是这个这种方式有局限性。什么局限性?事实证明什么这个这个方,这个函数只能获取那些值不是处或者false死的属性,它能获取到,如果这个属性值是true或者false的时候,这个函数获取不到。
13:04
所以它主要是用来用来获取那些那些元,那那些什么哪些属性,获取那些值什值不是true或者false的属性。属性的值是吧,就值不是出或者false死它能获取到,这是结块早期的版本,早期只有这个函数获取元素的属性的时候,就解块就推出来的时候,那后来大家程序员发现什么使用这个函数获取呢?只是出和封速的属性的时候,用它获取不到,所以大家都对这种什么结花也都提一些bug,提一些意见。那么解块它是开源的这种框架,那些开发人员一发现,诶,这个函数确实存在这种问题,有一些什么属性的值它获取的,所以他什么解块又推出了,后期推出来一个函数。
14:00
这个函数是对这个at tr这个函数做个补充,专门用来获取值是true或者false的那些那些属性。它的语法跟a tr完全一样,就是函数名变了,哪一个叫这个行,它也是要获取哪一个元素的属性,获取那个元素拿到解号对行调完要调这个函数prop模,然后获取哪一个属性,把这个属性名写到上知道吧。它这个函数是专门用来获取值,是对true或者false,对true或者false属性的值,知道吧。所以大家我们说这俩函数互为补充,以后你用的时候,你要想要用铁块获取某一个某一个属性值的时候,你就看它值是true还是false。是不是true或者false的就用它,是或者false能属于用它。
15:01
是吧,所以大家你这个吧,到时候你这个选一个就行知啊,其实大看我们以后学的这些标签里边这些属性大部分值都不是出入和否。只有极个别的属性是true或false。那现在呢,我们趁着这个机会呢,我问你一下。我们以前学的那些标签只是true或者false那些属性,有哪些属性?对,就是拆个bos这种标签的有个叫什么拆开的属性是不是直或者是包括对拆个bos上面还有什么属性,还有下拉列表里边有个属性叫什么selected是不是也是一个,也是一个,你知道吧,属性还有什么值是出火耗子属性。还有个只读的叫什么?对read only是么?Read only还有什么?对disable的还有什么?
16:14
还有啥?好像这四个是大家最常见的知,这四个是慢别的你知吧,你再遇到别的你要补充上就行了,所以大家也要会善于总结这些知,以后遇到这些属性获取他们的值,或者设置他们时候,别用at tr了,用PP,那我这个地方用什么?对,我要获取拆的属性值PP,然后呢,这个地方来一个拆值,这是属性值,然后呢,我们这个定义个变量,把它接收了VR来一个叫is remember,然后呢,这个是PWD,将来它的值是true或者false,到后台需不需要记密码,就是看它的值是出入还是false true需要记密码,False不需要记码,当然这个密码是否记住,我们现在什么,我们现在还没做到,后边我们就在完善这个功能的时候再做知道吧。所以这时我们说的这些参数都收集到了,参数收集到了,你将来要把这些参数发到后台,你得确保这些参数是合法的。
17:15
那怎么合法的?对得把这些参数做验证,你不能说不合法的是吧?一那么表单验证知道吧,不,不能说不合法的发的后代不合法的发生,后台肯定处理错误,那处理错误明知道处理错误你还往后台发,除了加重后台的负担,没有别的是吧?没有别的好处了,所以如果不合法请求都不发了,在这个地方就被拦截了。所以我们在发请求之前,先把这个参数做个验证。那这些参数我怎么知道,合法不合法,谁知道对需求知道需求说了。那么又没有密码,密码不能为空,如果密又没有密码为空,你还向后台发请求吗?你都不发了,他肯定是错的是吧?你发到后台,除了加重后台的负担。
18:04
所以他一定登录失败了,所以请求压根就不发了,是所以我就判断这个用户名密码是否为空,那你要判断如何判断用户名密码是否为空呢?对,我看看这一个账号是否为空,咋判断。对,它是字符串看怎么空,字符串是对看怎么弄,等于空字符串就是空的是吧,这这样就行了,这是我们这这样用双导,诶你说说字符串比较大小,怎么能怎么能用双等位呢。不是用一库吗。字符串比较大小,不是一裤子吗?对,E库则是Java里边的,你在显示Java代码吗?不是,这是GS代码吗?GS是弱类型的语言,任何两个数据比较大小都用双等号比较。不管什么类型的,在GS里边所有的数据比较比较是否相等都是用双等号,是否不相等用叹号等号知吧,这是我们说在GS里边任何两个数据比较大小是,那我们这个地方如果等于空错,那我就认为什么它没输入,它没输入呢?给他提示一下,告诉他请输入是吧?或者叫用名不能为空知道吗?那提示完了,后边的代码发请求的代码还需要执行吗?不需要了,那密码右名都没输入呢吗?肯定登录失败了吗?所以后边请求所有代码都不执行了,不执行怎么办?对,Return return。
19:38
Return什么意思?对,结束这个函数的执行,后边这个函数题,后边再有代码就不执行了,直接到此为止,这个函数就结束了。这时候我们说到这样,如果用户名为空的话,那如果为如我们要不为空呢?这里边是不是就进不来了,进不来继续往下边走,往下边走是不是就一定发群攻,对也不一定,看看密码是否为控是吧,下边再看断密码是否为空二这个A服好,那它它这个空也是一样的,看看怎么是空串,如果等于空串进里边,然后呢,在这里边来给他提示一下,告诉他密码不等于空,知道吧,那他提着完了,同样道理,后边代码都不执行了,直接把整个函数都结束了,知道吧。
20:27
那如果说密码也不为空呢,那这里边儿也进不来,进不来继续往下走。往下走,用户密码都不为空了,这个时候大家看是不是数据都是合法的了,对,按照需求来说。这个码数据都是合法的了,那这个时候就可以发请求了,那发请求,那我这个地方就可以发送请求,发送请求那根据我们的设计发异步请求,对,这时候我们设计好的,如果你要不设计好你这个地方你就犯畴了,发同步的还是异步的呀,所以你就不知道了,所以你要设计好直接写代码就行了,异步请求咋写啊,对,二加格四,这里边传个对象作为参数,这个对象里边有一系列的这个参数啊,第一个参数最重要的URL表示你要把这个请求发到哪去。
21:20
我们要发到哪对发到这个CTRLL里边去,发到这个CTRL,这是不是把这个URL写到这就行了,对CTRLC拷贝发到哪,放到我们这里边这诶那牛老师你咋前面不带斜杠啥的。对,我们说了所有的ul在这个页面上都从哪我找杯子往下找,对杯子往下找,杯子找到哪了,前面是不是有个斜杠,对,直接往下我转这资源就行了。好,这是我们这个地方就行了,然后呢,继续来啊,继续来下边什么还有一个参数叫data,这个data塔表示什么意思?对,向后再提交的参数,那就是参数吧,一个账号,这是个参数名,冒号后边的参数值,然后呢,继续这个是密码,这是参数名,这是参数值,然后呢,这也来一个是否记住密码,这是参数名,这是参数值,当然我们说这些参数名你可以随便取。
22:22
但是后边这个参数值都是什么呢?对,后边参数值都是上面的变量。真正接到后台的可不是这些什么老果印这几个字母,是这个变量后边真正的获取表示的这个值,代表这个值,明白这个意思吧,就我这长对这个地方再给大家强调一点啊,这些参数名随便,虽然是随便起的。但是要和你后台controller接收参数的时候,这些行参的名字保持一致,否则这也接收不到,就这意思知道吗?所以这些数据都是对应的,所以你必须得清楚的知道吧,好,这时候我们这样下边来看这个什么来一个什么type type表示什么,对请求方式是吧?那这个地方可以写什么post或者get是不是都可以啊,我们就写post了是吧?那这个地方大家先记住,能用postose我们就用postose是吧。
23:18
啊,为什么我后边给大家解释,有时间知吗?好,然后呢,再看T后边还有一个参数叫什么?对data塔T知道吗?这个data t表示什么意思?对返回响应信息的类型是吧?我们就是杰森知道吗?好,这样的话再看我们说前台的第一个职责就完成了,发送请求有参数,收集参数,需要做表单验证,和表单验证都重要,参数都验证好了,发请求就这么发就行了。下边它的第二个指动处理响应,呃,处理响应是在回调函数里边处理的,然后在这个回调函数边有个data,用来接收后台返回到相应信息,在我们这个地方就是这么一个接线字符串,知道吗?
24:05
那下边我们叫什么解析杰森渲染页面了,那解析杰森怎么解析?对,就是看看这个杰森自符串里边这个Q的值是一还是零,是一成功了,跳转到主页面是零,不跳转提示一下就行了,是不是这样的,那就来看看我如何获取那个Co的值是零还是一呢?对,它是那个对象得塔就代表那个对象,那获取那个对象里边某一个属性怎么获取啊对,点属性零就行了。它是零或者一,那如何判断等于零还是一啊对双等号在GS里面任何两个数据比较大小都是什么双等号知道吧,然后呢,后边等于几等于一,假如说。如果等于一说明什么?对说明登录成功了是吧,后台验证通成功了,成功了怎么办?对跳转到业务的主页面,跳转到业务的主页面知道吗?跳转到业务主页面,这是我说那跳转业务主页面,大家看看哪个页面就这个页面。
25:13
一点呢,就这个页面,看看这个页面是谁来,你看啊,上面这个沃奔驰是不是业务空能,它的主页面有个引袋子,就这页面啊,这个页面大看就这个在我们这个代码里边,就这个页面。对,沃克奔驰下边有一个就这个页面啊。从这直接跳转过去,能跳转过去吗?过过去为啥过不去?对在YB音范上,从外界不能直接外界什么,因为知这不是我的代码吗?这个代码将来运行的时候在哪运行的,在浏览器上嘛,GS代码是在浏览器上运行的,所以从浏览器直接跳转过来,跳转不过去。知道吗?所以你直接跳转不过去,那跳转不过去,那时候大家看那先说怎么跳转啊,先说怎么跳转,对是不是跳转CTRL了,如何跳转CTRLL去。
26:10
对window点对location是吧,其实大家从理论上来讲应该是这样,应该这样想的,跳转页面,跳转到某一个页面什么意思,就跳转回,那就是跳转页面回来之后,是不是把整个窗口都得覆盖了。说怎么把整个窗口覆盖,其实就是对于一个页面发一个同步请求,响应回来之后就就覆盖了,覆盖是不是就跳转了,对覆盖其实就是跳转了,所以就像一个页面发请求就行了,发一个同步请求,明白吧,因为同步请求回来之后,它整个页面覆盖它是跳转,那发同步请求怎么发?对,三种途径,地址栏超级链接放表单,在这个地方有超级链接吗?在这个的方,我想通过超级链接跳转过去,能跳转吗?不行,没有,有放表单吗?没有,那只有谁啊地址诶你知道地址栏在哪吗?对window是吗?代表浏览器窗口,它里边有个属性叫什吗?对地址栏,它就代表地址栏,给你在拿到那个地址是一样的知吗?它里边还有一个属性叫什么h hif知道吧,给他附一个U,给你在地址上敲一个什么ul,一敲回车效果完全一样。
27:29
所以让它跳转的一个页面,哪个页面去跳转这个页R对我们说这个页面是在Y部零一块下边,从这地址直接跳,跳不过去,是不是得经过ctrler了RLCTRL,那经过CTRL,经过哪一个ctrler,对得写一个ctrler是不是这吗?那写一个ctrler了,那让他去向一个ctrler,有CTRL跳转过去。那我下边要写个CTRL,那写一个CTRL是新创建一个CTRL类,还是在原来CTRL基础上加方法?对新创建,因为它独立占一个资源目录,所以新创建ctrler,所以我这个地方创建CTRL了,哪创建ctrler,这个CTRL创建的时候写在哪个包下边,对work奔,Work奔属于业务管理的功能,这个地方来一个叫we部d controller,在这里边写一个control。
28:18
然后呢,这个右键在这边写个CTRLL,这个ctrller,那你那么随便写了,那我这个地方要跳转到这个work和本的那个CTRL,那我这个地方就叫对叫沃克奔驰,沃ER奔驰叫index ctrller就知道了啊当然这个名字你随便起,那我们起的时候就贱名之意,就别人一看到这个类名就知道是干啥的,懂这样才行知好,那他这个CTRLL同么,它这个CTRLL类是不是得加注解啊对,加一个CTRLL注解,对,那得扫描这个包了,那扫描这个包让R去扫描。怎么你扫描那这个地方是不是拷贝份,CTRLD拷贝一份,对这个地方是不是改成什么五拷贝是不是下边都一样呢?这样你选这样的话,这个CTRL就可以了,是吧?那在这里边提提供一个方法。
29:12
这个方法干什么?对跳转到业务的主页面,那这个CT层的方法,它范围值二对spring,方法名对inex,然后呢,对那他这CTRL的方法,他要处理请求,是不是给他加一个request mapping,给他分配一个UR这个东西,来一个叫request的map,这个URL怎么写啊,要和他处理的资源路径保持一致,他处的资源路径谁啊,他将来想应访访问的谁啊是吧?是不是反过他返回,他返回他给他的阻源路径,他的组源路径呢?对,从视图解析析往下找,它会自动加视图解析沃克奔驰是不是知道吗?那就直接写他沃克奔驰就这一层,那我就写一层下边资源的名称,谁要对index点住这。
30:12
然后呢,大家看我们说它将来跳转下不用加瑞包子,那前台跳转没有参数,不用加,不用定义形态,对直接染程直接跳转到啊跳转到人业务主页面主页面就行,那叫什么直接return跳转哪个页面霸定页面资源目录写到这哪个页面就是这个页面它的资源目录谁啊沃克奔驰也来了,来这个地方来个沃克奔驰,然后呢,下边也该有,它会自动加上前缀和后缀,你知道吗?所以大家这个地方我们说登录成功之后。这个URL就写谁。对,就写这个,就写这个,他就跳转过去了,然后呢,就写错,这是登录成功之后。
31:05
那二登录失败,登录失败,那他这个什么需求说了,页面不跳转不用管了,这有一个提示信息,提示你提示到哪,他说提示到这个地方,在后边有一个提示信息的地方,哪个地方咱可以找一找,对对哪一个就这个看吧,对就是它往里边显,把那个提示音显到这个框里边就行,显示到这个span标签里边就行了。那如何把我们的提示信息显到这个框里边,对获取它的解块对象是不是这样的ID上的就获得,然后呢,对点里边往里边往标签题里边写内容是不是HM啊对这种HTML是吧,往一个标签体里边写标签,标签体里边写内种HTM猫,然后把我们这个信息是吗?写里边就行了,那把我们这个信息来一个点叫什么这个法了,知道这就显那个标签体里,你知。
32:16
啊,以前我们还学过一个什么太子,这个也可以是吧,他俩有啥区别,H天和这太子对一个什么HT2,既可以写文本信息,也可以写标签,是不是哥他这个T只能写文本信息。这样,当然我们这个里边提示信息没有标签,所以用ATM2用T是不是都可以啊,都可以,他俩都可以知吧,这样的话,大概我们知道前台这个东西也写完了,看吧,前台后台都写完了,下边就可以测一测了,看吧,这个流程,这是最基本的一个登录的一个流程,知吧,当然它的一些功能我们还没有完善,我们后边会给大家逐渐完善这个功能啊,啊我们不着急先做前面,前面两个功能,我们先给他做的比较慢一些,大家先把这种开发模式理解了,知接受了,然后后边我们慢慢的加快。
33:10
好,这样的话呢,我们想想完之后启动服务就可以测一测了。编码完了,下边来测试,启动服务就可以测一测。好好,那我们开始上课啊,咱上课我们把这个用户登录这个功能,基本功能我们做完了是吧,就是用户在登录页面上面输入用户密码,一点登录按钮,向后台发登录的请求。那么后台拿到之后呢,接收到请求之后,把这用户密码拿到到数据库里边比对啊,根据比对的结果告诉前台访问相应信息,那就看成功了还是失败了,知道吗?所以我们当时做的时候就是按照严格按照这种流程做,当然这个流程就是我们根据需求分析出来的。
34:02
其实我们在真正做项目的话,写代码是应该说不是我们这一阶段重点了,我们这这一阶段重点就是设计这个流程,设计这个流程这才是我们以后最重要的内容,这才是真正的这个我们说大家花钱过来学习真正要学的技术,知道,而且这些技术是网上没有的,知道吧,如果真正语法的话,大家网上都有,比咱们讲的还多,还详细,知道吧,你在网上所有的这些做法,你看我以后敲的这些代码,如果仅仅为了敲代码的话,大家没必要花钱过来学,知道吗?这些代码大家网上都有的,比咱们的还详细的。最重要的说,如何用这些语法来完成一个功能,那怎么完成功能,就是按照流程来做呀。这流程从哪从需求当中分析出来,这才是大家真正要学的内是吧,包括以后到公司里边也是最值钱的内容是吧?真正语法不值钱,语法拉过来一个程序员懂吗?只要做过一个项目,谁都可以做,这个语法谁都会啊。最重要的是这个分析的过程,这。
35:09
就这吧,好,这是我们这个啊,那上次我们仅仅是说把这一个用户登录的基本功能是一样的,但是我们还有一些细节一些内容没有给大家完善是吧?啊其实真正到公司里边做的话,这样的做的话,仅仅是这一小部分是吧,仅仅能把流程做空了。但是我们说这个还有一些功能需要完善,再一个我们这个代码还需要完善一下,知道吧?啊,因为我们做项目的话,那你不能说只是把功能实现了就行了,还有你要考虑你这个功能以及和后边功能是吧,有关系的代码,或者可以复用的代码,你要封装起来是吧,你要是写到你的代码更合理,这样才行是吧。啊,所以下边大我们这边来看看我们这个代码的一些这个一些完善的一些代码,大家可以看看到公司里边真正写这样的代码的话,这应应该说这样不太合适的啊,虽然功能能实现是哪一不太合适,来我们一块来简单看一看,你看这个地方,那我们这个地方来看一看啊,哪个地方不太合适,你看我们说大哥,我们这个代码这个地方我说不大合适吗。
36:15
怎么不太格式了?那你看啊,我们说现在你要对一个data类型的对象进行格式化,进行格式化就用这种simple data format,就这工具类,我们说我们以后的项目,在项目当中任何一个日期或时间类型的数据都可化成这种。那所以说当你这个地方对这个对当前系统时间,那这个什么这个data塔对象,然后进行格式化,那以后你还可能对别的对塔对象进行格式化。可能有很多地方都需要对对他对应对应这个可视化,那你说你每次都要写这个代码吗?啊这个地方。远程网掉了。嗯,可以了。
37:02
当我们这个,我们说你每次都要进行,你每次都要写这两行代码,或你每次都要写这代码,所以这样就比较麻烦了,为什么?因为每次都得写的话,以后你有很多地方都要用到这些,每次都得写一遍。那我们说对程序员而言的话,最那个对程序员而言的话,我们说这个最忌讳的事就是同样的代码写多遍。同样的代码写多遍,就我们对日期data类型对象格话,这个代码每次都得写一遍,知道吗?那你要每次写都写还不好写吗?直接拷过去不用写了,关键万一哪天改了呢?你你哪来改了,就是这样,你说现在我们这种日期时间格式都是这样的,这种格式,万一哪天要求这种这样写。这样写,或者后边这些,那么用别的这种格式写,别的格式写就这样写,万一以后要求你这么写了。
38:00
按照这种格式写,那这样的话,你什么你都得改了,你改的话,如果你只有一个地方,那改那就么就直接改了就行了,万一有你整个项目里边有几十个地方都用都对data类型的对象进行格式化了,那么这个时候你改的话,你几十个地方都得找到改。所以这个时候代码维护的成本就太高了,而且几十个地方散落在你整个项目的各个地方,那整个项目有几百个类,那你到从这里边去找几十个私人口,对我那太贵,你要改的话,你说维护的成本太高了,所以在公司里边不可能让你这么写。重复的代码到处使用可以干嘛?对,封装起来是吧,封装起来如果是功能封装的方法,如果是个类封装类知道吗?复杂的功能非常类吧,知道吗?所以大看像这种日期类型的这种这种格式化,像这种数据的话,一般不会直接写死到代码对吧。干什么?直接分装成工具类,是需要的地方直接掉就行了,把这些功能对日期时间就说,嗯,谁需要谁调,万一哪天改的时候只改工具类就行了,别的地方都给着改了,知道吗?
39:10
所以说大家这时候我们来说了,这样,所以下边我们就准备来写个工具类,专门对日期类型的对象进行格式化这么一个工具类,然后呢,在这个地方我们说工具类的话,肯定所有的模块都有可能会用到。那它应该属于公共的代码,对公共的代码写到cons里边,那下边我们右键来创建一个包,这个包专门放放于放我们的工具,公共的工具类的,那我这个包就叫YouTube啊这个这个包,然后呢,在这里边来我们这地方来创建一个工具类,那这个工具类当我们以后我有会有很多工具类,现在我们写一个工具类,专门对日期和时间类型的这个数据进行格式化的,叫进行或者叫呃进行处理的这么一个工具类叫data u这么一个工具类知道吗?
40:00
这是专门对日期类型,对嗯,对什么对这种data一套类型,嗯,类型数据,然后呢进行,然后呢处理的工具类,工具类,那当然有的时候在这里边给你data答对象能够格式化成字符串,给你个什么日期或时间类型的字符串,诶你还还能转换成对待对象吗?将来都可能是吧,把那些工具方法都写到这个工具类里边知道吧,那下边我们先写这一个吧,用到一个我们写一个,现在我们准备在这个地方来写一个工具类,这个工具类专门对什么某一个指定的贝塔对象进行格式化的,格式化成这种字符串了,那我们就可以这么来写了,在这方定一个工具方法,那工具方法大看工具方法怎么定义。访问权限定义成什么样子,对帕布雷专门让别人调,所以public布对然后呢,对是么?让别人调的话,工具方法就是让别人去调吗?那别人怎么方便调怎么是么,我们怎么写,那别人怎么一个方法怎么最方便调吗?建对首先一个什么最重要的一个地方叫什么,让它那个什么调这个方法的时候,不用创建对象就可以调,通过类名就可以直接调,所以我们定义成什么对静态的叫staic是吗?是静态方法可以通过类名就可以直接创建,就可以直接调,不用说我调你个工具类,调你个工具方法,我还得创建工具类的一个对象是吧?哎,那时调的话,那时候用户太麻烦了。
41:39
啊,所以说再看一般说静态的是么?一般这种工具方法都是静态是吧,返回值类型,我们这个地方返回是什么类型的,对死质题的因为什么,因为它我们要对它的指定的对塔对象给我什么给它转换成字符串的,那么给它转换成字符串,那我肯定把这个字符串给它返回,谁调个返回,这所以是个字符串类型,那下边方法名,方法名你就随便写了键名注意就行了,那我这个的方既然对什么data塔类型的注意进格是吧,我就叫form叫data让time啊data time。
42:12
啊,为什么data time,因为我们一般来讲,我们习惯了data是表示只有年月日,然后呢,Time是什么?表示十分秒是吧?Data time,那既有年月日又有十分秒,所以我们这个地方就data塔time,然后呢,这个地方来定这么一个方法,这样就行了,好,这是我们说的这个方法,那这个方法再看懂么?它就是对指定的对塔对象来格式化中指定到我们这种YYMM这的字符串是吧?那指定哪一个对象是不是对,是不是得定一个行参啊,将来谁调用谁,那么谁想对哪一个对他对象进行格式化的时候,把它那个对象调过这个方法再给我传过来就行了,所以这个地方定一个行参来接收他要对指定的那个对差对象进行格式化。那这个刑餐什么类型呢?对这套类型,这套类这样的话我们就可以了,然后呢,该人家累眼睛了,这样我们就可以了,知道吧,然后呢,谁将来调我的时候想对哪个最大对象进行格式化,那么他就什么,他就给我传了你最大对象就行了,那我在这里边我就来写我这个代码了。
43:17
来我这来写我这弹幕拷贝,然后呢,放到我们这来,我对他这个对象进行格式化,这样吧。然后呢,把它拿到之后,然后呢,调我们那个方法叫form麦的方法,把它传过了data,然后呢,我们获取到就行了,获取到之后,然后呢,这个地方定义个变量,这个我就叫贝塔ST2等塔拿到这个字符串了,拿到字符串,把这个字符串返回就行了,这个字符串就是贝塔ST2,这么返回就行了。这样的话,我们就对指定的啊,对指定的啊data塔对象对象,然后呢,进行格式化,对吧,这种格式化我们就转成这种格式,我们项目的统一用章那吧,好,这是我们来张。
44:13
这是这样是吧,那我们这个地方呢,我们说那我们这个地方,我们每次以后再写的时候,就不用每次写它了。就不用每次都写这个simple data form,那干什么直接调它,那来调它,那我们来调一下吧,这个地方来调它,那调的话,这个地方来个好,咱们着for麦了,这个对塔开把哪一个对象进行格着吧,对new data塔,New data塔直接格着忘就行,然后呢,把它写了我们这里边。把它写到我们这里边就行,这好,这是我们这样,当然如果你以后写的很熟练的时候,这个地方不用定义了,干什么,直接把它挪过来是吗?放到哪,放到这里边就行。
45:03
知道吧,然后呢,这个也不要了,这样的话代码大家看着就比较整洁了,知道吧。好,这是我们说的这个,关于这个地方我们进行了一个封装吧,以后这些一定会进行封装是吧,而且但我们这个地方是把指定的data格式化成年月日十分秒的这种这种格式,那万万一说以后有一个地方不需要用十分秒了,只需要什么格式化成YYMMDD这种年月日就行了。那你还能掉这个方法吗?不能了干什么?还可以什么?再来一个再疯狂一个再疯狂。那这个地方变成格式化的时候,那格式化的年月日这种就是当然这个发火名,我们怎么把这个time去掉,你不是data只有年月日吗?打后边这段也不要了。
46:00
知道吗?以后万一在某一个地方需要对data的类型的数据格式化,是年月日这种格式,你就可以调这个方法就行了。那还有一个地方,万一只需要十分秒怎么办?再来再封装一个,然后呢,把它格式化成这种十分秒的,然后呢,这个地方把它改成它,然后这个地方给它去掉,如果只需要十分秒就叫它如果格式化成别的格式的日期怎么办?把这个地方改一改就行了。所以说他像这些工具类,他跟我说你到公司里边,你们公司里边一定有类似的这种工具类。对这种数据进行特殊化,所以我们这个地方,当然这俩我们现在目前用不到,到后边万一用的时候我就可以直接调了,好这是我们说的这个地方,需要我们这个地方给大家优化一下,好这个地方我们要说的好,大家看这是我们这还有一个地方,我们这个代码还得优化一下哪个地方还有这个地方。
47:06
对,这个什么这个编码的值啊,咱们前面给大家说了,这个编码的值,设置这个return data里边这个Q的属性,它就表示后台处理成功或失败的一个标志标记,零表示失败,一表示成功。那我们现在设计的啊,零表示成功,失败,一表示成功。万一以后你的代码需要扩展了,零和一不满足要求了,哪天什么这个代码需要改进了,改成什么,改成零,零零表示失败。111表示成功。或者二二表示别的没有。万一这个编码改了呢,那这个时候你这个代码就不好维护了,为什么有很多CTRL类以前都是用零表示失败,一表示成功。
48:00
那哪天万一用000表示是败,111表示是成功了,这个时候你就说你这个代码你就到处得改,所有的CTRL类你都得看,都得改了,这样的话,这个代码维护的成本也太高了,所以呢,我们有人统计过是吧,在软件公司里边,真正你说真正大家对这种这个这个开发成本的这种统计,我说真正写代码开发新的代码的这个成本,开发新的成本的,其实连一半的这种时间都到不了,一半的时间都到不了,真正写新的代码。一半的这个成本都花不了,就程序员以后写代码的时候,就一半的时间都到了,然后另一半时间干什么,天天维护以前的代码,就维护以前代码。都是对,把以前的代码拿过来直接用就行,知道吧,如果你做的好的话,直接拿过来用去了,如果你做的封装的不好的话,那么在原来代码基础上还得再改,知道,哎,那你说老师你这也太夸张了,但一点都不夸张,但你做几个项目之后,你会发现什么呢?不同的项目之间的代码几乎。
49:09
都是一样的。都是增产检查,那程序员在公司里边都干什么?大家可能都听说过,都是什么CTRLCCTRLVCTRLCCTRLV,大部分时间上都是这啊,你说我天天写新的代码,你想写新的代码,公司都不让你写干什么,写的慢呀,我给你一个月给你发这一两万的工资,我天天让你给我给我研究新的代码啊,我不是做慈善的是吧,我不是研究技术的,我是给我做完功能我卖去的是吧?所以都是对以前的代码是吧?CTRLCCTRLCCTR,你要以前代码写的比较什么,封装的比较好,直接拿来用就行了,是一个项目做的非常快,我常会跟他说了真正写代码的时间,一个项目工作周期。基本上1/3多一点的时间,一半时间都用不到,为什么前面代码都有了,公司已经做过这么多年,这么多年的软件了,前面这这代码几乎都有了,如果封装的好,直接拿来用知道吧,封装的不好,那你得写了知道吧。
50:08
呃,万一哪天这个项目跟这个项目设计的这个原则不一样,那你那个代码你就不能拿来用,不能拿来用什么,你得自己写,或者即使拿来用,你得改半天知道吧。所以这是我们说公司里边真正要求大家说就是这种数据,这么你的代码要封装好了,要可移植知道吗?可复用知道吗?啊这的,那你要是到公司时,你要是写所有代码都倾斜,那人家到点走了,做完工作走了,你在那天天加班啊,而且你做的还不一定好,因为以前的代码都是测试好的,你直接拿来用多好知道,但是前提是以前代码得封装好知道吧,那如我封装不好,你封装不好,你没有开发经验,那可能你到公司里边,你不能融入到这个团队里边,那公司那可能领导对你有意见。那你工资涨不上去,你甚至说甚至你都待不下去,知道吗?所以大家要习惯这种风光的思想,知道风光的思想知道吧,像就像这些代码,这些代码一般不会写死到程序里边,就剩下零和一啊这些数据,为什么?因为一旦写死到程序里边以后,维护太难维护了,那怎么办?
51:20
爸,他们也封装去了。知道吧,谁用谁直接引用引用就行了,万一改只改那一个地方,大家都跟能改了,知道吗?诶那你说老师那你这个方法是吧,那这些功能可以分装一个工具类里边,像这些功能放数据的,像这一个一个一个一个的数据分成什么里边。分到一个常量类里边,定义成常量不就行了?大家谁用这些编码直接引用常量,以后万一改的时候直接一改常量,大家都给你改知道吗?所以下边我准备创建一个。常量专门那么专门用来保存,那么我们这个项目当中用到所有的这些需要写死的程序里边的这些数据值作知,所以下边我准备定义常量了,那定个常量类,在这里边来定一个类,定一个再定一个包,这个包里边主要放一些长,就这个一些什么这个常量类的知道,所以我们这个地方来一个来一个叫定一个包,我这个叫contains,常量叫contain。
52:21
嗯。嗯,叫啊叫。Content这种content这种这是常量,好当然以后可以有多个常量类负责保保存知道吧,定义不同的类型的数据的常量放到不同的类里边,那我这个地方先创建一个我这个地方,假如说我们这个在我们这个比较简单,所以我就定义一个常量类型叫contain常量,好这个常量的在里边定义一系列的常量,然后用来保存,将来要写此到程序里边那些那些数据的啊,你比如说大家现在我定一个常量,这个常量就表示用来保存,保存什么,保存return什么啊,Return,对object return叫object啊类中的,然后呢,Code的值道吧,Code值code值知道吧,然后呢,来定个常量,那在加位里边定义常量大看怎么定义啊。
53:21
对常亮,对有常亮的是吗?是吧?这个标准写法是吗?哪一个访问权限是吗?对public,因为常量就是让别的类去引用的,去调用的,所以访问权限一定是最大,越大越好是吗?Public再一个呢,对莱这个为什么定sta这高啊啊因为既然是常量了,在整个项目里边是不是只有一份啊,只有只保存一份就行了,所以sta这个在整个项目应用里边只保存一份,还有什么?对final是吧,Final是吧?啊final就不能改了,不能,我只要在这个地方一旦去赋职了以后就不能改了是吧,以后诶你说老师你不是说要改了吗?我说是只基于整个项目而言的话,是吧,不能改了是吧,一个项目就是只有一个值是吧?在不同的项目那可能是可以附入不同的值,知道吧?呃,在这个地方,一旦赋值在别的类里边,就不能随意再改这个值了,就这个意思知道吧,所以。
54:21
就是那后边是数据类型的,那数据类型根据你自己的什么数据的特点来决我们这个零和一,那我前面就定义的本来就是字符串类决的,大家可以看到我这个前面定义的本来就是字符串类型的,知道吗?零和一是吧,那所以这个地方我要定义这两个常量值,我也是字符串类型,所以是类型是对类型下边这个方,下边这个什么这个常量的名字,常量名字大纲怎么定义,大写对全部大写单词和单词用下划线隔开。这都是大家以前学过,那我这个状假如说我就叫return,然后呢object口介绍吧,然后呢,这个地方来一个呃,Code啊,Return啊,不Q的值,然后呢,这个地方我定义俩值,一个是表示成功的叫success,知道吧,它的值我在这赋值了,成功是一,知道吧,这就表示成功啊,这表示成功的明道,同样还有一个是那个失败的是也要什么,以后也不能写死的,也也不能直接写死的类里边,然后呢再拷贝一份,那这个地方来定一个叫失败的,表示处理失败的叫废物,然后呢,这个值是个零,所以我们说它是失败的。
55:33
还有失败,嗯,然后以后在哪个地方再用到成功或失败的这个零和一的话,就不要再直接写死零和一了,直接调常量就行了,怎么调通过类名调,然后呢,我们这个你比如说他我们这个地方所有这个地方如果处理失败了,这个地方就别写,直接写死他了,直接写写他就行了,点二调我们这个方法调我们这个常量,死个这个失败啊失败让他调费用。
56:02
失败掉飞知道吗?好,这是我们这样,那这个地方失败,失败也就调费用掉它点二,然后呢这个是费用,然后呢这个地方这是啊,然后呢点二费,然后呢,这个地方也是失败了,失败了直接掉号,然后呢费,那这个地方是成功了,成功了来一个号,然后呢点二四个三了,所以这样的话,再看我说假如说你这个你这个项目里边有几百个这种是吧,肯出L类,那如果说大家都用到处理成功是吧,我都可以这么写。都,哎,那你说这样写还不如写零和一,简单的看看。还不如写零和一呢,你知道吗?你知道吗?但是以后维护的时候是不是好维护了,对,万一哪天需要改,只需要改常量就行,别的都跟着改就行了,再一个我们说将来我们写代法,现在只是零和一两种状态,以后还有别的状态了,还有别的状态。假如有好几个状态的话,如果你要是记零表示什么,一表示什么,二表示什么,三表示什么,四表示什么,你还得记一串数字,这样的话记常量就行,那记常亮也不好,记常亮都是剑明之意的。
57:12
你一看你就知道什么意思了,就这意思知道吧,所以这是我们说的这个关于我们这个代码的这个字幕,我们就可以这这么来做了,懂吗?好,这个代码大概我们就改造好,改造好之后大们运行的结果肯定跟以前一样。好,这是我们这还有一个地方给大家强调一下,有的同学问了老师你这些什么里这些东西什么Java率里边这些什么都改了是吧。这些什么写死的零和一都用常量来代替了,但你页面里边你知道吗?页面里边还有什么也用到零和一了,这能不能用常量?这个地方是不是不能用常量啊,对,这个地方没有,这个地方没有,这个地方不能用常,那不能用常量,你说老师万一成功和失败是不是我得我这个地方判断的时候,在页面的判断是不是还得用零和一,是啊是。
58:11
是吧,那没办法,因为我们Java里边常量在GS配里边不能直接用是吧,那没办法,那只能这样是吧?啊那你说那那那老师那以后万一改了我页面里边这么多的页面是不是都得改,都得改,但没办法,那你说那你们老师定义长了,我们说这是两种不同的技术。一个是后台的Java技术,一个是前台的JSP这种技术。那我说它俩是不同的技术,那我说我们这个常量主要是Java里边设计的技术,它不能管到别的技术里边去,知道吗?那你说别的JSP有没有常量这种概念,JSP里边没有,那我们只能是这么来多了,在JSP里边只能写零和一来进行判断,知道吧?那你说那以后维护的时候是不是麻烦了,那没办法,但是相对于我们Java和JSP里边都写死的话,那我们这样至少节省了一半的这种热效果,知道。
59:09
这是我们知道,所以说大刚我们说那这个JSP里边大,那我们没办法了,知道吧,啊,所以我们后边给大家说说JSP这种GSP这种技术,就是现在慢慢的慢慢的有点过时了,说实话有点过时了,就GSSP这种技术。现在有很多一些互联网用都不用JSP了,知道吧,那你说我们这个用,那我们这是传统的项目,那我们还用JSP,知道啊,那你说后边还有没有别的技术,万一到公司里用别的技术,后边还有别的技术。有什么技术,大家下一个阶段老师会给他讲一个技术,写页面的话,以后有可能不用JSP了,但是现在咱们没学那些技术,只能用JSP。后边咱做下一个项目p two p那个项目的时候,你们前端的页面就不用JSP了,用别的另一个可视化这种技术知道吧?啊,所以现在大家我们也没学,那我们只能这样了,只能这样了。
60:03
所以这是我们说了知道好,这是我们这个关于我们这个项目这个这个代码的这个改造呢,我们就暂时先说到这。好,下边代我改造完了之后,代码肯定功能一点没变,给我们上册做的完全一样,那你来看看吧,这个地方来我们来启动服务来运行一下,你可以看这个这个功能肯定跟以前跟上次做的完全一样,因为我们仅仅是把一个代码做了是吧,这种封装了,其实代码应该说就什么运行的时候一点都没变好,下面我们来启动一下,大家可以看一看。嗯。然后呢,这个地方来一个张三腰疼,然后呢,这诶这个地方。嗯,这是张三,诶张三张三点进来大家看,同样可以登录成功知道吧。
61:00
这是我们说到这。
我来说两句