Bootstrap

SpringMVC(1)

前言

1. SpringMVC简介

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. 入门案例

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第一步导入坐标,SpringMVC和servlet
在这里插入图片描述
在这里插入图片描述
这样其实就把我们要用的Spring相关的都用上了

在这里插入图片描述
第三步就是加载这个bean
写配置类
在这里插入图片描述
第四步做一个Tomcat容器启动的配置
在这里插入图片描述
还要加上Tomcat插件
在这里插入图片描述
我们在创建一个快捷方式

注意由于我的JDK版本高,所以我只能用spring-webmvc的5.3.22版本,但是呢5.3.22这个版本的Tomcat也必须要版本高才行,所以Tomcat7就不能用了,我用的是本地的Tomcat9,因为Tomcat11和10需要的是javata
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3. 入门案例工作流程

在这里插入图片描述

ServletContainersInitConfig中的createServletApplicationContext加载了配置类SpringMvcConfig,SpringMvcConfig又去扫描了我们的UserController,这样就执行成功了
在这里插入图片描述
在这里插入图片描述

4. bean加载控制

在这里插入图片描述
SpringMVC会记在controller的bean那么如何避免Spring也加载这个呢
因为我们加载Spring的时候是加载itheima下的所有包,所以我们加载Spring的时候,去掉SpringMVC控制的bean就可以了
在这里插入图片描述
在这里插入图片描述

现在没有Spring的配置文件,我们加载一个Spring的配置文件,就是Spring的配置类
在这里插入图片描述
在这里插入图片描述
这样就可以了

第三个方式就是不区分Spring和SpringMVC的环境,都加载到同一个环境

在这里插入图片描述
这样就可以加载Spring的环境了

在这里插入图片描述
在这里插入图片描述
我们现在介绍第二种方法,来加载spring和SpringMVC的配置类

在这里插入图片描述

这样写就可以了

以后都写这个

5. PostMan工具介绍

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

点workspaces
然后创建springmvc
在这里插入图片描述

点搜索下面的加号
在这里插入图片描述
在这里插入图片描述
这样就可以发请求了
直接点那个save或者ctrl+s就可以保存了

在这里插入图片描述
在这里插入图片描述

这样右边就多了一个入门案例了

在这里插入图片描述
在这里插入图片描述

6. 设置请求映射路径

在这里插入图片描述
在这里插入图片描述
bookcontroller和user的都有save功能,那到底执行谁的呢

这个我们直接报错了

怎么解决这个冲突呢
设置相应的模块名就可以了

在这里插入图片描述
这样就可以了

但是都写了save还有点麻烦
我们可以这样来

在这里插入图片描述
我们先在整个类上面写上@RequestMapping(“/user”)
这个就是请求路径的前缀
这样就可以了
在这里插入图片描述
加在类上面就是请求前缀

7. get请求与post请求发送普通参数

在这里插入图片描述

7.1 get请求

在这里插入图片描述
怎么接受get请求的参数呢

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
当然我们也可以在这里测试,下面的key和value就是对应的get请求参数

在这里插入图片描述

7.2 post请求

对于get请求或者post请求,我们后台代码是没有变化的,所以我们不管后台了

我们直接在postman那里搞post
新建一个post
在这里插入图片描述

post请求的请求参数在请求体内,所以我们要点Body

在这里插入图片描述
在这里插入图片描述

这两个的区别主要是,第一个能发文件能发表单,第二个只能发表单,所以我们用第二个
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

注意我们这个不能处理中文乱码问题
在这里插入图片描述
在这里插入图片描述
所以我们要设一个过滤器,在配置类中设置

在这里插入图片描述
在这里插入图片描述
但是不知道为什么,我这样还是会出现乱码,而且就算是打印出来也会出现乱码,但是经过我的仔细仔细再仔细的思考
在这里插入图片描述
给我们的虚拟机加上-Dfile.encoding=UTF-8这个选项就可以了

在这里插入图片描述
而且get请求也可以处理乱码了

在这里插入图片描述

8. 5种类型参数传递

8.1 普通参数

在这里插入图片描述

在这里插入图片描述
注意形参和post请求的参数名称得要一样才能映射,不一样的话就不能映射了

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这样就不行了

我们也是有解决方案的
在这里插入图片描述

@RequestParam(“name”)就是把请求参数里面的name给userName了

在这里插入图片描述

8.2 实体类参数类型

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这个我们就可以看出,post里面的属性名和后面实体类里面的属性名一样,它就可以自动把属性名塞进去

在这里插入图片描述
但是如果里面有引用类型的属性呢
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
这样写就可以了

在这里插入图片描述

8.3 数组

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果不写likes就不行了,就接受不到了

8.4 集合

在这里插入图片描述
在这里插入图片描述
这样写的话就会报错了

为什么不行呢,因为没有List没有这种类型的构造方法,它把likes当成一个实体类对象了

怎么才能把likes扔进去呢

在这里插入图片描述
添加一个@RequestParam就可以实现扔进去了

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

9. JSON数据传递格式

我们常用的就是JSON数据格式

9.1 集合参数

在这里插入图片描述
第一我们先打一个JSON的坐标

在这里插入图片描述
第二就是前端要发送json数据

Body里面选raw就可以了

在这里插入图片描述
第三步就是接收
在这里插入图片描述
我们直接这样写是无法转换的

我们必须得开启一个功能才行
就是在配置类开启就可以了

@EnableWebMvc加上就可以开启了

在这里插入图片描述

这个就开启了JSON转换为对象的功能

但是我们还不能直接转换
@RequestParam已经不管用了,我们得加@RequestBody,因为JSON请求数据在请求体中
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

9.2 pojo

在这里插入图片描述
在这里插入图片描述
接下来把JSON数据在请求体给塞进JSON中

在这里插入图片描述
还是加个@RequestBody即可

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

9.3 集合参数


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

10. 日期型参数传递

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意导入Data的包必须是util的,不然会报错

在这里插入图片描述
注意不要写成Data了

在这里插入图片描述
这就说明了日期型参数是可以直接传递的,由字符串直接可以转成一个Date
在这里插入图片描述
但是我们如果直接写成这种格式就会出错了
因为转换失败了

因为斜杠才是标准格式,怎么指定标准格式呢

在这里插入图片描述
这样就可以了

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
所以我们用@DateTimeFormat就可以指定格式了
在注意一下,要把@EnableWebMvc打开,才能执行这种规则转换

11. 响应

11.1 响应页面

在这里插入图片描述
我们这里有一个页面

在这里插入图片描述

这下我们就在浏览器上访问,因为是跳转页面

在这里插入图片描述

11.2 响应文本

在这里插入图片描述
在这里插入图片描述
但是我们报错了,为什么呢,因为它认为response text是一个页面,所以会报错

在这里插入图片描述

这样就可以了

在这里插入图片描述

说白了就是返回一个字符串,就是响应一个字符串

11.3 响应JSON数据

在这里插入图片描述

我们这样写还不行,因为方法的返回值默认是String,默认是跳转页面,而我们想要的是把这个数据转换成JSON数据,传递出去
还是一个 @ResponseBody就可以了,加上了这个,就不是默认跳转页面的操作了

在这里插入图片描述
在这里插入图片描述

这样我们就成功了

把我们的对象转换成JSON这个事是JSON的坐标干的

在这里插入图片描述
在这里插入图片描述

所以响应JSON数据特别简单

ResponseBody就是设置控制器的返回值作为响应体

12. REST风格简介

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

请求形式不止post和get,常用的就上面的四种

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

13. RESTful入门案例

现在我们直接在原来的基础上修改

在这里插入图片描述
在这里插入图片描述
这样的话,就只能post请求提交

在这里插入图片描述

在这里插入图片描述
现在增加参数的事情
delete的形参是int
在这里插入图片描述
我们的路径要这么写,但是参数怎么知道这不是路径呢,而是参数呢

在这里插入图片描述

这样写就可以了

这就是路径参数,或者路径变量

{id}代表路径的1,形参id代表{id}里面的id,@PathVariable代表我们要从{id}里面取id
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

14. RESTful快速开发

我们可以看出users都重复写了,我们可以简化一下

每个上面都有ResponseBody,也可以简化

在这里插入图片描述
直接在类上面添加一个前缀就可以了

@RequestMapping(“/users”)

后面的@RequestMapping(“/users”)就都可以去掉了

在这里插入图片描述
当然 @ResponseBody也可以写在类的上面

在这里插入图片描述

还有个简化的点就是@Controller
@ResponseBody
这两个东西,每个类上面都要写的,也可以简化

我们直接一个@RestController,就包含了这两个

在这里插入图片描述
每个方法里面都要写 method = ,也麻烦

@RequestMapping( method = RequestMethod.POST)这一行我们可以直接写一个 @PostMapping,这个就代表了上面的

在这里插入图片描述
这样就简化了好多

在这里插入图片描述

在这里插入图片描述

这个调用的就是save
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

15. 案例:基于RESTful页面数据交互

15.1 后台接口开发

在这里插入图片描述

在这里插入图片描述

现在我们写两个接口来测试一下

这里我们在postman那里写了两个测试的

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
因为我们没有写RequestBody

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

15.2 页面访问处理

直接复制功能页面

没有的可以去我的Gitee复制

在这里插入图片描述
主要访问的是books.html

在这里插入图片描述
但是我们却不能访问,为什么呢
因为springmvc给拦截了这个路径,这种图片 css这种应该交给Tomcat处理,而不是springmvc来拦截,为什么拦截了呢
在这里插入图片描述
因为我们的getServletMappings就是拦截的所有路径,所以才会拦截

对于这些静态资源的访问,我们不要过springmvc,我们应该放行
我们在config包下设置一个功能类专门来干这件事SpringMvcSupport

在这里插入图片描述
别忘了做出bean之后,还要去扫描一下

在这里插入图片描述
在给其他静态资源放行

在这里插入图片描述
在这里插入图片描述
现在我们的页面就能正常访问了

现在我们把页面和controller绑定在一起

在这里插入图片描述

进去页面会自动调用getAll方法—》这个操作主要是查询全部的操作

在这里插入图片描述
这样写就可以了,对应的前端代码基本上已经写过了,不用在写了

在这里插入图片描述

这样就可以了

我们开始第二个操作,就是添加操作

我们主要看有没有调用save方法就可以了
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这样就是调用了

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结

;