SpringBoot MVC 快速入门
1.什么是MVC
MVC的概念
MVC(Model-View-Controller)是一种软件设计模式,用于将应用程序的逻辑、数据和用户界面分离为三个独立的部分。这种分离提高了代码的可维护性、可扩展性和可重用性。
MVC的组成部分
Model(模型)
模型负责处理数据和业务逻辑。它直接管理数据,包括数据的存储、检索和更新。模型通常与数据库交互,但不涉及用户界面的任何细节。
View(视图)
视图是用户界面的部分,负责展示数据(从模型获取)并接收用户输入。视图通常是动态生成的页面或界面组件,不包含业务逻辑。
Controller(控制器)
控制器作为模型和视图之间的桥梁,处理用户输入并更新模型或视图。它接收用户请求,调用模型处理数据,并选择适当的视图进行渲染。

2.什么是SpringMVC?
SpringMVC 的定义
SpringMVC 是 Spring 框架的一个模块,专为构建基于 Java 的 Web 应用程序而设计。它基于 Model-View-Controller (MVC) 架构模式,提供了一种结构化的方式来分离业务逻辑、数据展示和用户交互。SpringMVC 通过DispatcherServlet 作为核心控制器,协调请求处理流程,支持灵活的配置和扩展。
核心组件
- DispatcherServlet:前端控制器,接收所有请求并分发给对应的处理器。
- HandlerMapping:解析请求 URL,确定对应的控制器(Controller)。
- Controller:处理业务逻辑,返回模型数据(Model)和视图名称。
- ViewResolver:将视图名称解析为具体的视图技术(如 JSP、Thymeleaf)。
- ModelAndView:封装模型数据和视图信息的容器。
3.学习SpringMVC
主要分以下三个⽅⾯:
- 建⽴连接:将⽤⼾(浏览器)和Java程序连接起来,也就是访问⼀个地址能够调⽤到我们的 Spring 程序。
- 请求:⽤⼾请求的时候会带⼀些参数,在程序中要想办法获取到参数,所以请求这块主要是获取参数 的功能.
- 响应:执⾏了业务逻辑之后,要把程序执⾏的结果返回给⽤⼾,也就是响应
建立连接
在SpringMVC中使⽤ @RequestMapping 来实现URL路由映射,在Spring框架中@RequestMapping是一个核心注解,用于将HTTP请求映射到特定的处理器方法或类上。
注意:以下代码可利用postman和fiddler观察,这里就不具体的演示。
简单代码示例
@RestController//后续讲解
public class headController {
@RequestMapping("/hello")
public String func() {
return "hello";
}
启动应用后,在浏览器访问http://171.0.0.1:8080/hello即可触发该方法。
GET请求和POST请求
//方法一指定请求方法
@RequestMapping(value = "/m1" , method = RequestMethod.GET)
public String func1() {
return "m1";
}
//方法二 使用GetMapping注解
@GetMapping(value = "/m4")
public String func4() {
return "m4";
}
请求
传递单个参数
// 传递单个参数的情况下
@RequestMapping("/m5")
public String func5(String name) {
return "接受到的参数" + name;
}
咱们使⽤浏览器发送请求并传参 http://127.0.0.1:8080/param/m5?name=spring
注意:如果使用基本类型正常传递参数的情况下为响应200;传递的参数类型不匹配的情况下会返回400;传递的参数为空时会返回500错误;使用在使用过程中包装类和基本类型需挑选使用。
传递多个参数
//传递多个参数的情况下
@RequestMapping("/m7")
public String func7(String name , Integer password) {
return "姓名" + name + "\n" + "密码" + password;
}
传递对象
现在有个user对象里面封装了对象的账号和密码
@RequestMapping("/m8")
public String func8(user user1) {
return user1.toString();
}
后端参数重命名(后端参数映射)
使⽤ @RequestParam 来重命名前后端的参数值.
// 必传参数
@RequestMapping("/m10")
public String func10(@RequestParam("time") String name) {
return "接受到的参数" + name;
}
// 非必传参数
@RequestMapping("/m11")
public String func11(@RequestParam(value = "time",required = false) String name) {
return "接受到的参数" + name;
}
使⽤浏览器发送请求并传参:http://127.0.0.1:8080/param/m10?time=2023-09-12
传递数组
@RequestMapping("/m9")
public String func9(String[] array) {
return "可多传参数" + Arrays.toString(array);
}
数组参数:请求参数名与形参数组名称相同且请求参数为多个,后端定义数组类型形参即可接收参数
传递集合
集合参数:和数组类似,同⼀个请求参数名有为多个,且需要使⽤ @RequestParam 绑定参数关系请求⽅式和数组类似
@RequestMapping("/m9")
public String method6(@RequestParam List<String> listParam){
return "可多传参:"+listParam;
}
传递JSON数据
JSON字符串和Java对象互转
//对象转java
// @Test
// void testObject2Json() throws JsonProcessingException {
// ObjectMapper objectMapper = new ObjectMapper();
// user user = new user("小黑",123456);
// //对象转json
// String s = objectMapper.writeValueAsString(user);
// System.out.println(s);
// }
//json转对象
@Test
void testJson2Object() throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
//定义一个json字符串
String s = "{\"username\":\"小黑\",\"password\":123456}";
//json 转 对象
user user = objectMapper.readValue(s, user.class);
System.out.println(user.toString());
}
传递
接收JSON对象,需要使⽤ @RequestBody 注解
// 传递json数据
@RequestMapping("/m12")
public String func12(@RequestBody user user) {
return "接受到的参数" + user.toString();
}
获取URL中参数@PathVariable
这个注解主要作⽤在请求URL路径上的数据绑定,那么我的请求参数就在问号之前了。
/获取URL中参数@PathVariable
@RequestMapping("/m13/{id}/{name}")
public String func13(@PathVariable Integer id , @PathVariable String name) {
return " 解析参数 id:"+id+",name:"+name;
}
上传⽂件@RequestPart
//上传⽂件@RequestPart
@RequestMapping("/m14")
public String func14(@RequestPart("file") MultipartFile file) throws IOException {
String str = file.getOriginalFilename();
//⽂件上传到指定路径
file.transferTo(new File("D:/图片/" + file.getOriginalFilename()));
return " 接收到⽂件名称为: "+ str;
}
获取Cookie/Session
Cookie 是客户端存储技术,由服务器发送到用户浏览器并保存在本地的小型数据片段。每次请求时,浏览器会自动将 Cookie 附加到请求头中发送给服务器。
Session 是服务器端存储技术,用于跟踪用户状态。服务器为每个用户创建一个唯一的 Session ID,通常通过 Cookie 传递给客户端。后续请求中,客户端通过 Session ID 与服务器交互,服务器根据 ID 查找对应的用户数据。Session 数据存储在服务器内存或数据库中。
cookie其实就是我们的学生证,是在我们的手中,当我们用他在学校刷某一个需要学生证才可以完成的事情时,服务器就会接受到我们的请求,通过服务器所连接的数据库根据Session ID对我们的信息完成认证。

Cookie 和Session的区别
- Cookie是客⼾端保存⽤⼾信息的⼀种机制.Session是服务器端保存⽤⼾信息的⼀种机制.
- Cookie和Session之间主要是通过SessionId关联起来的,SessionId是Cookie和Session之间的 桥梁
- Cookie和Session经常会在⼀起配合使⽤,但是不是必须配合,完全可以⽤Cookie来保存⼀些数据在客⼾端.这些数据不⼀定是⽤⼾⾝份信息,也不⼀定是 SessionId ,Session中的sessionId也不需要⾮得通过Cookie/Set-Cookie传递,⽐如通过URL传递
获取Cookie
HttpServletRequest , HttpServletResponse 是Servlet提供的两个类,是Spring MVC⽅法的内置对象.需要时直接在⽅法中添加声明即可
HttpServletRequest 对象代表客⼾端的请求,当客⼾端通过HTTP协议访问服务器时,HTTP请 求头中的所有信息都封装在这个对象中,通过这个对象提供的⽅法,可以获得客⼾端请求的所有信 息
HttpServletResponse 对象代表服务器的响应.HTTP响应的信息都在这个对象中,⽐如向客⼾端发送的数据,响应头,状态码等.通过这个对象提供的⽅法,可以获得服务器响应的所有内容 Spring MVC在这两个对象的基础上进⾏了封装,给我们提供更加简单的使⽤⽅法
//获取cookie信息//HttpServletResponse response
@RequestMapping("/co1")
public String func15(HttpServletRequest request) {
//获取所有cookie
Cookie[] cookie = request.getCookies();
StringBuilder stringBuilder = new StringBuilder();
if(cookie != null){
for(Cookie cookie1 : cookie){
stringBuilder.append(cookie1.getName()+":"+cookie1.getValue());
}
}
return "cookie:"+stringBuilder;
}
//cookie获取简化
@RequestMapping("/co2")
public String func16(@CookieValue("bite") String bite) {
return "bite " + bite;
}
Session存储
//session存储
@RequestMapping("/setSess")
public String setSession(HttpServletRequest request){
//获取session对象
HttpSession httpSession = request.getSession();
if(httpSession != null){
httpSession.setAttribute("username","zhangsan");
}
return "session 存储成功 ";
}
Session读取
//Session读取
@RequestMapping("/getSess")
public String getSession(HttpServletRequest request){
//获取session对象,如果不存在不会自动创建
HttpSession httpSession = request.getSession(false);
String username = null;
if(httpSession != null && httpSession.getAttribute("username") != null){
username = (String) httpSession.getAttribute("username");
}
return "username:" + username;
}
//Session读取简化1
@RequestMapping("/getSess1")
public String getSession1(@SessionAttribute(value = "username",required = false) String username)
{
return "username:" + username;
}
//Session读取简化2
@RequestMapping("/getSess2")
public String getSession2(HttpSession httpSession)
{
String username = (String) httpSession.getAttribute("username");
return "username:" + username;
}
获取head信息
//获取head信息
@RequestMapping("/head")
public String func17(HttpServletRequest request){
String heads = request.getHeader("User-Agent");
return "请求头中ua信息为:" + heads;
}
//简易获取
@RequestMapping("/head1")
public String func18(@RequestHeader("User-Agent") String userAgent){
return "userAgent:"+userAgent;
}
响应
简单html代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>这是一个页面</title>
</head>
<body>
Hello,Spring MVC, 我是 Index ⻚⾯
</body>
</html>
后台代码
//返回视图的方法
@Controller
//@ResponseBody // 即是类注解又是方法注解,也可以多个数据搭配使用
public class BodyContorller {
@RequestMapping("/body1")
public String func1(){
return "/index.html";
}
返回HTML代码⽚段
后端返回数据时,如果数据中有HTML代码,也会被浏览器解析
@RequestMapping("/body3")
@ResponseBody
public String func3(){
return "<h1>Hello,HTML~</h1>";
}
返回JSON
//也可以返回json对象
@RequestMapping("/body4")
@ResponseBody
public HashMap<String, String> func4(){
HashMap<String, String> map = new HashMap<>();
map.put("Java", "Java Value");
map.put("MySQL", "MySQL Value");
map.put("Redis", "Redis Value");
return map;
}
设置状态码
//设置状态码
@RequestMapping("/body5")
@ResponseBody
public String func5(HttpServletResponse response){
response.setStatus(401);
return "设置成功";
}
设置Content-Type
@RequestMapping(value = "/body6",produces = "application/json")
@ResponseBody
public String func6(){
return "{\"success\":true}";
}
设置其他的head
@RequestMapping(value = "body7")
@ResponseBody
public String setHeader(HttpServletResponse response) {
response.setHeader("MyHeader","MyHeaderValue");
return " 设置 Header 成功 ";
}
@Controller 和 @RestController
@Controller 和 @RestController 是 Spring MVC 中用于处理 HTTP 请求的核心注解,二者均用于标记类为控制器(Controller),但设计目标和功能存在差异。
核心功能差异
@Controller
- 传统 Spring MVC 控制器注解,通常与
@ResponseBody结合使用。 - 返回的字符串默认解析为视图名称(View Name)
- 若需直接返回数据(如 JSON/XML),需在方法上额外添加
@ResponseBody。
@RestController
- 是
@Controller和@ResponseBody的组合注解,简化了 RESTful API 开发。 - 默认将所有方法的返回值直接序列化为 HTTP 响应体(如 JSON/XML),无需显式添加
@ResponseBody。 - 专为构建无状态、数据驱动的 Web 服务设计。
更多推荐

所有评论(0)