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

相关推荐
九皇叔叔14 分钟前
Java循环结构全解析:从基础用法到性能优化
java·开发语言·性能优化
流星52112221 分钟前
GC 如何判断对象该回收?从可达性分析到回收时机的关键逻辑
java·jvm·笔记·学习·算法
csdn_aspnet21 分钟前
Java 圆台体积和表面积计算程序(Program for Volume and Surface area of Frustum of Cone)
java
杯莫停丶28 分钟前
设计模式之:外观模式
java·设计模式·外观模式
乐之者v29 分钟前
Mac常用软件
java·1024程序员节
TDengine (老段)1 小时前
TDengine 数据函数 ROUND 用户手册
java·大数据·数据库·物联网·时序数据库·tdengine·1024程序员节
TDengine (老段)1 小时前
TDengine 数学函数 RAND 用户手册
java·大数据·数据库·物联网·时序数据库·tdengine·涛思数据
從南走到北1 小时前
JAVA无人自助共享系统台球室源码自助开台约球交友系统源码小程序
java·微信·微信小程序·小程序·1024程序员节
JH30731 小时前
jvm,tomcat,spring的bean容器,三者的关系
jvm·spring·tomcat
野犬寒鸦1 小时前
从零起步学习MySQL || 第十章:深入了解B+树及B+树的性能优势(结合底层数据结构与数据库设计深度解析)
java·数据库·后端·mysql·1024程序员节