文章目录
- [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 作用范围:
-
类(一个类有多个注解时,没有先后顺序)
如果加在类上,需要类路径 + 方法路径
-
方法上
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 上传文件
2.11 获取 cookie 和 session
- 用户提供账号和密码,服务器进行验证
- 服务器验证通过,会把信息存储在 session 中,把 sessionId 返回给客户端(通过 set-cookie 的方式)
- 客户端收到响应,把 sessionId 存储在 cookie 中
- 后续的请求中,客户端待着 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
这里获取的 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
- 一个项目部署多个服务
- 部署多个项目
给不同的项目设置不同的端口号
3.2 返回数据
随着前后端的分离,后端只处理数据,返回页面显示需要的数据,而不再返回页面
@ResponseBody 即可以修饰类,又可以修饰方法
修饰类:表示该类所有的方法
3.3 返回 HTML 片段
3.4 返回 JSON
spring 会根据返回结果,进行动态设置
3.5 设置状态码
状态码的设置,并不影响 页面展示
3.6 设置 Header
- value: 指定映射的URL
- method: 指定请求的method类型, 如GET, POST等
- consumes: 指定处理请求(request)的提交内容类型(Content-Type),例如application/json, text/html
- produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回
- Params: 指定request中必须包含某些参数值时,才让该方法处理
- headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求
设置 Content-Type:
也可以同步设置编码
3.7 自定义 Header
在鉴权的时候会使用 自定义 header