00:00
啊来接下来我们来说啊,那么现在我们已经访问到这个登录页面了,但是呢,我们记得我们在写这个登录页面的时候啊,有两个地方没有写,你看了是不是这个登录页面啊来打开看一下啊,我先把这个关一下,那么打开这个登录页面,我们在写的时候呢,哎呦,出问题了吧,这咋了呀,乱码了是不是,哎,因为什么,因为我把因为我直接把外面的一个文件是不是给拽进来了呀,拽进来以后呢,我这个地方是什么编码的,用这杠八外面那个文本,它默认是一个JDK的哈,说出了一点问题啊,那这个还好啊,我们就手动改一下呗,欢迎登录啊,手动改一下吧,啊这个没有太大的关系啊,用户名称。然后呢,用户密码是不是行了,看到了吧,OK,把这个改一下啊,那么改完以后呢,我们在写的时候呢,这个地方是不是没有给他写值啊,对不对,OK,那现在我要给大家解释了,这个action是干嘛的来着,大家还记不记得action是干嘛的来着,干嘛的是不是你这个写一个具体的请求吧,对吧,就是你要请求的这个地址是什么,就是你要往什么地方发送这个请求,或者你具体的请求是什么,你就要在这地方去写了,OK,然后呢,我们现在来分析一下,呃,因为我访问到这个页面的时候呢,它是通过大家注意哈,我通过这样的一个请求访问到了我的这个login.h点页面,能理解这个意思吗?那么假如说我现在在这个位置呢,我写一个HTTP冒号双斜下local host,然后呢四个八我。
01:51
写个WEB01,再写个login,那么将来我去点击这个submit的时候,它是不是要去发送这个请求了,能理解这个意思吧,那你看一下,我点击它会发送这个请求,跟我们上午最后一堂课说过的,直接从这里面输发送这个请求,效果是不是一样的一样的吧?诶没有任何问题啊,但是大家注意,现在我们可以不用这么麻烦,我们其实直接写一个什么呀,直接写一个login就行了,为什么直接写个login呢?让给给大家分析一下,因为你首先你访问到这个页面的时候,你是通过这个请求来访问到的。
02:34
是不是啊,那么你在这个表单里面呢,你要发送一个login的请求,而这个login呢,我们前面没有写这个斜杠,也就意味着它是一个相对路径。这个相对绝对路径大家是有这个概念的吧?OK,它是一个相对路径的话,它就会相对于我们当前的这个路径去发送,也就意味着前面的这个local host4个八,WEB01,它会自动的拼接到我们login的前面。
03:02
明白这个意思吗?哎,所以这个路径的这个问题,大家也需要什么注意一下啊,那么因此这个位置我们简单一点来说的话,直接写个loging就可以了,理解了吧,OK,再来说一下这个method method,我们上午讲过它是一个什么东西啊,诶,提交的这个请求的方式吧,OK,我们说过有一个get,有一个什么post,大写小写都行哈,那么现在呢,我来给大家去解释一下这两个的区别大概是什么,首先呢,你来注意,我先写成一个get请求,能理解了吧,那么我们在提交的时候呢,它是一个get请求,那么他将来就会执行我们login service里面的do get方法。你能对应起来吗?可以吧,如果你只提交的是一个post请求,那么他将会执行我们的do post方法。理解吧,OK,这个是我们要对应起来的,那么现在问题是你们俩有啥区别呢?注意接下来大家要睁大眼睛啊,来看这个区别了,现在是一个get方式,好,回到我们的页面中,我要重新刷新一下,哎呀,我的天呐,这是咋了啊?乱码了吧?这又是什么乱码呀?啊,这就是你看我这边是没有问题的吧,你看看哈,我们log.html,然后呢,我们打开你看practice,它是um杠八的,是不是没问题啊,而这边出问题了,是不是出问题了,那只能说明是你浏览器打开我这个页面的时候出问题了吧。
04:38
对不对,哎,这还是因为浏览器使用的是这个JBK这个编码啊,那咋办啊,我是不是得告诉这个浏览器你打开的时候使用UTF杠八编码吧,对不对,OK,那你说我每次来设置这个浏览器也不行,也不咋好使啊不是不咋好使也也挺麻烦的是不是啊,我就教给大家一种办法,就是我们可以啊在这个页面中呢,我们加上一个东西,在这个head里面呢,我们加上一个哎,Matter啊有同学知道是吧?这里面呢,可以写一个叉set,等于哎UGF杠八这个是什么意思啊,诶,这个就是告诉浏览器你打开的时候你给我使用六杠八编码,理解了吧?啊来页面改完以后我们再来访问一下,好了没好了没好了吧,哎,没问题了哈,那么大家注意了,刚刚我也是改了一下,你这个注意了哈,我也。
05:38
改了你这个应用里面的这个页面了,怎么我们又部署是可以的呀,注意代码改了以后需要部署,但是页面改了以后我们不需要部署,听懂了吧?嗯,不需要部署的啊好,那现在我们就正常访问到了,那么接下来大家注意了,我在用户名称里面,我随便写写上的密,密码呢,随便123456写好了吧,我要点击提交了,大家注意走好,首先我们能看到这个请求过来了没有,过来了吧?那么我们来看get的请求他怎么做的呀,他把你的这个输入的信息呢,都拼接到了地址栏里面了,你发现没有。
06:20
对吧,你看我把这个拷出来啊,CTRLC拷出来拷到什么地方了,拷到这个地方,这是我们的概的请求啊,你看我刚才输密码的时候,你还不知道我的密码是什么吧,现在你不就知道了吗?啊,首先安全不安全啊,不安全吧,OK,再一个大家注意了,盖个请求它的特点就是所有要提交的数据都会拼接到我们的请求地址里面,这是它的一个特点,那么这种方式呢,第一种就是看起来特别的啰嗦是吧,第二种不安全。好,第三个这种方式提交数据,就是get方式来提交数据,它有一个大小的限制,就是如果说我提交的数据特别大的情况下,它就不行了,理解吧,所以说呢,一般情况下,只要你是使用表单,那么我们都会采用pass的方式,好,我把它改成pass以后呢,我们再回到浏览器端回退一下,再刷新一下啊,可回退了刷新一下啊,你可以去查看页面源代码,你能看到我们是不是已经改成pass了,看到了吧,诶说明这个已经生效了啊,生效了以后呢,你看啊,等米我再写个123456,我再来提交,走首先看后台请求过来了没,过来了吧,你看我给你清空一下哈,清空一下再来一次啊,123456没有啦,来登录过来了没?
07:59
过来了吧,但是你看一下地址栏里面有东西吗?有没有,那你说那数据哪去了,丢了没有POS的方式提交数据是不会拼接到地址栏里面的,那么它在哪啊,它在这我告诉你啊,来在我们的浏览器里面,我们摁F12可以打开一个。
08:24
诶,就是我们这个开发者工具啊,就是做一些调试的,来回去你看了哈,首先呢,我还是访问到这个页面,然后呢,大家注意我输上啊人米输上123456,注意了啊,看好了,我来点击登录,好是不是有这样的一个请求出来了,这个是你发的那个请求,你点一下,点完以后呢,大家注意在我们呢,参数这个位置,你就能看到我们具体的参数了吧,这是表单数据,那么它放到什么地方了呢?它放到了我们的请求题里面了,而放到请求题里面的内容我们是看不到的,也就意味着这个数据就相当于没有直接给你暴露出来,是不是相对来讲就安全了吧?
09:11
明白这个意思吗?呃,这什么意思呢?你看了哈啊,第一个呢,就是来从我们的浏览器端,我发一个请求到我的服务器端,如果你是get的方式啊,这是一个get的请求啊,一就是一,二就是二,三就是三,你写的是什么我都能看得到,如果我是pass请求呢,哎,那就相当于我把你的那个数据呢,给你放到了某一个请求体里面,而这个请求体我们是不对外暴露出来的,你是看不到的,但是呢,这个数据他也绝对是提交过来的。理解这个意思吧,啊,但是它相对来说是安全了,但是他绝对安全吗?绝对安全吗?不绝对啊,这个不绝对,对于大家来说啊,因为你们刚刚学这个东西,可能觉得说哦,那看不到,应该就相对来说比较安全了,但是只要懂一点技术的人,他都能进行一个拦截,对吧,我可以去拦截到你这个所有的请求啊,拦截到你这个请求以后,我就可以去解析到你请求里面所有的数据,那我依然能把这个数据给它拿出来,只不过就是相相对来说稍微要费点事了。
10:31
能明白这个意思吧,OK,要费点事了啊,所以说如果说你想要这个数据安全的话呢,那么你一定要给它进行加密,加完密以后再去传输,这样的话呢,他虽然也能拦截到你这个数据,但是呢,他拿到的就不是一个铭文了,而是一个加密以后的数据,起码它得破解以后是才能知道你的数据是什么呀,对不对啊,OK,所以这个大家一定要注意了,OKOK,那么这就是我们两个的区别啊,这个post呢,它就什么呀,他将我们的请求数据存到什么呀,存到我们这个请求体中提交啊,就是不会直接暴露出来,好,而我们这个GA的请求呢,就是什么呀,哎,直接什么将这个请求数据拼接到了什么呀,拼接到我们的请求地址里面,请求地址中啊,就直接什么暴露出来了,明白这个意思了吧,OK,好,把这个解释。
11:31
组,那么解释完以后呢,那么现在我们就使用POS的方式来提交,那么这个数据呢,他已经提交到我们的后台的这个服务器端了,那么在这个位置,比如说POS请求进来了,那么我们在这个地方我就希望做什么事了呢?我就希望完成这样的工作,就是获取到获取到什么东西啊,获取到这个用户输入的用户名和密码,然后呢,进行我们的登录业务的处理。
12:05
登录业务的处理理解吗?哎,我们就得这么去做,那先生,那你来想一想,这个东西应该怎么获取啊好,听我说,首先我们在。浏览器里面是不是输入了用户名和密码了,我一点提交这个东西是不是也来到我的这个toca里面,并且呢,来到我们的WEB01里面了吧,对不对?那么我告诉大家啊,他开会帮我们做一件事,做什么事呢?他会把你客户端所有的请求数据明白吧,所有的请求数据给你封装到一个叫做request一个对象里面,叫做什么呀,请求对象也就是我们现在看到的,他这个过程不需要我们做,他们看了就帮你做了,好所以说接下来我们先暂时的了解一下它是个什么东西啊,来看这个位置,它是我们的http s request啊,它封装了我们HTTP请求的相关信息,而且这个对象是由conca创建并给我们传到我们的service方法里面的,就是不需要我们自己去参与的理解了吧。那么拿。
13:22
达到这个对象以后呢,我们就可以来获取它的请求参数,理解了吧,后续的话呢,我们还可以去绑定数据,还可以进行转发操作,那么这就是我们后面要讲的内容了,那么现在我们只需要知道它能获取请求参数就可以了,明白了吧?OK,那接下来我们就来看怎么获取请求参数呢?我们就需要用到这个对象了啊给大家去解释一下,我们现在要用到这个叫做http so data request对象,好,它是什么对象呢?它是我们的请求对象,好,我们的这个呃,Solid容器好会在什么呀?会在请求到达到达后创建出一个啊,Request的对象,然后呢,将我们的什么东西啊,将HTTP请求相关的信息。
14:22
啊,全部都什么呀,封装到该对象中A,对于我们来讲的话,我们直接从这个对象里面去获取数据就行了,怎么获取呢?大家注意,我先来获取我们的用户名。好,获取我们的用户名,那么我们在获取用户名的时候,我们就能知道你是怎么传过来的,大家再来分析一下,我传递的时候,你看哈盖子里面体现的比较明显,是不是通过一个K。拼接了一个我们具体写的值吧,对不对,那我在后台获取的时候,我就通过这个key来获取你的这个值就行了,因此后台获取数据的时候,就用到了你表单里面的这个内部属性了。
15:06
好来一起来看一下,那我们怎么写呢?那就是注意了啊,那就是好request是不是直接用的呀,讲里面有一个get。我看一下啊,Http so request啊,写错了是吧?点get什么呀,看到没有,获取一个请求参数,这个里面就写你的请求参数名,我们不是用username吗?是不是username呀,对吧?它对应的谁呢?它对应的你页面里面的这个值,好拿到以后呢,来这就是一个userna,这就拿到了,能明白吧,那我们再来获取一下啊,获取我们的密码,好,String类型的password等于req叫get,好依旧是什么呀?Get parameter选谁呀,Password这就获取到了,获取到以后呢,我们先来输出一下啊,比如说就输出这个username这样了啊,User name,然后呢,来加上一个逗号吧,再加上我们的这个password,我们先来看看能不能获取吧,是吧,获取到。
16:21
以后我接下来的操作其实就比较简单了,OK,那我们就来看改了代码以后得怎么着来着,重新启动部署吧,但其实大家注意他开了,它会帮我们检测到,如果说你改了代码了,它会帮你自动部署,看到没有reroad是不是重新加载部署啊,对吧?哎,如果说你看到这个代码,你看哈,我把它先清空一下,然后呢,我在这里面呢,我加个空格保存一下,是不是相当于改了。对吧,你稍等那么一会儿啊,你就能看到他帮我们重新部署了。
17:00
啊,这个不科学是吧?啊,看来这个一个空格骗不了他是吧?啊那我就这么,哎,反理迟钝是吧?啊部署了吧,对不对,OK,那么这样的话,我们就不需要自己再去什么部署了啊那我们来访问一下,好,还是来到我们的这个登录页面中,我们先来刷新一下,你看啊,我写一个me,写一个123456,我们来点一个提交登录,OK,这个地方还是没有结果,因为我没有做响应呢,现在还,但是我们在控制台能看到这个数据是拿到了对不对啊OK,那么拿到了以后呢,大家注意哈,获取到这个数据以后,接下来干嘛呀?啊,是不是要验证了呀,对不对?哎,那就什么验证你这个用户名跟密码是否什么呀,与这个密码是否正确,好那这个怎么验证啊,比如说我们先写一个死的数据吧,对吧,比如说。
18:00
啊S就是我们忽略大小写啊,如果说哎,你的用户名呢,就是一个a me,然后呢,并且呢,你的这个password就是一个123456吧,加equals啊这个就无所谓大小写了哈,Password如果说你的数据就是这个东西,那么相当于你就是一个登录成功了,明白吧,那么else呢。是不是登录失败了呀,能明白这个意思吗?OK,好,那我们就先写一个死的数据呢,一会呢,我们再把这个数据呢,变成活的,就是我们必须得去走我们的数据库,理解吧,哎,一会我们再去加这个东西啊好,那么登录成功以后我想怎么办啊,登录成功以后我们就暂时做的简单一点,我告诉一下用户登录成功了,登录失败以后呢,我告诉他一下登录失败了,那么这样的话,你看一下是不是相当于我从浏览器端提交的数据到我的服务器端,我处理完成以后,我根据你提交过来这个数据处理完成以后,得到了一个结果了吧,这个结果是就希望给到我的用户啊。
19:18
对吧,那么我们接下来就是响应了,怎么个响应法呢?来有请求对象,那么它就有响应对象,所以说我们再来看它响应结果用的是response,它能帮我们把服务器端的数据发送到我们的浏览器端啊。它也是我们外部容器帮我们直接创建好,帮我们传递过来的,那么不需要我们做任何操作,直接去使用就可以,所以说你看看啊,接下来登录成功以后,以及登录失败以后,我们都要什么呀,获取到我们的一个什么,通过我们的响应对象,你看看哈,那我就写到什么,写到这个地方吧啊,通过我们的响应对象,哎,给我们的客户端响应数据,那这个响应对象是谁呢?就是我们的HTTP啊http so response,就是我们的这个对象,是不是也能直接用啊,对吧?那我们怎么用呢?注意,那我们就可以这么来用了哈,呃,首先呢,我们要通过Rep,就是我们的这个响应对象,它里面呢有一个get writer,这个get writer是获取到了一个理由print write,这个大家用过没有?
20:45
用没用过这个pro啊,打一流吧,OK,那么他就能通过这个流把你这个地方的数据呢,直接给你写到浏览器端理解了吧,OK,那比如说呢,你看我给你写一个哈,怎么写呢?那就是after,点这里面不是有这个print方法吗?对吧,比如说诶我就给你写个先写个英文啊叫做什么呀,Login success是不是成功了呀。
21:12
对吧,那L里面呢,是不是也得写这样代码呀,好,CTRLC,那我们就来写到这。啊,那就是什么呀,是不登录失败了。能看到吧,哎,这就登录失败了,OK,好,那么这样的话呢,我们就诶相当于就是把我们这个登录流程呢,简单的做了一个完整的实现,那么接下来我们来看一下这个过程,回去刷新一下啊米123456来点击登录走成功了吧,你看这个数据是不是回来了,对吧?那么你看对于这个用户来讲,他输完数据,他点完登录以后,是不是也有一些反馈给他了,对不对,OK,那比如说我输错了,我输错了个789456。
22:01
登陆login fair。看明白了吗?哎,就是这个样子的,好,那么一会儿我们只需要怎么做呀,我们一会儿只需要把这个数据呢,给它真正的到我们的数据库里面去做一个查询,做一个比对,然后这个是不就相当于就完成了,对吧?相当于是一个死的数据嘛,能理解了吧?OK,好,那么这个功能我们暂时先做到这,接下来我们要在这个功能上加什么东西呢?第一个我们要把数据不能再写死了,我们需要做一个真正的与数据库的一个什么比对,另外一个我们需要再去研究一下,登录成功以后,登录失败以后,你单纯的给用户发送这样的一个信息,其实是不好的,对吧,你想一下,你在人家网站上登录成功以后,就告诉你个这个东西啊,不是吗?对不对啊,所以说呢,接下来我们要去研究,诶,当他这个登录成功或者登录失败以后,我们怎么做,他这个用户的体验更加的好一点,好,这是我们接下来要去做的功能。
我来说两句