00:00
好,那我们spring VC的入门案例,咱们测试完了之后呢,然后下面大家注意,咱们就把spring VC,然后具体如何来处理一个请求的过程呢,然后咱们来详细的去讲解一下。就比如说咱们的a request mapping对吧,它的功能呢,其实还有很多啊,它并不仅仅可以通过请求路径来匹配请求,它其实还可以通过请求方式呀,还有咱们的请求参数呀,包括我们的请求头信息来进行匹配。好,然后还有就是我们SPAVC中如何出,如何来这个获取请求参数对不对,然后还有就是咱们如何往预对象中去共享数据,哎这些咱们下面就来学习一下啊好,那首先咱们在这再来重新创建一个新的module来点击next,然后它叫做spring_MVC然后下划线,咱们就叫做DEMO,然后咱们在这里面呢,就把咱们刚才所说的这些问题呢给讲解一下啊。好,然后group ID咱们就com点艾特硅谷。
01:02
然后点击finish,好,然后咱们快速的来配置一下啊,首先咱们来找到咱们之前的这个工程,然后把咱们的打包方式,还有咱们当前的这些依赖,然后复制过来。OK,然后import changes,然后下面咱们要干什么了,是不是来添加我们当前的we部模块啊,对不对,然后来找到spring_MVC_DEMO然后找到web,然后在这直接咱们去添加一个web的X名,这是src,然后下面的慢,然后下面的外部APP斜线,OK啊。行,然后我们把它给打开看一下。大家看没有任何问题吧,然后我们再来找到咱们的web的插苗来进行配置,对吧?怎么配置?首先一个solve标签,然后呢,它就叫做spring mvc,然后solve that class,然后叫做dispart solve that,然后再往下咱们需要设置in para,大家要注意它是干什么的,它是来自定义spring VC的配置文件的位置和名称的啊,叫spring mvc,点长苗行,然后再来加上一个load on start up干啥的?然后将咱们solve let初始化时间提前到服务器启动时,然后solve that mapping,然后呢,SPVC写个斜线就行。
02:26
然后我们把这个配置文件呢,然后来创建一下,或者说呢,目前的话,大家直接把配置文件复制过来也是可以的啊,因为我们目前咱们只需要来配置两个内容,一个是扫描组件,还有一个就是来配置视图解析器,对不对好啊。行,然后呢,我们把下面把咱们的控制层呢,来创建出来,com.at硅谷,然后点count controller,点,比如说咱们第一个要来测试的是咱们的请求映射这个注解,那咱们就叫做test request map mapping maping mapping controller。
03:09
行,这个大家注意啊,好,然后下面咱们在这是不是加上一个controller注解完事,好,然后呢,那我们就先把咱们这个访问首页咱们来写一下吧,或者说咱们访问首页的这一个,咱们可以单独来创建一个controller,比如说咱们叫p tal,叫proto control,这是一个入口的控制层,OK吧,然后加上一个a control注解,然后我们在这是不是就可以直接干什么了,然后来写个request mapping,它处理的请求是访问首页,然后呢,咱们返回一个字符串类型的逻辑视图,这个咱们就叫做P行,然后再往下直接return一个index就可以啊。好,那我们当前咱们的这个首页要创建在哪啊。
04:01
大家看咱们的配置文件,然后我们当前的页面是不是都要放在咱们的template下?Web info下面的template下,那咱们就把这个目录呢给创建出来。HTML啊,先创建一个目录叫template,然后再来创建一个新的HTL,叫做index.html,这叫做首页对吧,然后在这是H1叫做index.html就可以啊好,那我们现在把它设置完之后啊,那我们在这大家看一下咱们是不是就可以来访问咱们首页的这个路径,然后是不是就可以直接跳转到咱们的index.html了,能看懂吧,好啊,行,然后我们在这把它给拿过来,然后把当前找到我们的tomca,把我们之前咱们部署的这个工程呢给它删掉,然后咱们再来重新部署一个咱们的spring VC,然后DEMO这个工程啊好,然后它的上下文路径呢,咱们也写的简单一些,咱们还是把它设置为spring VC就可以,然后这个应该是第三个,这个也是第三个,点击apply,点击OK。
05:11
就行了啊好,那我们现在咱们可以来启动一下,然后来访问我们当前的首页对吧?然后那我们在它这个访问启动的过程中啊,我们也可以来看一下咱们的request mapping这个注解的功能,对吧?咱们从注解的名字上咱们就可以看出来,Request mapping叫做什么?叫做请求映射,它可以将我们当前浏览器所发送的请求啊和咱们处理请求的控制器方法,然后来进行关联,OK,咱们已经能访问到了啊,好,然后来进行关联,然后来建立映射关系,也就是说我们从浏览器发送的请求,咱们如何来找到控制器中的方法来处理请求,就是通过咱们的request mapping注解,然后进行匹配的,OK吧,好,所以说这个注解非常非常的重要,如果说你这个注解你不知道该怎么用,那大家注意啊,那我们之后咱们这个具体的一个处理请求的过程,咱们肯定是完成不了的,所以说呢,咱们要讲一下这个。
06:11
这个注解它到底该如何去使用啊?好,首先咱们先看第一个问题啊,叫做it request mapping这个注解所标识的位置。大家看好了,我们可以把它给放在哪呢?你比如说呀,然后我们把这些不用的东西,咱们都给它关掉啊来。然后我们把这个注解给打开,然后在这咱们来看它的target target就是我们当前这个注解能够标识的位置,我们可以把它给标识到一个类上,也可以把它给标识到一个方法上,而我们现在的用法是不是应该就是把它给标识到一个方法上,对不对?那如果我要把它给标识到类上,它又是什么,它又是什么意思呢?大家看啊,比如说然后我们还是这样,咱们怎么做来写一个public,返回一个字符串,然后咱们就叫做h hello。
07:04
Hello,能看懂吧,啊行,然后括号,然后一个大括号,然后我们是不是就可以在这来写request mapping了,对吧?然后比如说呀,我们现在所处理的请求,它也叫做哈,然后呢,我们处理完请求之后,咱们把它跳转到一个统一的页面,叫sus success。首页,然后在这一,然后SUCSS.htl大家注意我创建这个页面,因为咱们每一次处理完请求之后,是不是都要实现页面跳转,那我们现在咱们做完咱们测试完功能之后,咱们统一让它跳转到success HTML OK吧,行,然后那我们再往下,那在这咱们是不是就可以直接return一个字符串叫Su啊。啊。那我们这个注解,它除了可以标记在我们当前的方法上,它它也可以把它给标记在我们当前的一个类上,那你标记在一个类上的话是什么意思?大家注意,如果我们把它给标记到一个类上的话,来设置我们当前请求映射的基础信息,然后如果我们把它给标记到一个方法上,然后来设置我们请求映射的一个具体信息。
08:18
什么意思呢?比如说我在这呢,给它加上一个DEMO,或者说咱们给它加上一个test OK吧,然后我们现在咱们在我们的首页来写一个超链接,然后在这咱们是用来测试it request request的mapping注解所标识的位置,OK,大家看啊,然后我们在这怎么写TH冒号,然后来写一个A大括号斜线怎么写啊哈,我们之前是不是直接这样来访问呀,对不对,但是大家看啊,我现在再来一个重新部署。你会发现它就访问不到了,咱们说的这个来标识,标识到类上是来设置请求映射的初始信息,对吧?然后这个是来设置请求映射的具体信息,那所以我们现在我们要想来匹配一个请求的话,我们是不是得先匹配到我们的test,然后才能匹配到哈,对不对?换句话来说,我们当前在类上加上了request mapping,在方法上加上了request mapping之后,我们当前这个方法,它所匹配的请求的请求路径就是我们的类上的request mapping,以及咱们的方法上的request mapping,他们两个加起来拼接起来之后的一个路径。
09:36
知道吧,什么意思?看好,我现在来一个刷新,我一个点击,大家看这是404能看懂吧,为什么?因为现在咱们在类上加上了之后,我们当前所匹配的请求的请求路径,它应该是访问的是test下面的哈,才能够匹配到我们的这个控制器方法能听懂吧,比如说咱们在这来写一下,在这咱们写个DEMO,然后写个斜线,不是DEMO是test是吧。
10:04
好,然后在这咱们写个test,再写个哈,大家看这是不是就没问题了,能看懂吧,所以说大家一定要注意啊,加到类上是什么意思,加到方法上是什么意思,如果说咱们标识一个类,设置映射请求的请求路径的初始信息,标识到一个方法上来设置映射请求请求路径的什么具体信息。OK吧,好,然后我们把这两个给复制过来,然后放在这个位置,咱们来说第一个问题叫做it request mapping注解,然后标识的位置,标识的位置啊,两个位置啊,一个是标识在类上,一个是标识在方法上,比如说我们当前咱们的这个配置,大家注意啊,以我们当前的这个配置的话,那我们当前的这个控制器方法啊,来咱们这样写啊,好,然后此时此时。
11:01
啊,然后咱们的控制器方法,然后所匹配的请求的请求路径,然后为什么为斜线,然后test,然后斜线hello。能看懂吧,这个答案一定要看好啊好,那这个东西有没有用,那是相当的有用。为什么呢?大家想啊,以后呢,咱们的路径呢,大家注意,那我们肯定是设置的越简单越好,对吧,比如说然后我们以后的路径啊,我要来查询一个list集合,比如说咱们就叫list。然后我要来实行一个删除,咱们就叫做底delete。我们要来实现一个修改,咱们可能就叫做update,对不对?好,那这个时候问题来了,我在一个项目中,咱们是不是有很多个模块,比如说我的用户模块,我要查询集合,查询所有的用户信息,咱们的路径是不是就叫list,那我如果说我有个学生模块,我是不是要查询学生的集合,咱们是不是也要交list,对不对?那这个时候大家想一下。
12:05
然后大家会发现,哎,我们当前咱们的这个请求,我们当前的这个控制器方法,它所处理的这个请求啊,请求路径是不是都是list的对不对?比如说你看啊,大家看好,我把这个东西,然后在这咱们给它复制一下,然后放在我们的proto这个controller里面,你看这个时候就变成了什么意思,我们现在有两个控制层,两个控制层里面是不是都可以对我们当前的这个哈,这个请求路径为哈的这个请求来进行处理,那大家说这个时候他是用这个方法处理呢,还是用这个方法处理呢?大家想一想,这时候咱们就不知道了吗?那程序是不是也傻了呀,他也不知道了,那不知道怎么办,那我们已经学过my be和spring了,咱们经常说这个问题,他不会出现这种模棱两可的问题,对吧?如果有它一定是直接报错的,所以说我们现在咱们再来一个重新部署,大家看啊。
13:04
嗯。好,大家看一下,你看在这他就直接报错,报的什么错,然后他说对吧,然后这个单词我虽然说不会念啊,但是我知道这是模糊不清的,对吧?然后他说我们当前这是模糊不清的一个映射,他说我们不能去映射谁啊,叫做test request mapping controller里面的哪个方法就是我们的哈,这个方法对吧?好,然后这个为什么呢?因为我们当前咱们的proto control里面是不是已经有一个方法,然后去映射了,对不对。对吧,所以说大家注意这个时候行不行,绝对不行,那就像是我们刚才跟大家说的,我现在有个student controller,有个user controller,然后我们当前这两个里面都有一个处理什么呀,处理这个集合请求的这个请求映射,那咱们的请求路径都叫list,大家说行不行。啊,大家说行不行不行吧,那所以这个时候他报的错是不是跟咱们这个错是一样的,那这个时候大家注意,我们就可以在咱们的类上加上一个request mapping,比如说我们当前咱们在user control里面,在这个类上加上一个什么叫做user,然后在我们当前咱们的student control里面加上一个student student能听懂吧,那当我们在这些控制层里面,咱们再设置请求映射的时候,你比如说你就叫list,这个也叫list,那大家说这个时候咱们当前的这个请求映射。
14:31
对吧,它完整的路径应该是啥?应该是斜线U,斜线list,这个是斜线student,斜线list能听懂吧,哎,行,所以说这个东西咱们以后经常会用啊,特别是咱们在分模块的时候,对吧?然后呢,我们这个要想在路径中体现出来,我们到底这个是哪一个模块中的请求,请求的是哪个模块中的资源,那我们就可以在我们当前的类上来设置一个request mapping这个注解。OK吧,这个大家注意行,所以说这个东西以后咱们用的还是比较多的啊好,那我们把它给删掉啊,把它给删掉。
15:08
行,那这个咱们就先把它给注释掉啊,大家注意,那我们现在呢,咱们应该怎么来访问我们的这一个请求映射所对应的方法,大家应该都知道吧,咱们的路径应该是类上的request mapping的路径,加上咱们的方法上request mapping的路径。能听懂吧,行,这个大家注意啊。
我来说两句