00:01
好啊,那接下来我们要实现的效果就是我想再回到我这个登录页面的时候呢,我要在这个地方去显示出我的。登录失败的一些什么消息提示来吧,对吧,这样的话用户体验会好一点,OK,那我们怎么去做这个事呢?大家注意,我就想着说当我再回来的时候呢,我就要把你的那个错误提示呢给大家显示到这儿,那么这个技术的话,我们需要用到一个什么转发啊,这个过程我们需要用到一个转发的技术,那么接下来我们就来看这个转发它是一个什么意思啊,往上翻在这,呃,什么叫做这个请求转发呢?注意大家一定要跟那个请求重立上区分开了哈,这两个是很多同学容易搞混的一个地方,明白吧,来,那么就先来听我说什么叫做请求转发,就是solid接收到这个浏览器的请求以后呢,进行一定的处理,他还不进行响应,而是在服务器端内部呢,转发给其他的一个骚的程序继续处理。啊,什么意思呢?我来给大家去解释啊,就是当我的客户端的一个请求过来了以后呢,他打到了我的一个什么comca里面,明白了吧,那他看里面首先呢,我会有一个这个solid好去处理你当前的这个请求,但是呢,我这个solid呢,我只能处理你大部分的一些功能,明白了吧,剩下的一些功能呢,我没办法再去处理了,那么这个时候怎么办呢?我就可以把这个请求呢,继续转发到另外一个组件,比如说我们的JSD,让这个JSD呢,进行一个什么后续的处理,而只有等他也处理完成以后,就是相当于你这个整个请求都处理完成以后呢,我再给你做一个统一的一个响应,这个过程呢,叫做转发,那么大家要注意,这个转发是一个服务器内部的转发,什么内部转发啊,就是我只能转发给我当前服务器里面的某一个组件。
01:58
明白吧,但是重地向呢,你是不是可以从地向到任何一个地方啊,对吧?哎,这个是它的一个区别了哈,一定要记得住,OK,那么我们就来分析一下,我现在呢,把一个登录请求呢,交给我的什么呀。
02:14
Logging solid去处理,他能处理成什么地方呢?他能把业务处理了,比如说我能得到,你到底能登录还是不能登录,这个是不是相当于把业务处理完了,那么得到这个结果以后,我想把这个结果是不是显示到,比如说我登录失败了,我想把这个结果呢显示到页面中,而这个具体显示的这个技术,你想想S是不是不擅长啊?擅长吗?他不擅长吧,我们已经把它交给GFB去处理了嘛,他肯定是不擅长的嘛,所以说我就希望我能不能把这个结果呢,我就交给交给这个JB,你来帮我做一个显示。能理解这个意思吗?你来帮我去做一个显示。啊,那么这样的话呢,我们就可以什么相当于一个请求呢,我用到了多个组件来去处理你这个过程,那么一般情况下我们都是让sorry去负责你的业务处理,而让GSP呢,去负责你最终的一个数据的呈现就可以了。
03:12
明白这个意思吗?OK,那么接下来我们就来看一下他应该怎么去用啊,好,请求转发呢,我们需要获取到一个转发器,然后呢,再做一个具体的转发代码,也就两行,特别简单,但是呢,我需要给大家去说明白一个原理,什么原理呢?好,这个呢,我们需要来给大家对比的说一下怎么对比呢?我们先来再回顾一下我们讲过的重定向啊,同志们还记不记得啊?进闭的重叠上啊,什么样的重叠上来着,就是浏览器端来注意第一次请求过来以后,就是他第一次请求吧,过来以后呢,比如说你做了一个什么某一个操作啊,他这个处理完了,他处理完成以后呢,发现诶你这个需要就是不能,比如说登录吧,你这个登录失败了,那么重立账是什么意思呢?就是来你第一次请求过来了以后,好,他处理完成以后呢,他觉得不对是吧,他就要给这个浏览器端呢,发送一个什么302状态码,并加上一个什么URL地址吧,对不对,然后呢,浏览器收到这个结果以后呢,是不是就立马朝着什么呀,新的这个URL去发送一个请求啊,那也就意味着浏览器总共发送了几次请求,哎,两次听懂这个意思了吧,总共发生两次请求,那么每一次请求呢,他都会有自己对应的什么请求对象以及响应对象。这个是我们。
04:44
当初在讲request就说过,只要有一次请求,我就会帮你创建一个请求对象嘛,对吧,OK,这是我们的从地上大家要进行求了啊,接下来说转发。什么是转发呢?注意还是我们有一个浏览器,我们有一个服务器端啊,来注意了啊,这个大一点哈,那么我浏览器端呢,发送了一次请求过来,那么这一次请求来了以后啊,比方说我先把它交给谁了,交给我的一个叫做logging solid去处理好,这是我这个logging,诶这个logging solid去处理好,他呢能处理一些业务,比如说我处理完了,就是我能得到一个结果,什么结果呢?就是你能登录,或者你登录不了。
05:32
对吧,那么我们现在呢,先不研究能登录的情况下,我们先研究不能登录的时候,那我是不是把这个结果希望给你显示到这个页面中啊,但是呢,这个三它不适合就是不擅长去做这个事,那么他就要把这个请求呢,继续交给另外一个组件,比如说我们的JSP。明白了吧,交给这个GSP去处理的话,你看我把这个结果呢,交给这个GP,而这个GSP是不是就可以很擅长的把一些什么数据给你什么呈现到你这个页面了吧,对不对,那么最终的话,我这个浏览器呢,我就拿到了我的什么诶这个结果了,所以你看一下整个过程中几次请求,注意是一次请求,虽然说做了转发了,但是呢,他是在这一次请求内部做了一个服务器内部的转发,理解了吧,这也是他们最本质的一个区别,OK,好,那么既然你是一次请求,那么我在这整个过程的处理中,是不是都用到了一个request对象,一个response对象吧,是不是啊,一次请求里面就有一个请求对象,一个象A对象,好,那么这个解释清楚了以后来注意我们接下来就可以使用我们的转发,注意回到代码,这回到这个地方以后呢,大家注意啊,当你登录失败以后,我要做什么事呢,我现在就。
06:52
不再通过什么重叠上的方式了,因为它实现不了了,好,我要通过什么呀,通过我们的转发,怎么个转发啊,注意了啊,就是我们先要去获取到我们的啊,我先写一下啊,获取我们的转发器,怎么获取转发器呢?就是request,有一个get request。
07:24
好,后面写的是什么呢?后面写的是你要转发到什么地方,那我现在是不是希望你登录失败以后,你是不是还去玩那个log.jsp吧,对不对,所以说呢,那你就再去往我的log JSP看到了吧,那么这就获取到了我们的一个转发器的,它叫什么?它叫做request,叫dispa OK RD就是获取到我们的转发器了,那么获取到转发器以后,接下来干嘛呢?我们就可以什么开始转发了,怎么转发呢?就是RD点有一个方法叫做forward,注意你一定要把我们当前请求里面的request以及response给它传过去,为什么呢?因为我们刚才说过了,在整个转发里面,比如说从一个solid转发到一个GP的时候,他们是不是在一次请求期间啊,那么你这个solid用的这个request以及response将来在GP里面。
08:25
是不是也得用啊,对吧,所以说呢,你一定要给人家传过去,听懂这个意思了吧,OK,好,那么这样我就完成转发了,但是我们来想你这转发你也是去往这个页面了,我那个错误提示,我是不是还没有交给他呀,对不对,所以说呢,我们一般呢,在转发之前,我们都要什么呀,绑定数据啊,绑定数据,绑定数据啊,啊什么样的绑定数据呢?就是什么呀,就是将诶一些什么呀,就是将我们这个呃想要交给就是下一个组件,比如说就是我们这个GSP,一般的话我们都是转化到GSP啊,但是呢,我能不能转化到solid啊也可以的嘛,因为你们本质上都是扫嘛,是吧?哎,一般就是将想要交给下一个组件处理的数据,我们要什么呀?给它绑定到我们的request。
09:25
对象中,理解这个意思吧,把它绑定到这个快速对象中,为什么要往这里面绑定啊,因为你还是一个请求阶段,你看一下啊,再给大家分析这个过程,比如说我的这个主见我要转发到我的什么这个主见了,那么转发的这个过程有没有开始给你响应啊,没有响应吧,所以说呢,转发呢,它还是属于一个请求阶段,那么我们就要把数据呢,绑定到这个请求的这个request对象里面啊,你在这个里面把数据绑定到request里面了,我又把request给你传递到这个组件里面了,那我在这个组件里面,我就可以通过request获取到我的上一个组件里面的数据了吧,能理解吧,那注意了,你看了哈,我要怎么做呢?我就要做这样做啊,就是request.set一个attribute,就是我们新接触的一个方法,绑定数据,听到了吧,一个RI,然后呢,给个K给个V啊,比如说我就叫。
10:23
可以吧,登录的一个消息,比如说呢,当你登录失败了,那无非就是什么呀,用户密更密码错误,好用户名或者密码错误,是不是这样的消息啊,OK,那我就把这个呢绑定进去了,那么绑定进来以后呢,大家注意通过这个forward,它是不是去往我的这个login的SP了吧?OK,来到这个login.sp以后呢,大家注意了啊,我们来到这个login.gsp那么你又回到这个地方以后,我是不是就可以把那个错误信息给你显示到这了,好,来这个地方我们要显示错误信息了,那我是不是可以去写我的加va代码了吧,对不对,OK,怎么写加va代码啊,我在这个地方我就要想办法什么获取到我的request对象对吧?好,那么获取到这个request对象为什么获取它呢?因为它里面是不是有我的数据啊。
11:24
啊,OK,怎么获取它呢?大家听我说request对象不需要获取啊,就是request这个对象可以直接用,不仅他可以直接用,我们总共有九个可以直接用的对象,我就顺带的跟你去说一下,为什么能直接用呢?那我们其实得去看什么呀,得看这个编译完以后的这个页面啊,这个你看这个log页面也行,看这个你单页面也行啊,因为它这个JSP的处理都是一样的,我们来看哈,当你把一个JSP去转化成点Java以后,看到了吧,诶点Java以后呢,它上面的这一部分代码呢,都是统一的啊,基本上都是统一的,那我们主要来看这个地方,它已经在这里面帮我们声明好了,我们将要以后会用到的什么配置,Contact session application conflict,你看art流是不能直接用啊,对吧?来,再来,往下看。
12:24
啊,还有什么东西啊,你看像我们的这个,呃,这个request,像这个request response就更不用说了,你看request以及我们的后面的这个response是不是都在这里面的,看到了吧,你都是可以直接去用的啊,然后呢,除了这两个之外呢,像我们这个流,像我们将来的这个application contact con什么等等等一些,总共有九个,我们是可以直接用的,明白了吧,你这个的话,你就要去对应了,因为什么呀?因为你index这个,因为你GSP里面的这些代码,将来都是出现到谁里面的,都是出现到我们的这个叫做service这个方法里面的,所以说呢,在service方法里面的这个上面呢,我们已经提前把这些东西都给你设置好了,那么你在下面你是不是可以直接去使用了。
13:13
对吧?OK,因此我们在这个JSP页面里面,我们就可以直接使用我们的request对象,那么现在我要做的是request.gettribute刚才不是set tribute吧,现在我要get出来,通过我们的log把它get出来,能看懂吗?你来看吗?这个塞进去了吧,是不是,那我来到这,我就给你get出来呗。对吧?OK,概率出来以后呢,这就是一个什么?哎,比如string,比如说loging message,就等于它是不是给你get率出来了,好,它或它是一个object,那我们需要给它强转一下强整的词寸类型的,那我接下来我是不是希望什么呀,是不是希望把这个呃,Logging message是不是显示到我这个后面啊,是不是显示到这儿啊,OK,那么我们可以怎么做呢?大家注意哈,我们可以在这个后面啊,给它加上一个什么东西啊,加上一个SPA标签,这个SPA标签呢,就是专门用来去呈现一些数据的,然后呢,一般的话提示信息都是错误的,我还可以给你加个什么呀,加上这个颜色什么的都可以去加的,这个我们以前是不是也用过啊,对吧?啊,那我就加个什么呀?嗯,我们可以写样式嘛,你看了哈,对于这个SPA来讲,好,那我就SPA标签好给你简单加个样式啊,加个什么呀,Color red,这就是字体颜色,看到了吧,OK,好,我就把这个加上,加上以后的话,我们这个SPA标签呢,它就是一个红颜色的了。
14:46
好,那我就希望什么呀,把你拿到的这个login message这个数据是不是给你显示到这啊,怎么显示呢?来表达式,你看加括号,百分号等号login message是不行了,你要时时刻刻去想那个他是怎么转化的,这个代码照搬过去了,这个代码通过流往出写,是不是写到我的页面中了,而我的这行代码是在这行代码的下面,从Java的角度来讲,我是能用到你的这个变量的吧,听懂了吗?OK,那么这样的话呢,我们就把你的错误信息从你最终的loging sorry的这个地方就成功的给你显示到了你的loging.GSP里面,明白这个意思吧,OK,来,把这个写好以后,我们重新来部署,来访问一下,我们现在看看这个效果有没有了啊,来启动。
15:38
好,启动了啊,启动以后呢,我们就来访问,你来看看哈,首先大家先看这个情况啊,我是不是先要访问到SP啊,对不对啊,OK,来那访问。哎,直接来回了闹,直接来了个闹,大家想一想,这是什么原因啊,能想明白什么原因吗?我来给大家解释哈,听懂了哈,来听了哈,我访问了几次了,给点SP啊,两次吧,第一次访问,那是我真的就想去往这个登录页面,我要进去登录了吗?那我得先去往这个页面吧,OK,第二次是什么呀?是我转发到了这个页面了吧,是不是只有转发回来以后,我才想去显示那个错误信息吧,是不是这个意思啊?OK,那你想一想,如果我真有错误信息的话,那我转发回来以后,我是我显示是不是正常的呀,但是我一上来我直接去访问这个login.gsp那么你这里面的这个代码是不是就会执行了,但是你想一下。
16:52
我执行他的候,我有没有把数据绑定到这个request里面呀,执行他的时候,你这个代码是不是还没有执行的呀,他是什么时候执行的呀,它是你点那个登录,就是具体登录的时候才会执行的吧,所以说问题就在这的,因为你一进来要执行他,执行他的时候呢,就会遇到一个问题,什么问题啊,他还没数据,你这个地方就是个闹了呗。
17:18
是不是啊,OK,所以说这句话我们就要来做一个判断啊,一会我再来解决这个问题,我们先看正常效果,它是没问题的,注意了啊,我来登录你你你先假设我没看到那个闹是吧?啊,它不存在的啊,123456789,这是错误的,来注意登录又回来了吧,显示了吗?显示了吧,OK,这就没有任何问题了,但是呢,大家注意了啊,我一进来以后老费你这SD,你看这家伙讨厌不好,不讨厌。同学吧,所以这个我们就得判断,怎么判断一下呢?注意,那我就来想一下,假如说反正你进到这个lockb,你这个代码就得执行,那我就来判断一下,假如说我能拿到这个值,说明我是转化回来的,如果说我拿不到这个值,它是一个空,说明你是第一次进来的,那你就判断一下它等不等于空,可以写点表达式的么,对不对?如果它等于空,那我就给它什么呀,空字不算是不是就成了?如果你不等于空呢?那我就直接给你显示log,给message一个三步运算符,是不是搞定了这个啥?来把这个写好以后我们再来访问,来都看好了啊,先来访问,走还有吗?没了吧,再给你访问一次,有没有啊,没有,OK,那我们来登录,来等密好,当我输错789啊,随便输的啊,来登录有没有有了吧,哎,输错没。
18:50
你看我们就使用我们的转发,就实现了我们的错误提示这样的一个效果。
我来说两句