前言
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方法就可以了
这样就是调用了