Spring MVC

文章目录

  • [Spring MVC基础](#Spring MVC基础)
    • [1. 建立连接](#1. 建立连接)
    • [2 请求](#2 请求)
      • [2.1 指定请求方式](#2.1 指定请求方式)
      • [2.2 传递单个参数](#2.2 传递单个参数)
      • [2.3 传递多个参数](#2.3 传递多个参数)
      • [2.4 传递对象](#2.4 传递对象)
      • [2.5 参数进行重命名](#2.5 参数进行重命名)
      • [2.6 传递数组](#2.6 传递数组)
      • [2.7 传递集合](#2.7 传递集合)
      • [2.8 传递 JSON 数据](#2.8 传递 JSON 数据)
      • [2.9 获取 URL 中的参数](#2.9 获取 URL 中的参数)
      • [2.10 上传文件](#2.10 上传文件)
      • [2.11 获取 cookie 和 session](#2.11 获取 cookie 和 session)
        • [获取 cookie](#获取 cookie)
        • [获取 session](#获取 session)
      • [2.12 获取Header](#2.12 获取Header)
    • [3. 响应](#3. 响应)
      • [3.1 返回静态页面](#3.1 返回静态页面)
      • [3.2 返回数据](#3.2 返回数据)
      • [3.3 返回 HTML 片段](#3.3 返回 HTML 片段)
      • [3.4 返回 JSON](#3.4 返回 JSON)
      • [3.5 设置状态码](#3.5 设置状态码)
      • [3.6 设置 Header](#3.6 设置 Header)
      • [3.7 自定义 Header](#3.7 自定义 Header)

Spring MVC基础

1. 建立连接

复制代码
@RequestMapping

@RequestMapping 作用范围:

  1. 类(一个类有多个注解时,没有先后顺序)

    如果加在类上,需要类路径 + 方法路径

  2. 方法上

java 复制代码
@RestController
public class UserController {
    @RequestMapping("/hello")
    public String hello() {
        return "hello";
    }
}

2 请求

2.1 指定请求方式

注解里,双引号的值会赋给"value"这个属性

对多个属性赋值,需要写上属性名

只有一个属性是,且属性名为 value,可以省略

这个时候 post 就获取不到


2.2 传递单个参数



但是如果是 int,并且为空

先观察HTTP 状态码

如果404,先确认url是否存在

如果5XX,先去看后端控制台日志

错误日志: 从下往上看(看不懂的跳过,别死磕)

这里是要改成包装类

2.3 传递多个参数

参数请求,不分先后

2.4 传递对象

如果需求修改,就可以封装成一个对象

2.5 参数进行重命名

2.6 传递数组

第一种传递方式:


第二种传递方式:

多个名称一样的参数是,会把它变成一个数组

2.7 传递集合


2.8 传递 JSON 数据

什么是 JSON?

简单来说:

JSON就是⼀种数据格式,有自己的格式和语法,使用文本表示⼀个对象或数组的信息

因此JSON本质是字符串

主要负责在不同的语⾔中数据传递和交换


postman 发送请求的时候

左边的小绿点,表示这里有参数传递

2.9 获取 URL 中的参数

对参数进行重命名

2.10 上传文件

  1. 用户提供账号和密码,服务器进行验证
  2. 服务器验证通过,会把信息存储在 session 中,把 sessionId 返回给客户端(通过 set-cookie 的方式)
  3. 客户端收到响应,把 sessionId 存储在 cookie 中
  4. 后续的请求中,客户端待着 sessionId 去请求(待着 cookie 信息去请求)

request.getSession 就是从 cookie 中获取 sessionId,并且根据 sessionId 获取 session 信息


Cookie 和 Session 的区别:

• Cookie 是客⼾端保存用户信息的⼀种机制,Session 是服务器端保存用户信息的⼀种机制

• Cookie 和 Session之间主要是通过 SessionId 关联起来的,SessionId 是 Cookie 和 Session 之间的桥梁

• Cookie 和 Session 经常会在⼀起配合使用,但是不是必须配合

  • 完全可以⽤ Cookie 来保存⼀些数据在客户端,这些数据不⼀定是用户⾝份信息,也不⼀定是 SessionId
  • Session 中的 sessionId 也不需要非得通过 Cookie/Set-Cookie 传递,比如通过URL传递

共同点:

都是会话机制

cookie 是客户端机制

session 是服务器机制

cookie 存储的信息由程序员而定

session 也不一定必须存在 cookie 中

传统方式获取 cookie

这两个是内置对象,如果有需要,就加上,不需要,就不加,需要几个加几个

这两个是等价的关系


简洁获取Cookie

这里获取的 cookie 是单个的值

获取 session

传统方法

这里默认为 true

如果 session 为 null,就创建一个空的 session


方法二:

内置对象,如果需要,就加上这个参数


方法三:

2.12 获取Header

传统获取 header


简洁获取 Header

3. 响应

3.1 返回静态页面

访问 URL:http://IP.port/index.html

如果 static 下面有其他的目录,需要带上其他的目录

返回静态页面的代码

这里可以发现,使用@RestController不可以,但是使用@Controller可以


@RestController 和 @Controller 区别与联系

RestController:

前三行是元注解 ,可以解释到 其他注解 的注解

@Target:表示注解的适用范围,Type 表示类型

@Retention:注解的生命周期

@RestController = @Controller + @ResponseBody

@Controller:告诉 spring,帮助我们管理哪些程序

@ResponseBody:返回数据


servlet 路径有项目名,是因为一个tomcat 下面可以部署多个项目,我们需要通过路径进行区分

spring 路径不需要有项目名,是因为 springboot 内置了 tomcat,一个tomcat 线面就部署当前这一个项目

如果部署多个项目,就启动多个 tomcat

  1. 一个项目部署多个服务

  2. 部署多个项目
    给不同的项目设置不同的端口号

3.2 返回数据

随着前后端的分离,后端只处理数据,返回页面显示需要的数据,而不再返回页面

@ResponseBody 即可以修饰类,又可以修饰方法

修饰类:表示该类所有的方法

3.3 返回 HTML 片段


3.4 返回 JSON



spring 会根据返回结果,进行动态设置





3.5 设置状态码

状态码的设置,并不影响 页面展示

3.6 设置 Header

  1. value: 指定映射的URL
  2. method: 指定请求的method类型, 如GET, POST等
  3. consumes: 指定处理请求(request)的提交内容类型(Content-Type),例如application/json, text/html
  4. produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回
  5. Params: 指定request中必须包含某些参数值时,才让该方法处理
  6. headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求

设置 Content-Type:

也可以同步设置编码

3.7 自定义 Header

在鉴权的时候会使用 自定义 header

相关推荐
胡西风_foxww19 分钟前
Java的extends通配符
java·开发语言·通配符·extends
中国lanwp43 分钟前
Spring Boot 中使用 Lombok 进行依赖注入的示例
java·spring boot·后端
凌辰揽月2 小时前
AJAX 学习
java·前端·javascript·学习·ajax·okhttp
永日456702 小时前
学习日记-spring-day45-7.10
java·学习·spring
小屁孩大帅-杨一凡3 小时前
如何解决ThreadLocal内存泄漏问题?
java·开发语言·jvm·算法
lwb_01184 小时前
【springcloud】快速搭建一套分布式服务springcloudalibaba(四)
后端·spring·spring cloud
学习3人组4 小时前
在 IntelliJ IDEA 系列中phpstorm2025设置中文界面
java·ide·intellij-idea
cainiao0806055 小时前
Java 大视界:基于 Java 的大数据可视化在智慧城市能源消耗动态监测与优化决策中的应用(2025 实战全景)
java
长风破浪会有时呀6 小时前
记一次接口优化历程 CountDownLatch
java
云朵大王6 小时前
SQL 视图与事务知识点详解及练习题
java·大数据·数据库