相关推荐recommended
SpringBoot:SpringMVC(上)
作者:mmseoamin日期:2023-12-11

文章目录

  • 前言
  • 一、SpringMVC是什么?
    • 1.1 MVC的定义:
    • 1.2 MVC 和 Spring MVC 的关系
    • 二、Spring MVC 创建和连接
      • 2.1创建springmvc
      • 2.2接下来,创建⼀个 UserController 类,实现⽤户到 Spring 程序的互联互通,具体实现代码如下:
      • 2.1.2 @RequestMapping 注解介绍
      • 2.1.3 @RequestMapping 是 post 还是 get 请求?
      • 2.2 获取参数
      • 2.2.1传递参数
      • 2.2.2传递对象
      • 2.2.3 后端参数重命名(后端参数映射)
      • 2.2.4@RequestBody 接收JSON对象
      • 总结

        前言

        提示:这里可以添加本文要记录的大概内容:


        提示:以下是本篇文章正文内容,下面案例可供参考

        一、SpringMVC是什么?

        Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。它的正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc),但它通常被称为”SpringMVC“。

        从上述定义我们可以得出两个关键信息:

        1. Spring MVC 是⼀个 Web 框架。
        2. Spring MVC 是基于 Servlet API 构建。

        1.1 MVC的定义:

        MVC 是 Model View Controller 的缩写,它是软件⼯程中的⼀种软件架构模式,它把软件系统分

        为模型、视图和控制器三个基本部分

        SpringBoot:SpringMVC(上),在这里插入图片描述,第1张

        Model(模型)是应⽤程序中⽤于处理应⽤程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。

        View(视图)是应⽤程序中处理数据显示的部分。通常视图是依据模型数据创建的。

        Controller(控制器)是应⽤程序中处理⽤户交互的部分。通常控制器负责从视图读取数据,

        控制⽤户输⼊,并向模型发送数据。

        1.2 MVC 和 Spring MVC 的关系

        MVC 是⼀种思想,⽽ Spring MVC 是对 MVC 思想的具体实现。

        总结来说,Spring MVC 是⼀个实现了 MVC 模式,并继承了 Servlet API 的 Web 框架。既然是 Web框架,那么当⽤户在浏览器中输⼊了 url 之后,我们的 Spriing MVC 项⽬就可以感知到⽤户的请求。

        二、Spring MVC 创建和连接

        2.1创建springmvc

        SpringBoot:SpringMVC(上),在这里插入图片描述,第2张

        创建这个就行了

        2.2接下来,创建⼀个 UserController 类,实现⽤户到 Spring 程序的互联互通,具体实现代码如下:

        import org.springframework.stereotype.Controller;
        import org.springframework.web.bind.annotation.RequestMapping;
        import org.springframework.web.bind.annotation.ResponseBody;
        @Controller // 让 spring 框架启动时,加载
        @ResponseBody // 返回⾮⻚⾯数据
        @RequestMapping("/user") // 路由器规则注册
        public class UserController {
        // 路由器规则注册
        @RequestMapping("/hi")
        public String sayHi(){
        return "

        Hi,Spring MVC.

        "; } }

        这样实现之后,当访问地址:http://localhost:8080/user/hi 时就能打印“hello,spring mvc”的信息

        2.1.2 @RequestMapping 注解介绍

        @RequestMapping 是 Spring Web 应⽤程序中最常被⽤到的注解之⼀,它是⽤来注册接⼝的路

        由映射的

        路由映射:所谓的路由映射指的是,当⽤户访问⼀个 url 时,将⽤户的请求对应到程序中某个类
        的某个⽅法的过程就叫路由映射
        

        当在类上用到这个注解时

        package com.example.demo;
        import org.springframework.web.bind.annotation.RequestMapping;
        import org.springframework.web.bind.annotation.RestController;
        @RestController
        @RequestMapping("/h")
        public class UserController2 {
            @RequestMapping("/hi")
            public String sayHi(){
                return "hello";
            }
        }
        

        SpringBoot:SpringMVC(上),在这里插入图片描述,第3张

        就把类上的@ReuquestMapping都给写上,@RequestMapping 即可修饰类,也可以修饰⽅法,当修饰类和⽅法时,访问的地址是类 + ⽅

        法。

        @RequestMapping 也可以直接修饰⽅法,那就直接写方法后面的@RequestMapping

        2.1.3 @RequestMapping 是 post 还是 get 请求?

        默认情况下时GET的

        SpringBoot:SpringMVC(上),在这里插入图片描述,第4张

        指定 GET/POST ⽅法类型

        import org.springframework.web.bind.annotation.RequestMapping;
        import org.springframework.web.bind.annotation.RequestMethod;
        import org.springframework.web.bind.annotation.ResponseBody;
        import org.springframework.web.bind.annotation.RestController;
        @Controller
        @ResponseBody
        @RestController
        public class UserController2 {
            @RequestMapping(value = "/hi",method= RequestMethod.POST)
            public String sayHi(){
                return "hello";
            }
        }
        

        2.2 获取参数

        2.2.1传递参数

        package com.example.demo;
        import lombok.Data;
        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.RestController;
        @RestController
        public class UserController {
            @RequestMapping("/m3")
            public String sayHi(String name, String pwd){
                System.out.println(name);
                System.out.println(pwd);
                return "Hello from /hi";
            }
        }
        

        2.2.2传递对象

        并且 Spring MVC 可以⾃动实现参数对象的赋值,⽐如 User对象:

        package com.example.demo;
        import lombok.Data;
        @Data
        public class User {
            private String Name;
            private int id;
            private String Password;
        }
        
        package com.example.demo;
        import lombok.Data;
        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.RestController;
        @RestController
        public class UserController {
            @RequestMapping("/m3")
            public String sayHi(User u){
                System.out.println(u.getName());
                System.out.println(u.getId());
                return "Hello from /hi";
            }
        }
        

        SpringBoot:SpringMVC(上),在这里插入图片描述,第5张

        http://localhost:8080/m3?name=java&pwd=18
        

        抓包看一下

        SpringBoot:SpringMVC(上),在这里插入图片描述,第6张

        当然最终执行的结果SpringBoot:SpringMVC(上),在这里插入图片描述,第7张

        当然因为我刚才刷新了一下,所以打印了俩次

        2.2.3 后端参数重命名(后端参数映射)

        某些特殊的情况下,前端传递的参数 key 和我们后端接收的 key 可以不⼀致,⽐如前端传递了⼀个time 给后端,⽽后端⼜是有 createtime 字段来接收的,这样就会出现参数接收不到的情况,如果出现

        这种情况,我们就可以使⽤ @RequestParam 来重命名前后端的参数值

        ⾮必传参数设置:

        如果我们的实际业务前端的参数是⼀个⾮必传的参数,我们可以通过设置 @RequestParam 中的

        required=false 来避免不传递时报错,具体实现如下

        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.RequestParam;
        import org.springframework.web.bind.annotation.RestController;
        @RestController
        public class UserController {
            @RequestMapping("/m4")
            public String method(@RequestParam("time")String creattime){
                System.out.println("时间:" + creattime);
                return "/index.html";
            }
        }
        

        2.2.4@RequestBody 接收JSON对象

        @RequestMapping(value = "/m5", method = RequestMethod.POST)
        public Object method_5(@RequestBody Person person) {
        System.out.println("Person:" + person);
        return "redirect:/index.html";
        }
        

        `

        总结

        先到这里把,欢迎大佬在评论区提意见哦