SpringMVC

1.什么是SpringMVC

1、SpringMVC是一个Web框架

2、SpringMVC是基于Servlet API构建的

但是要深层次的理解SpringMVC,我们就需要搞清楚什么是MVC

1.1 MVC的定义

MVC是Model View Controller 的缩写,它是软件工程的一种软件架构模式,他把软件系统分为模型、视图和控制器三个基本部分。

  • **Model(模型):**使应用程序中用于处理应用程序数据逻辑部分,通常模型对象负责在数据库中存取数据
  • **View(视图):**是应用程序中处理数据的显示的部分,通常视图时依据模型数据创建的。
  • **Controller(控制器):**是应用程序中处理用户交互的部分,通常控制器负责从事途中读取数据,控制用户输入,并向模型发送数据。

1.2 MVC执行流程

1、用户请求首相发到Controller

2、Controller将请求转发给Model

3、Model处理业务并将数据结果给Controller

4、Controller会将数据给View引擎

5、View转换数据生成最终的页面给用户

2. 如何学习Spring MVC

学习Spring MVC我们只需要掌握一下三个功能:

  1. **连接的功能:**将用户和Java程序连接,也就是范文一个地址就能够调用我们的Spring程序
  2. **获取参数的功能:**用户访问的时候会带一些参数,在程序中要想办法获取到参数
  3. **输出数据的功能:**执行业务逻辑之后,要把程序执行的结果返回给用户

2.1 创建Spring MVC项目

Spring MVC 可以基于 Spring Boot 创建,也就是创建⼀个 Spring Boot 项⽬,勾选上 Spring Web 模块即可,如下图所示:

创建一个UserController类,实现用户到Spring程序的互联互通

java 复制代码
@RestController
@RequestMapping("/user")//路由器规则注册
public class UserController {
    @RequestMapping("/hi")
    public String sayHi(){
        return "<h1>sayHi</h1>";
    }
}

2.2 @RequestMapping基础使用

@RequestMapping即可以修饰类,亦可以修饰方法,当修饰了·方法时访问地址就是注解中的参数:类+方法

2.2.1@RequestMapping是post还是get请求?

我们可以使用Postman测试一下:

测试可知既可以接受Post也可以接受get方法

2.1.2 指定GET/POST方法类型

我们可以显示指定@RequestMapping来接受POST的情况

java 复制代码
@RestController
@RequestMapping("/user")//路由器规则注册
public class UserController {
    @RequestMapping(value = "/hi",method = RequestMethod.POST)
    public String sayHi(){
        return "<h1>sayHi</h1>";
    }
}

此时我们使用postman发送一个get请求就接受不到了

GET请求的三种写法:

java 复制代码
// 写法1
@RequestMapping("/index")
// 写法2
@RequestMapping(value = "/index",method = RequestMethod.GET)
// 写法3
@GetMapping("/index")

POST的两种写法:

java 复制代码
// 写法1
@RequestMapping(value = "/index",method = RequestMethod.POST)
// 写法2
@PostMapping("/index")

2.2 获取参数

2.2.1 传递单个参数

在Spring MVC中可以直接用方法中的参数来实现传参

java 复制代码
@RestController
@RequestMapping("/user")//路由器规则注册
public class UserController {
    @RequestMapping(value = "/hi",method = RequestMethod.POST)
    public String sayHi(){
        return "<h1>sayHi</h1>";
    }
    @RequestMapping("/test")
    public String test(String name){
        return name;
    }
}

使用Postman 发送请求

2.2.2 传递对象

Spring MVC可以自动实现参数对象赋值

java 复制代码
@Data
public class Person {
    private String name;
    private String password;
    private int id;
}


@RestController
@RequestMapping("/user")//路由器规则注册
public class UserController {
    @RequestMapping(value = "/hi",method = RequestMethod.POST)
    public String sayHi(){
        return "<h1>sayHi</h1>";
    }
    @RequestMapping("/test")
    public String test(String name){
        return name;
    }
    @RequestMapping("/test2")
    public void test2(Person person){
        System.out.println(person.getName());
        System.out.println(person.getPassword());
        System.out.println(person.getId());
    }
}

Postman发送请求

最终执行结果;

2.2.3 后端参数重命名

某些特殊的情况下,前端传递的参数 key 和我们后端接收的 key 可以不⼀致,⽐如前端传递了⼀个 name 给后端,⽽后端⼜是有 name111 字段来接收的,这样就会出现参数接收不到的情况,如果出现 这种情况,我们就可以使⽤ @RequestParam 来重命名前后端的参数值

java 复制代码
    @RequestMapping("/test3")
    public String test3(@RequestParam("name")String name111){
        return name111;
    }

Postman返回结果:

2.2.4 @RequestBody接受JSON对象

我们在postman中构造一个json数据

java 复制代码
    @RequestMapping("test4")
    public void test4(@RequestBody(required = false) Person person){
        System.out.println(person);
    }

我们可以尝试去掉@RequestBody试试,

@RequestBody 是Spring框架中的一个注解,用于指示一个方法参数应该从请求的body部分中获取数据。通常在处理POST请求时使用,特别是当请求的数据是JSON格式时。

2.2.5 获取URL中参数@PathVariable

后端实现代码:

java 复制代码
    @RequestMapping("/test5/{name}/{password}")
    public void test5(@PathVariable String name,@PathVariable String password){
        System.out.println(name);
        System.out.println(password);
    }

Postman发送请求:

运行结果:

注意事项:@PostMapping("test5/lisi/123")不可以省略

2.2.6 上传文件@RequestPart

我们上传一个照片文件为例子:

java 复制代码
    @RequestMapping("/test6")
    public String test6(@RequestPart("myfile")MultipartFile file) throws IOException {
        //生成一个唯一的id|UUID=全球唯一id
        String name = UUID.randomUUID().toString().replace("-","");
        //得到源文件的后缀名
        name+=(file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")));
        String path = "D:\\test\\"+name;
        //保存文件
        file.transferTo(new File(path));
        return path;
    }

Postman发送请求:

2.2.7 获取Cookie/Session/header

获取Session

java 复制代码
private static String _SESSION_KEY = "SESSION_KEY";    
@RequestMapping("/set_sess")
    public String setSess(HttpServletRequest request){
        HttpSession session = request.getSession();
        if(session != null){
            session.setAttribute(_SESSION_KEY,"张三");
            return "session set success";
        }else{
            return "session set fail";
        }
    }
    @RequestMapping("/get_sess")
    public String getSess(@SessionAttribute(required = false,value = "SESSION_KEY")String name){
        return name;
    }

Postman运行结果:

获取Cookie

java 复制代码
    @RequestMapping("/getcookie")
    public String getCookie(@CookieValue(value="java",required = false)String ck){
        return ck;
    }

获取Header

java 复制代码
@RequestMapping("/header")
@ResponseBody
public String header(@RequestHeader("User-Agent") String userAgent) {
   return "userAgent:"+userAgent;
}
相关推荐
程序猿零零漆4 小时前
SpringCloud系列教程:微服务的未来(二十)Seata快速入门、部署TC服务、微服务集成Seata
java·spring·spring cloud·微服务
Miketutu14 小时前
Spring MVC消息转换器
java·spring
小小虫码16 小时前
项目中用的网关Gateway及SpringCloud
spring·spring cloud·gateway
带刺的坐椅21 小时前
无耳科技 Solon v3.0.7 发布(2025农历新年版)
java·spring·mvc·solon·aop
精通HelloWorld!1 天前
使用HttpClient和HttpRequest发送HTTP请求
java·spring boot·网络协议·spring·http
LUCIAZZZ1 天前
基于Docker以KRaft模式快速部署Kafka
java·运维·spring·docker·容器·kafka
拾忆,想起1 天前
如何选择Spring AOP的动态代理?JDK与CGLIB的适用场景
spring boot·后端·spring·spring cloud·微服务
鱼骨不是鱼翅1 天前
Spring Web MVC基础第一篇
前端·spring·mvc
hong_zc1 天前
Spring MVC (三) —— 实战演练
java·spring·mvc
Future_yzx1 天前
Spring AOP 入门教程:基础概念与实现
java·开发语言·spring