【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】
**开源地址:https://docs.qq.com/doc/DSmxTbFJ1cmN1R2dB **
+ [2. 为什么学习Spring MVC?](#2_Spring_MVC_31)
+ [3. 怎么学习Spring MVC?](#3_Spring_MVC_42)
+ - [3.1 Spring MVC的创建和连接](#31_Spring_MVC_50)
- * [3.1.1 创建Spring MVC项目](#311_Spring_MVC_56)
* [3.1.2 @RequestMapping 注解介绍](#312_RequestMapping__75)
* [3.1.3 @RequestMapping是post 还是 get请求?](#313_RequestMappingpost__get_112)
* [3.1.4 @GetMapping 和 @PostMapping](#314_GetMapping__PostMapping_121)
- [3.2 获取参数](#32__145)
- * [3.2.1 传递单个参数](#321__147)
* [3.2.2 传递对象](#322__169)
* [3.2.3 表单参数传递/传递多个参数](#323__181)
* [3.2.4 后端参数重命名](#324__191)
* [3.2.5 设置参数必传](#325__203)
* [3.2.6 @RequestBody接收JSON对象](#326_RequestBodyJSON_213)
* [3.2.7 获取URL当中的参数@PathVarible](#327_URLPathVarible_223)
* [3.2.8 上传文件@RequestPart](#328_RequestPart_239)
* [3.2.9 获取Cookie/Session/header](#329_CookieSessionheader_259)
- [3.3 返回数据](#33__279)
- * [3.3.1 返回静态页面](#331__281)
* [3.3.2 请求转发和请求重定向](#332__296)
* [3.3.3 @ResponseBody说明](#333_ResponseBody_313)
Spring MVC程序开发
1. 什么是Spring MVC?
Spring Web MVC是基于Servlet API构建的原始Web框架,从一开始就包含在Spring框架中。它的正式名称是“Spring Web MVC”来自其原模块的名称,但是它通常被称为“Spring MVC”
从上述定义我们可以看到两个信息:
- Spring MVC 是一个Web框架
- Spring MVC 是基于Servlet API构建的
然而要真正的搞懂Spring MVC?我们要先理解什么是MVC?
1.1 MVC定义
MVC是Model、View、Controller的缩写,它是软件工程当中的一种软甲架构模式,它把软件系统分为模型、视图、和控制器三个基本部分
- Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据
- View(视图)是应用程序中处理数据显示的部分。通常视图是依据模型数据创建的
- Controller(控制器)是应用程序处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据
1.2 MVC 和 Spring MVC 的关系
MVC是一种思想,而Spring MVC是对MVC思想的具体实现
总结来说,Spring MVC是实现了一个MVC模式,并继承了Servlet API的Web框架。既然是Web框架,那么用户在浏览器当中输入URL之后,我们的Spring MVC项目就可以感知到用户的请求
2. 为什么学习Spring MVC?
现在绝大部分的Java项目都是基于Spring或者是(Spring Boot)的,而Spring的核心是Spring MVC也就是说Spring MVC是Spring框架的一个核心模块,而Spring Boot是Spring的脚手架。因此我们可以推断出,现在市面上的绝大部分Java项目约等于Spring MVC项目,这就是学习它的原因
在创建Spring Boot项目的时候,我们勾选的Spring Web框架其实就是Spring MVC框架,
简单来说,咱是所以要学习Spring MVC是因为它是一切项目的基础,我们以后创建的Spring、Spring Boot项目都是基于Spring MVC的
3. 怎么学习Spring MVC?
学习Spring MVC我们只需要掌握3个功能:
- 连接的功能:将用户(浏览器)和Java程序连接起来,也就是访问一个地址能够调用我们的Spring程序
- 获取参数的功能:用户访问的时候会带一些参数,在程序中要想办法获取到参数
- 输出数据的功能:执行了业务逻辑之后,要把程序执行的结果返回给用户
3.1 Spring MVC的创建和连接
Spring MVC项目创建和Spring Boot项目创建相同(Spring MVC 和Spring Boot的方式相同)在创建的时候选择Spring Web就相当于创建了Spring MVC项目
在Spring MVC当中使用@RequestMapping来实现URL路由映射,也就是浏览器连接程序的作用
3.1.1 创建Spring MVC项目
创建Spring Boot项目的时候勾选上Spring Web模块即可
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("sayhi")
@ResponseBody
public String sayHi() {
return "你好 世界";
}
}
实现之后访问地址:http://localhost:8080/user/sayhi
就可以访问了
3.1.2 @RequestMapping 注解介绍
@RequestMapping是Spring Web应用程序当中最常被用的注解之一,它是用来注册接口的路由映射的
路由映射:所谓的路由映射指的是,当用户访问一个URL时,将用户的请求对应到程序中某个类的某个方法的过程就叫做路由映射
@RequestMapping的基础使用
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("sayhi")
@ResponseBody
public String sayHi() {
return "你好 世界";
}
@ResponseBody
@RequestMapping(method = RequestMethod.POST, value = "/sayhi2")
public String sayHi2() {
return "你好,世界";
}
}
@RequestMapping既可以就是类,也可以修饰方法,当修饰类和方法的时候,访问的地址是类 + 方法
3.1.3 @RequestMapping是post 还是 get请求?
经过测试之后,我们可以发现是都可以支持的
我们可以指定方法类型
3.1.4 @GetMapping 和 @PostMapping
三种实现方式:
@RequestMapping("sayhi")
@ResponseBody
public String sayHi() {
return "你好 世界";
}
@ResponseBody
@RequestMapping(method = RequestMethod.POST, value = "/sayhi2")
public String sayHi2() {
return "你好,世界";
}
@ResponseBody
@PostMapping("/sayhi3")
public String sayHi3() {
return "你好,世界3 ";
}
3.2 获取参数
3.2.1 传递单个参数
在Spring MVC中可以直接用方法中的参数来实现传参,比如以下代码
@ResponseBody
@RequestMapping("/getuserinfoid")
public UserInfo getUserInfoId(Integer id) {
UserInfo userInfo = new UserInfo();
userInfo.setId(id);
userInfo.setName("张三");
userInfo.setAge(18);
userInfo.setPassword("1234");
return userInfo;
}
访问的结果是:
3.2.2 传递对象
Spring MVC可以自动实现参数对象的赋值
@ResponseBody
@RequestMapping("/reg")
public UserInfo reg(UserInfo userInfo) {
return userInfo;
}
3.2.3 表单参数传递/传递多个参数
@ResponseBody
@RequestMapping("/login")
public String login(String name, String password) {
return "name: " + name + "password: " + password;
}
3.2.4 后端参数重命名
某些情况下,前端传递的参数key和后端接收的key可以不一致