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 )

请求转发 / 请求重定向

相关推荐
等一场春雨5 分钟前
Java设计模式 八 适配器模式 (Adapter Pattern)
java·设计模式·适配器模式
一弓虽26 分钟前
java基础学习——jdbc基础知识详细介绍
java·学习·jdbc·连接池
王磊鑫27 分钟前
Java入门笔记(1)
java·开发语言·笔记
马剑威(威哥爱编程)1 小时前
2025春招 SpringCloud 面试题汇总
后端·spring·spring cloud
硬件人某某某1 小时前
Java基于SSM框架的社区团购系统小程序设计与实现(附源码,文档,部署)
java·开发语言·社区团购小程序·团购小程序·java社区团购小程序
程序员徐师兄1 小时前
Java 基于 SpringBoot 的校园外卖点餐平台微信小程序(附源码,部署,文档)
java·spring boot·微信小程序·校园外卖点餐·外卖点餐小程序·校园外卖点餐小程序
chengpei1471 小时前
chrome游览器JSON Formatter插件无效问题排查,FastJsonHttpMessageConverter导致Content-Type返回不正确
java·前端·chrome·spring boot·json
五味香1 小时前
Java学习,List 元素替换
android·java·开发语言·python·学习·golang·kotlin
Joeysoda1 小时前
Java数据结构 (从0构建链表(LinkedList))
java·linux·开发语言·数据结构·windows·链表·1024程序员节
扫地僧0091 小时前
(Java版本)基于JAVA的网络通讯系统设计与实现-毕业设计
java·开发语言