00:00
一面定义好了,该写谁了?你告诉我。该写谁了?当然是solid呀,你现在是不是没这个solid呀?那OK,来吧。Serve late。直接定义对吧,先改包也。Solid,这个叫log in对不对?改一下your pattern login solid。午餐,克奇不要。都盖都不知道要哪个呀。是不是post,然后finish。
01:12
再然后干嘛。诶对,我们这儿用什么登录,一般用什么登录,用姓名登录啊,还是用学号登录。一般用学号登录的多一些啊,因为姓名有可能会重名,对不对,我们。这样吧,改一下这个学号。学号的话,这个就是number是吧?呃,这就OK了啊,这样更好一些。那首先我这里边儿需要做什么,我的这个solid需要做什么工作,我们想一下,首先第一步要接收请求参数。对吧,我们要接收请求参数。
02:02
接收了请求参数以后再干嘛?想一下。你注意我这儿是干嘛的?登录的,你拿到学号和密码以后,诶。拿到学号和密码以后,你要干什么,你是不是要对这个学号和密码?是不是进行验证啊。那要验证怎么验证,这个验证能不能写到solve里边。可以,但是它不符合。MVC。这种开发模型为什么?它是什么?它,它是控制器啊,由它来调用相应的model,而model是谁?我们说了,Model就是service和道。他来调用相应的。Model,那他调谁,我们看啊看这。
03:05
看我们的开发模型。这里边儿。Service调用什么?调用service service调用到,所以它肯定要调用service,我们的JSP。JSP是不是就转到了,对不对,那这我们已经实现了。所以7M要干嘛?要。创建诶就是service对象有了service service里边提供什么,提供业务方法。调用surface对象的。这个检查用户呢是吧,我们就给它起个名叫check。
04:02
Student吧,方法。对。让用户。进行验证对吧,对它进行验证,那验证以后,那我们来想。验证如果通过了他怎么样,没通过又怎么样。验证通过了。你就应该进到进到系统里边了,我们的系统页面是谁,真正的系统页面一般都是index JSP,所以我们这写了啊,验证通过则。跳转到。欢迎页面吧。欢迎。
05:02
页面。换页面index减去。这是我们系统主页呀,现不要欢迎页面了,跳转到。系统主页代。那验证没通过呢。验证没通过。那你是不是需要重新登录啊。则跳转到哪儿啊。登录页面。让用户再次。输入。登录。信息对吧。
06:02
当然你要再次输入登录信息,你这这里边儿跳转到登录页面,让用户再输。此时,页面需要。给出用户一些提示,是不是你想你在你在这个登录页面的一点,还在登录页面,那用户认为,诶这是怎么回事啊,你是不是应该给他提示一下是吧?你的是不是用户名或者密码输入有误,让你重新输入啊。对不对,这是我们现在啊,能想到的大体上这样的五个步骤啊。那下边就来写吧,先说接收请求参数,我说接收请求参数,这俩参数一个叫number,一个叫password,这俩是不是都是字符串啊,都是正常的字符串,而且这里边儿存在不存在中文乱码问题。学号。
07:01
不存在中文的问题,密码一般我们也不支持中文啊。一般密码是不会让它设成中文的,所以这里边不存在中文乱码问题,那也就是说我这就直接写了request.get perter哪个number。Number。再来一个。Password对吧。Password好了。有了用户名,有了密码了。紧接着呢。紧接着。创建这个对象吗?可不是啊。你想想啊,现在咱们这样。现在咱们这样啊,我把这个发布一下。我们看着页面来说。
08:04
大家看我现在输输用户名和密码。我输这种用户名,我原版原来我的学号是什么,00001是吧,00001对吧,可我现在输的谁。那我问问你,我现在输的这个学号还是不是00001了。他说不是了,前面加了一个空格,后面加了一堆空格呢,可是对于我一个普通用户来说,我认为我输的就是00001,所以这用户输入的前后这种。没用的空格是不是应该给它去掉?对吧,这是第一个第二个。第二个。我直接输这个用户名,这个学号行不行。
09:00
这也不行啊,对吧,这也是没用的,还有什么看清楚,我给你先写代码。我给你先写代码,你再来理解啊。如果你看好了。Number。不等于闹。或者。啊啊。不是不等于闹,如果number等于闹。或者。Equals。Number点是什么意思?是不是去掉前后空格啊?Number等于now。或者是number,它不等于闹,但是呢,去掉前后空格以后等于空串。
10:07
这是不正确的吧?这不正确的,应该怎么样让你重新输入。让你重新输入。问题这个好说,这这是干嘛的,这个是干嘛的,知道不知道。很多人啊,我发现。这个我在讲后边课的时候啊,我发现很多学员写这句话,他都能记着写他写他,但是他不理解写这俩是干嘛用的。他只知道啊,我这儿如果什么也没说,我直接点登录。这种情况属于谁,属于哪种?他认为属于这种情况,可不是啊,你看好了,我给你这样写,这样我这加上一个输出语句啊,我给大家区分一下这两。
11:08
啊。用户输入了空串。但用户是从表单。登录的。我要再来一个。我就给你加一个他,他是什么情况,我先不跟你说,就这了。好,重新。重启服务器了啊。你看着我现在什么也不输,或者说我输这个东西。
12:06
他会执行,执行它还是执行它还是俩都执行,你看好了。走。执行了谁,是不是仅仅执行了这个。这个是不是没执行啊,他是针对哪种情况的。他是针对哪种情况的。注意,他真的是这种情况,我需要把这儿改一下。再加一个啊。啊,都。Get。然后。我得加上他。
13:06
你傻了啊。好,我加上他。我重新发布一下。你看看。我是怎么访问的?我把这个啊。Con c。我复制一份,把它关了。再来。我直接到这儿,我我问问大家,我通过表达了没有,没有,我是通过地址栏直接访问login的,看好了走。押。500对,这个500是跑哪儿了,跑这儿了啊,嗯,跑这儿了。
14:07
这样吧,我给你这样。这样执行。我干脆把这个chim也去掉,去掉它就不会出问题了啊,去掉它不会出问题了。好,他重新发布了。看好,我还是这样,直接刷新走。你看他执行谁了,他仅仅执行这个,这个没执行。为什么?这个情况等于now是什么意思?我提交的这个请求根本就没有。Number这个参数。根本就没提交number这个参数里边根本就没有。这样看。打开ITV歌曲。看好啊。刷新。
15:00
你看我提这里边儿第几栏没有吧。你看。这儿有吗?我的请求题里边有吗?这个请求根本就没有的事儿。对不对,根本就没有的事。所以他就是闹这个东西就是闹。明白吧?所以我们写的代码啊,你注意我们总是这样写这个代码。或者他,当然我们要写上这个。这样写,目的是这个是为了防止。我们的用户直接从地址栏访问,不通过我表单直接从地址栏访问。为了防止这种情况,而这个呢。是为了防止用也是从表单访问的。但是。
16:03
没写内容。明白吧,是为了防止这种情况啊啊,我就把它删掉了,好,现在这个我写了啊,如果它是空怎么样。如果现在number是空,我们怎么样?它是空。或者你是没有通过我给你提供的表单来访问了,那这时候我就要让你重新跳转到。Login点儿JSP就让你去登录。跳转到登录页面,诶,我们在想啊跳转跳转我们有两种方式,一种是请求转发,一种是重定向,那我应该用谁呢?用请就转发。还是重定向呢?我们在讲请求转发和重定向的时候,给大家说了一个原则,如果既可以使用请求转发,也能使用重重定向,我们选择用谁?
17:07
用重定向,为什么?因为重定向是不是地址栏里边地址已经改了呀,为它可以防止用户的。恶意刷新,恶意提交。你看我这样给你写,如果我使用请求转发怎么写request,第2GET perter呢,Get requestpa对吧,到哪呀。老根,点儿捡去。点我这用的什么,请求转发吧,对不对。就请求转发我后边的代码就不再执行了,虽然虽然是后边代码,你这就直接转走了,但是我们最好大家养成这样一个习惯,Return一下,显然这个return目的是一看就知道啊,这个方法已经结束了,后边就不会再执行了。
18:09
明白吧,啊,我们最好养成这样一个习惯啊,给它加上一个return,就知道后边不再执行了,那你看一下它会出现什么情况。会出现什么情况?这样吧,我给你加上一个输出语句。加上这个输出语句啊,现在我用的请求转发。好,重新发布了。大家看我现在呀,给这儿输点东西。输什么?我谁也什么也不输,他是不是就走到这里边儿了?对吧,走到这里边儿你看着啊,走是不是回来了,你看到这儿了吧。
19:00
但是现在我。你看看我那边是不是一直点着刷新。我后台是不是一直在做,对你这个请求是不是一直进行处理啊,而这会占用我们服务端的资源。我要是恶意刷新,我按着F5不变不动,哗一直刷新。那么你这夫妻啊,一会儿就死了。所以为了防止这种恶意刷新我们这儿。不使用重定向使用什么,那不使用前置转发,我们使用重定向response.send redirect,那这个怎么写,你得记住啊,像这得记住。我得get request.get contest pass获取应用的根。然后下边的。
20:11
login.JSP。这是不是冲定向啊,好,现在重定向他重新发布呢啊。怎怎么回事儿?那还不如我们自己手动的。好。看着。就是刚才一直点着刷新了啊。好,就到这儿了啊。看我这儿什么也不听,走登陆。到哪了,这执行了一遍吧,紧接着我要恶意刷新的,看看刷新刷新刷新,再刷新,你再刷新,你提交的请求是不是都是这一个页面呢。
21:04
这儿就是一遍。明白了吧?这就是为什么如果既可以使用请求转发,又可以使用重定向,我们选择谁?选择重定向可以防止。恶意刷新。OK,诶,我们把这写完了啊,仅仅把这个接收请求参数的问题。给解决了。
我来说两句