spring MVC

什么是 spring MVC

  1. Spring MVC 是⼀个 Web 框架。
  2. 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 要对应)

多个参数

  1. 设置多个参数来进行接收
  1. 构造一个对象来接收(前端传递一个表单 / 一个对象)
  1. 传过来的是一个 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 存储成功";
    }

返回数据

返回静态页面(默认,没加 @ResponseBody )

返回静态页面(加上 @ResponseBody )

请求转发 / 请求重定向

相关推荐
YuTaoShao1 小时前
【LeetCode 热题 100】56. 合并区间——排序+遍历
java·算法·leetcode·职场和发展
程序员张31 小时前
SpringBoot计时一次请求耗时
java·spring boot·后端
llwszx4 小时前
深入理解Java锁原理(一):偏向锁的设计原理与性能优化
java·spring··偏向锁
云泽野5 小时前
【Java|集合类】list遍历的6种方式
java·python·list
二进制person5 小时前
Java SE--方法的使用
java·开发语言·算法
小阳拱白菜6 小时前
java异常学习
java
FrankYoou7 小时前
Jenkins 与 GitLab CI/CD 的核心对比
java·docker
麦兜*8 小时前
Spring Boot启动优化7板斧(延迟初始化、组件扫描精准打击、JVM参数调优):砍掉70%启动时间的魔鬼实践
java·jvm·spring boot·后端·spring·spring cloud·系统架构
KK溜了溜了8 小时前
JAVA-springboot 整合Redis
java·spring boot·redis
天河归来8 小时前
使用idea创建springboot单体项目
java·spring boot·intellij-idea