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 )

请求转发 / 请求重定向

相关推荐
m0_5719575837 分钟前
Java | Leetcode Java题解之第543题二叉树的直径
java·leetcode·题解
魔道不误砍柴功3 小时前
Java 中如何巧妙应用 Function 让方法复用性更强
java·开发语言·python
NiNg_1_2343 小时前
SpringBoot整合SpringSecurity实现密码加密解密、登录认证退出功能
java·spring boot·后端
闲晨3 小时前
C++ 继承:代码传承的魔法棒,开启奇幻编程之旅
java·c语言·开发语言·c++·经验分享
测开小菜鸟4 小时前
使用python向钉钉群聊发送消息
java·python·钉钉
P.H. Infinity5 小时前
【RabbitMQ】04-发送者可靠性
java·rabbitmq·java-rabbitmq
生命几十年3万天5 小时前
java的threadlocal为何内存泄漏
java
caridle5 小时前
教程:使用 InterBase Express 访问数据库(五):TIBTransaction
java·数据库·express
^velpro^6 小时前
数据库连接池的创建
java·开发语言·数据库
苹果醋36 小时前
Java8->Java19的初步探索
java·运维·spring boot·mysql·nginx