什么是 spring MVC
- Spring MVC 是⼀个 Web 框架。
- Spring MVC 是基于 Servlet API 构建的。
什么是 MVC
MVC 是 Model View Controller 的缩写,它是软件⼯程中的⼀种软件架构模式,它把软件系统分为模型、视图和控制器三个基本部分。
● Model(模型)是应⽤程序中⽤于处理应⽤程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。
● View(视图)是应⽤程序中处理数据显示的部分。通常视图是依据模型数据创建的。(这个基本没有了,前后端分离了)
● Controller(控制器)是应⽤程序中处理⽤户交互的部分。通常控制器负责从视图读取数据,控制⽤户输⼊,并向模型发送数据。
MVC 和 Spring MVC 的关系
MVC 是⼀种思想,⽽ Spring MVC 是对 MVC 思想的具体实现。 即 Spring MVC 是⼀个实现了 MVC 模式,并继承了 Servlet API 的 Web 框架。既然是 Web 框架,那么当⽤户在浏览器中输⼊了 url 之后,我们的 Spring MVC 项目就可以感知到⽤户的请求。
绝大部分的 Java 项⽬都是基于 Spring(或 Spring Boot)的,而 Spring 的核心就是 Spring MVC。 创建的所有 Spring、Spring Boot 项⽬基本都是基于 Spring MVC 的。
Spring MVC 的三个步骤
Spring MVC 创建和连接
Spring MVC 项⽬创建和 Spring Boot 创建项⽬相同(Spring MVC 使⽤ Spring Boot 的方式创建), 在创建的时候选择 Spring Web 就相当于创建了 Spring MVC 的项⽬。
创建⼀个 UserController 类,实现⽤户到 Spring 程序的互联互通:
java
package com.example.springmvcdemo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
@Controller
@ResponseBody // 这个注解意思:返回的结果是数据而不是页面(前后端分离)
public class UserController {
@RequestMapping("/say") // 默认支持所有类型的请求
// @RequestMapping(value = "/say", method = RequestMethod.POST) // 默认情况下是所有请求都可以接收,如果想只接收 post,就再设置一个 method 方法
public String say() {
return "hello, MVC";
}
@PostMapping("/sayPost") // 或者使用这个注解
public String sayPost() {
return "hello, MVC, sayPost";
}
@GetMapping("/satGet") // 这个注解只能接收 get 请求
public String satGet() {
return "hello, MVC, satGet";
}
}
@RequestMapping 注解介绍
@RequestMapping 是 Spring Web 应⽤程序中最常被⽤到的注解之⼀,它是⽤来注册接⼝的路由映射的。( 路由映射指的是,当⽤户访问⼀个 url 时,将⽤户的请求对应到程序中某个类 的某个方法的过程 )
@RequestMapping 即可修饰类,也可以修饰⽅法。当修饰类的时候也修饰方法时,访问的地址是类 + 方法。
获取参数
单个参数
直接设置方法的形参来进行接收(key 要对应)
多个参数
- 设置多个参数来进行接收
- 构造一个对象来接收(前端传递一个表单 / 一个对象)
- 传过来的是一个 json 数据,使用 @RequestBody
对所传参数进行改名
但是前端如果没有传递 name 的时候就会报错:
因此需要在 value 后面加上 required = false:
URL 中的参数
使用 @PathVariable:
上传文件
使用 @RequestPart:
获取Cookie / header / Session
获取Cookie,使用 @CookieValue
获取 header,使用 @RequestHeader
获取 Session,使用 @SessionAttribute
在获取 Session 之前,得现有 Session,这里我在代码里面先简单弄个 Session:
java
@RequestMapping("/setSession")
public String setSession(HttpServletRequest request) {
HttpSession session = request.getSession(); // 默认是 true,没有 session 的话就创建一个
session.setAttribute("name", "姜维");
return "session 存储成功";
}