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;
}
相关推荐
姜西西_2 小时前
[Spring]Spring MVC 请求和响应及用到的注解
java·spring·mvc
dawn1912282 小时前
SpringMVC 入门案例详解
java·spring·html·mvc
极客先躯2 小时前
高级java每日一道面试题-2024年9月16日-框架篇-Spring MVC和Struts的区别是什么?
java·spring·面试·mvc·struts2·框架篇·高级java
尘浮生5 小时前
Java项目实战II基于Java+Spring Boot+MySQL的大型商场应急预案管理系统(源码+数据库+文档)
java·开发语言·数据库·spring boot·spring·maven·intellij-idea
尘浮生5 小时前
Java项目实战II基于Java+Spring Boot+MySQL的校园社团信息管理系统(源码+数据库+文档)
java·开发语言·数据库·spring boot·mysql·spring·maven
尘浮生7 小时前
Java项目实战II基于Java+Spring Boot+MySQL的作业管理系统设计与实现(源码+数据库+文档)
java·开发语言·数据库·spring boot·后端·mysql·spring
拉玛干13 小时前
社团周报系统可行性研究-web后端框架对比-springboot,django,gin
数据库·python·spring·golang
程序员大金15 小时前
基于SSM+Vue+MySQL的酒店管理系统
前端·vue.js·后端·mysql·spring·tomcat·mybatis
努力的布布15 小时前
Spring源码-从源码层面讲解声明式事务的运行流程
java·spring
程序员大金15 小时前
基于SpringBoot的旅游管理系统
java·vue.js·spring boot·后端·mysql·spring·旅游