1. 什么是Spring Web MVC
Spring Web MVC是基于Servlet API 构建的原始Web框架,从一开始就包含在Spring框架中。
Servlet 是一套Java Web 开发的规范,或者说是一套Java Web 开发的技术标准。只有规范并不能做任何事情,必须要有人去实现它,实现Servlet就是去实现Servlet规范提到的各种功能,包括类,方法,属性等。例如Tomcat就实现了Servlet,称为“Servlet”容器。
1.1 MVC含义
MVC是Model View Controller的缩写,它是软件工程中的一种软件架构设计模式,它把软件系统分为模型,视图和控制器三个基本部分。
- View(视图):指在应用程序中专门用来与浏览器进行交互,展示数据的资源。
- Model(模型):是应用程序的主体部分,用来处理程序中数据逻辑的部分。
- Controller(控制器):可以理解为一个分发器,用来决定对于视图发来的请求,需要用哪一个模型来处理,以及处理完后需要跳回到哪一个视图,即用来连接视图和模型。
1.2 什么是Spring MVC
(Spring MVC就是Spring Web MVC)
MVC是一种架构设计模式,而Spring MVC是对MVC思想的具体实现。我们上期创建Spring Boot项目时勾选的 Spring Web 框架,其实就是Spring MVC 框架,也就是说我们上期创建的Spring Boot项目也可以说是Spring MVC项目。
Spring Boot 和SpringMVC的关系就相当于,Spring Boot是一个可以添加很多功能的框架,当然也可以添加 Spring MVC,所以是一个包含的关系。
Spring实现MVC时 ,也结合自身项目的特点,进行了一些改变:
2. 使用Spring MVC
我们学习Spring MVC,重点也就是学习如何通过浏览器和用户进行交互。
- 建立连接:将用户浏览器和Java程序连接起来,也就是访问一个能调用我们Spring程序的地址
- 请求:用户请求时会带有一些参数,在程序中要想办法获取参数,所以请求的处理主要是获取参数
- 响应:执行了业务逻辑后,要把程序执行的结果返回给用户,也就是响应。
2.1 创建项目
和创建Spring Boot项目相同,在创建时 选择上Spring Web即可
2.2 建立连接
在Spring MVC中使用 @RequsetMapping 注解来建立服务器和客户端的连接,用来指定处理哪些HTTP请求以及对应的路径。
package com.example.j20240313springmvc;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class RequestController {
@RequestMapping("/springMVC")
public String say() {
return "hello Spring MVC";
}
}
@RequsetMapping 也可以修饰类
package com.example.j20240313springmvc;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/request")
@RestController
public class RequestController {
@RequestMapping("/springMVC")
public String say() {
return "hello Spring MVC";
}
}
注意访问的url会发生变化:
可以在类中放多个@RequsetMapping 修饰的方法,注意路径不能相同
@RequestMapping("/request")
@RestController
public class RequestController {
@RequestMapping("/say1")
public String say1() {
return "hello Spring MVC";
}
@RequestMapping("/say2")
public String say2() {
return "你好 Spring MVC";
}
}
2.3 @RequestMapping支持GET请求还是POST请求
我们使用Fiddler抓包:
可以看到@RequsetMapping是支持get请求的。
浏览器发送的请求类型都是GET,我们可以在resources/static下写一个html文件使用post发送一个请求
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>post</title>
</head>
<body>
<form action = "/request/say2" method = "post">
<input type = "submit" value = "发送请求">
</form>
</body>
</html>
注意访问时IP和端口号后直接跟文件名,即把static当作根目录。
点击发送
成功跳转到say2 ,Fiddler中也可以看到post请求
2.4 PostMan使用
作为一个后端开发人员,测试代码还要写html文件显得过于麻烦,所以我们可以使用一些工具来发送请求。
PostMan下载链接:Download Postman | Get Started for Free
注册后登录:
点击Create 创建,创建完成后,点击Add a request,创建一个请求
我们输入url点击发送:
下面这些内容代表传递的参数。
Params代表使用查询字符串传参......