上个系列总结了关于Spring MVC 项目的一些基础 ,Spring MVC就是在Spring Boot的基础上引入了Spring Web依赖.接下来就进行总结一下Spring MVC项目的创建,连接,获取参数,输出响应.
目录
1. Spring MVC 创建和连接
1.1 创建Spring MVC 项目实现与浏览器互通
1.2 @RequestMapping注解
2. 获取参数
2.1 传递单个参数编辑
2.2 传递对象
2.3 表单参数传递/传递多个参数(⾮对象)编辑
2.4 后端参数重命名(后端参数映射)
2.5 @RequestBody 接收JSON对象
2.6 获取URL中参数@PathVariable
2.7 上传文件@RequestPart
2.8 获取Cookie/Session/header
3. 返回数据
3.1 返回静态页面
3.2 返回json
3.3 请求转发或请求重定向
3.4 @ResponseBody 说明
3.5 组合注解 @RestController
1. Spring MVC 创建和连接
Spring MVC 项目创建和 Spring Boot 创建项目相同(Spring MVC 使⽤ Spring Boot 的方式创建),在创建的时候选择 Spring Web 就相当于创建了 Spring MVC 的项目。在 Spring MVC 中使用@RequestMapping 来实现 URL 路由映射,也就是浏览器连接程序的作用。
1.1 创建Spring MVC 项目实现与浏览器互通
写一个容器类,实现用户到 Spring 程序的互联互通.
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;@RequestMapping("/test") // 路由注册
@ResponseBody // 响应的主体是数据而不是一个静态页面
@Controller // 将Bean注入到框架中
//@RestController // @ResponseBody + @Controller
// 以上三个缺一不可public class TestController {@RequestMapping("/hi")public String SayHi(String name){return "hi: " + name;}
}
当访问地址:http://localhost:8080/test/hi?name="张三"时,就会输出hi:张三
1.2 @RequestMapping注解
- @RequestMapping 是 Spring Web 应用程序中最常被用到到的注解之⼀,它是⽤来注册接口的路由映射的。
- @RequestMapping 即可修饰类,也可以修饰方法,当修饰类和⽅法时,访问的地址是类 + 方法。
- @RequestMapping 也可以直接修饰方法
那么使用 @RequestMapping是进行发送的是Post请求还是Get请求呢?
通过抓包软件可以进行抓包,@RequestMapping默认的是Get请求,但是可以通过设置属性method进行设置.
也可以不进行设置属性来设置不同类型的方法.
@GetMapping 和 PostMapping
上面两个注解可以直接设置路由的方法类型.
2. 获取参数
2.1 传递单个参数
2.2 传递对象
传递一个Personl类型的对象
PostMan构造请求
控制台打印
2.3 表单参数传递/传递多个参数(⾮对象)
控制台
2.4 后端参数重命名(后端参数映射)
某些特殊的情况下,前端传递的参数 key 和我们后端接收的 key 可以不⼀致,比如前端传递了⼀个time 给后端,而后端又是有 createtime 字段来接收的,这样就会出现参数接收不到的情况,如果出现这种情况,我们就可以使用@RequestParam 来重命名前后端的参数值。
2.5 @RequestBody 接收JSON对象
2.6 获取URL中参数@PathVariable
2.7 上传文件@RequestPart
2.8 获取Cookie/Session/header
1. 获取了Request对象,在SpringMVC中内置了httppSerlvetRequest 和 httpSerlvetResponse
访问设置Cookie的地址
控制台打印,获取的cookies
也可以指定cookies进行返回
获取header
2. 获取header 中的userAgent
3. 获取会话session
创建会话成功
获取会话成功
4. 根据指定的session进行返回
3. 返回数据
3.1 返回静态页面
我们之前加了注解@ResponseBody所以返回的是数据本身,不加这个注解返回的是静态页面
抓包结果的响应信息
3.2 返回json
3.3 请求转发或请求重定向
1. forward VS redirect
return 不但可以返回⼀个视图,还可以实现跳转,跳转的⽅式有两种:
- forward 是请求转发;
- redirect:请求重定向。
2. 区分forward 和 redirect
举例说明:
forward(请求转发)和 redirect(请求重定向)的区别,举例来说,例如,你告诉你妈妈,你想吃辣条,如果你妈妈,说好,我帮你去买,这就是 forward 请求转发;如果你妈妈让你⾃⼰去买,那么就是请求 redirect 重定向。
3. forward 和 redirect 具体区别如下:
- 1. 请求重定向(redirect)将请求重新定位到资源;请求转发(forward)服务器端转发。
- 2. 请求重定向地址发生变化,请求转发地址不发生变化。
- 3. 请求重定向与直接访问新地址效果⼀致,不存在原来的外部资源不能访问;请求转发服务器端转发有可能造成原外部资源不能访问(发生数据丢失)。
- 4. 请求转发如果资源和转发的页面不在⼀个目录下,会导致外部资源不可访问,而重定向就可以进行访问
3.4 @ResponseBody 说明
- @ResponseBody 返回的值如果是字符会转换成 text/html,如果返回的是对象会转换成application/json 返回给前端。
- @ResponseBody 可以用来修饰方法或者是修饰类,修饰类表示类中的所有方法都会返回 html 或者json,而不是视图
3.5 组合注解 @RestController
@RestController = @Controller + @ResponseBody