文章目录
- 什么是Spring MVC
- MVC
- Spring MVC
- Spring Boot与Spring MVC的区别
- 学习Spring MVC
- 建立连接
- 1.@RequestMapping 注解介绍
- 2.使用@RequestMapping
- 3.@RequestMapping是Get请求还是Post请求?
- Postman
- 1.下载安装
- 2.创建请求
- 3.传递参数
- 小结
什么是Spring MVC
MVC
要想认识Spring MVC,首先要从MVC入手。
MVC全称Model View Controller,是一种软件架构设计模式,把软件系统分为模型、视图和控制器三个部分。
View-视图:在应用程序中专门用来与浏览器进行交互,展示数据的资源。
Model-模型:是应用程序的主体部分,用来处理程序中数据逻辑的部分
Controller-控制器:类似于分发器,决定对于视图发来的请求,需要用哪一个模型来处理,以及处理完后需要跳回到哪一个视图。即用来连接视图和模型
简单说:用户发起请求 → Controller 接收并调用 Model 处理逻辑 → Model 返回数据 → Controller 交给 View 展示 → 响应给用户。
Spring MVC
MVC 是⼀种架构设计模式, 也是⼀种思想, 而Spring MVC 是对 MVC 思想的具体实现. 除此之外,Spring MVC还是⼀个Web框架.
总结来说,Spring MVC 是⼀个实现了 MVC 模式的 Web 框架
所以Spring MVC最重要的两点就是MVC和Web框架。
我们上篇文章创建第一个SpringBoot项目时曾经勾选过的Spring Web框架其实就是Spring MVC框架。
到这里,大家可能会产生一个疑问,不是说上节课创建的是Spring Boot项目吗,咋又成Spring MVC项目了?
Spring Boot与Spring MVC的区别
Spring MVC 是处理 Web 请求的核心框架,Spring Boot 是简化 Spring 开发的工具;Spring Boot 通过 spring-boot-starter-web 自动配置了 Spring MVC 的所有核心组件(DispatcherServlet、注解驱动、JSON 序列化等),让你不用写任何 XML 配置就能直接用 Spring MVC 写接口。
举个例子,我们现在在厨房可以做饭,因为厨房有锅碗瓢盆,油盐酱醋以及各种工具。但在远古时期,人们只需要生起火来就可以做饭,本质上都是做饭。做饭这件事本身就是MVC,而Spring Boot相当于厨房,提供了各种各样的工具方便你做饭。即使不使用SpringBoot当然也能实现MVC
学习Spring MVC
当我们在浏览器输入url之后,SpringMVC就会感知到用户的请求并给予响应。
我们对于SpringMVC的学习,重点也就是学习如何通过浏览器和用户进行交互。其中主要涉及三个方面:
1.建立连接
2.请求
3.响应
学好了这三个方面,也就掌握了SpringMVC。
建立连接
在 Spring MVC 中使用 @RequestMapping 来实现 URL 路由映射 ,也就是浏览器连接程序的作用
上一节中我们写了一个hello spring的程序,这次我们新建一个UserController类深入实现用户与系统的交互过程。
packagecom.bite.spring.demo;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/User")publicclassUserController{@RequestMapping("/m1")publicStringm1(){return"hello m1";}}
访问主机ip端口,就可以得到程序结果了。
1.@RequestMapping 注解介绍
@RequestMapping 是 Spring Web MVC 应⽤程序中最常被⽤到的注解之⼀,它是用来注册接口的路由映射的.
表示服务收到请求时, 路径为 /m1 的请求就会调用 m1 这个方法的代码.
路由映射: 当用户访问⼀个 URL 时, 将用户的请求对应到程序中某个类的某个方法的过程就叫路由映射.
RequestMapping已经可以满足我们的需求了,那么@RestController的作用是什么呢?
如果把这个注解去掉:
程序会返回404,这也就是@RestController起到的作用
一个项目中, 会有很多类, 每个类可能有很多的方法, Spring程序怎么知道要执行哪个方法呢?
Spring会对所有的类进行扫描, 如果类加了注解@RestController, Spring才会去看这个类里面的方法有没有加 @RequestMapping 这个注解, 当然他的作⽤不⽌这⼀点, 咱们先⽤, 后⾯再详细讲
2.使用@RequestMapping
@RequestMapping 既可修饰类,也可以修饰方法 ,当修饰类和方法时,访问的地址是类路径 + 方法路径。
比如咱们的代码是/User/m1。
@RequestMapping 的URL 路径最前面加不加 / (斜杠)都可以, Spring程序启动时, 会进行判断, 如果前⾯没有加 / , Spring会拼接上⼀个/
packagecom.bite.spring.demo;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("User")publicclassUserController{@RequestMapping("m1")publicStringm1(){return"hello m1";}}像这样的代码也是没有任何问题的。
此外,这里的路径也可以是多级路径,使用时依然是类路径+方法路径
packagecom.bite.spring.demo;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("User/User1")publicclassUserController{@RequestMapping("m1/m11")publicStringm1(){return"hello m1";}}3.@RequestMapping是Get请求还是Post请求?
咱们上面进行的基本请求都是Get请求,因此只需验证是不是能处理Post请求即可。
我们通过form表单来构造请求:
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Title</title></head><body><form action="/User/User1/m1/m11"method="post"><input type="submit"value="提交"></form></body></html>
前端代码放在static⽬录下,访问方式是直接http://127.0.0.1:8080/html/test.html
从结果可以看出,@RequestMapping确实支持Post请求。
所以,我们可以限制@RequestMapping 只能接收某一种请求:
@RequestMapping(value="getRequest",method=RequestMethod.GET)publicStringgetRequest(){return"hello get";}但是呢,通过前端代码来改变请求类型太麻烦了,而且咱们学后端的也不一定会前端啊,还是要找一个更好的测试代码的工具/方法,也就是我们下面要学习的Postman。
Postman
1.下载安装
下载链接: https://www.postman.com/downloads/
2.创建请求
在WorkSpace直接创建请求即可。
界面介绍:
3.传递参数
1.普通传参
通过查询字符串来传递参数
我们可以直接在url里面加入参数,也可以使用下面的Query Params工具来传参。
2.form-data
表单提交的数据, 在 form 标签中加上 enctyped=“multipart/form-data” , 通常⽤于提交图⽚/⽂件. 对应 Content-Type: multipart/form-data
3. x-www-form-urlencoded
form表单, 对应 Content-Type: application/x-www-from-urlencoded
4. raw
可以上传任意格式的⽂本,可以上传text、json、xml、html等
记不记得咱们之前抓包的时候都是看raw部分?
小结
到此为止,SpringMVC就算是入门了,但是请求和响应会涉及到很多的代码和新知识,所以我准备在下一篇博客中专门讲解。