详解Spring MVC

  前言👀~

上一章我们介绍了JavaEE进阶的一些基础知识点,今天来讲解在Spring中的一个重要知识点Spring Web MVC,看完学不会Spring MVC来揍我

什么是 MVC?

什么是SpringWeb?

什么是 Spring Web MVC?

学习Spring MVC

1.建立连接

2.请求

1.传递单个参数

2.传递多个参数

3.传递对象

后端参数重命名

4.传递数组/集合

5.传递JSON数据(重要)

6.获取URL中的参数

7.上传文件

8.Cookie和Session

Session

Cookie和Session的区别

9.获取Cookie

10.获取Session

11.获取Header

3.响应

1.返回静态页面

2.返回数据

3.返回html代码片段

4.返回JSON

5.设置状态码

6.设置Header

开发中程序报错,如何定位问题?

lombok工具包

应⽤分层

软件设计原则

Spring全家桶总结

Spring

SpringBoot

SpringWeb

Spring MVC


如果各位对文章的内容感兴趣的话,请点点小赞,关注一手不迷路,讲解的内容我会搭配我的理解用我自己的话去解释如果有什么问题的话,欢迎各位评论纠正 🤞🤞🤞

47497722484f4d519a7e014f8100ec05.png

个人主页:N_0050-优快云博客

相关专栏:java SE_N_0050的博客-优快云博客  java数据结构_N_0050的博客-优快云博客  java EE_N_0050的博客-优快云博客


什么是 MVC?

MVC 就是 Model View Controller 的缩写,属于一种软件架构设计模式一种思想,把我们的项目分为控制器(Controller)、模型(Model)、视图(view)三个部分model就是处理业务逻辑处理数据的controller就是接受请求丢给对应的model进行处理的view就是展示数据的也就是界面

举个例子:如果客户来公司要做一个软件先问前台view,然后前台知道后跟它说去某部门controller,然后某部门在把这个人带给对应的负责人啊等等去进行处理沟通也就是我们的model,最后结果原路返回。注意一下MVC 和 Spring  MVC还是有点区别的

什么是SpringWeb?

Spring Web是Spring框架中专注于Web应用开发的部分,包含了Spring MVC及其他Web相关的功能。我们使用Spring框架来开发web网站,在创建一个Spring Boot项目的时候在加依赖的时候我们会选择Spring Web,其实也就是Spring MVC依赖

什么是 Spring Web MVC?

Spring Web MVC是基于Servlet API构建的一个web框架,一开始在Spring框架中,正式名叫Spring Web MVC。MVC是一种思想,Spring对其进行了实现称为Spring MVC,通常我们叫的Spring MVC也就是Spring Web MVC,都是用于构建web应用。Spring MVC是对MVC思想的具体实现,此外Spring MVC还是一个web框架

上个文章中我们在创建Spring Boot项目的时候其实我们就涉及到了Spring MVCSpring Boot是创建Spring MVC项目的一种方式,也可以通过其他方式创建Spring MVC项目,只要包含了web这个模块,我们就可以认为这是一个Spring MVC项目。一个项目可能是Spring Boot项目也可能是Spring MVC项目,Spring Boot是帮助我们快速搭建项目的,Spring MVC是其中的一个模块

此时Spring MVC整个流程是如下图所示

浏览器发送请求由我们的controller进行接收用户的请求,然后将请求传给对应的model进行处理,接着model进行处理后返回给controller,controller再把处理的结果传给view,注意这里view和MVC返回的还是有区别的之前返回的是视图现在返回的是视图所需要的数据,把这个返回的数据认为是view

总结来说,Spring MVC 是⼀个实现了 MVC 模式的 Web 框架


学习Spring MVC

如何通过浏览器和服务器进⾏交互?

1.建立连接

使用 @RequestMapping 注解来实现 URL 路由映射,此时浏览器和服务器就建立了连接,英文翻译也可以按这样理解请求映射

什么是路由映射呢?

用户访问⼀个 URL 时, 将用户的请求对应到程序中某个类的某个⽅法的过程就叫路由映射

@RequestMapping就类似一个门牌号可修饰方法也可修饰类修饰方法时如果类没有修饰的话我们可以直接通过你在RequestMapping中写的路径搭配上URL进行访问如果是修饰了类也修饰了方法,此时访问地址为URL+类的路径+方法路径就是都要写上。建议都修饰并且建议路径名最好和方法名一样

@RequestMapping既支持get请求也支持post请求,比较全能支持很多请求,并且可以限制请求方式使用method属性下面使用postman进行演示

@RequestMapping("/method")
@RestController
public class DemoController {

    @RequestMapping("/m1")
    public String m1() {
        return "Hello RequestMapping";
    }
}

GET请求演示

POST请求演示

限制请求后,如果没有使用指定的请求方式会报405表示请求的方式错误!!下面限制为GET请求

@RequestMapping("/method")
@RestController
public class DemoController {

    @RequestMapping(value = "/m1", method = RequestMethod.GET)
    public String m1() {
        return "Hello RequestMapping";
    }
}

补充:如果类加了注解@RestControllerSpring才会去看这个类里面的方法有没有加 @RequestMapping 这个注解这只是简单理解后面就会明白什么意思了

Postman下载链接:https://www.filehorse.com/download-postman/68966/


2.请求

访问不同的路径, 就是发送不同的请求。在发送请求时,可能会带⼀些参数,所以学习Spring的请求,主要是学习如何传递参数到后端以及后端如何接收

请求主要是学习如何传参大白话就是前端的参数传入后端进行处理,处理后返回一个响应。我们可以使用postman工具进行校验,不限这个工具。不管使用哪种方式发送请求,对于我们后端来说没啥区别,我们就像厨师,管你客户是桌上二维码下单还是叫服务员点单,我们都还是一样的做法,我们只要负责接收订单即可

1.传递单个参数

传参数的时候我们在URL中应该这样写http://127.0.0.1:8080/method/m2在m2后面加上?参数名=你要参的参数,下面会进行演示

@RequestMapping("/method")
@RestController
public class DemoController {

    @RequestMapping("/m2")
    public String m2(String name) {
        return "接收到的名字:" + name;
    }
}

注意:参数名需要一样,参数顺序不一样没事。以及还要注意如果参数类型是基本数据类型的话必须要传值不然会报错!!!,所以在开发时建议使用包装类,它可以区分0和null。下面进行演示

@RequestMapping("/method")
@RestController
public class DemoController {

    @RequestMapping("/m2")
    public String m2(int id) {
        return "接收到的id:" + id;
    }
}

然后是使用包装类型,下面进行演示

@RequestMapping("/method")
@RestController
public class DemoController {

    @RequestMapping("/m2")
    public String m2(Integer id) {
        return "接收到的id:" + id;
    }
}


2.传递多个参数

下面直接进行演示,和传递单个参数差不多,只是参数的个数增加了,唯一注意的是参数之间使用&这个符号拼接

@RequestMapping("/method")
@RestController
public class DemoController {

    @RequestMapping("/m2")
    public String m2(Integer id, String name) {
        return "接收到的id:" + id + " " + "接收到的名字:" + name;
    }

注意:还是一样如果使用基本数据类型不传参会报错,参数的顺序可以调换不会报错


3.传递对象

开发中,接口的参数通常都定义为对象,高内聚低耦合,参数多了封装在一个对象中进行传递代码看起来优雅并且高内聚低耦合

先创建一个对象,属性如下

public class Student {
    private Integer id;
    private String name;
    private String sexy;
}

接着传递对象,我们看看效果

@RequestMapping("/method")
@RestController
public class DemoController {

    @RequestMapping("/m3")
    public String m3(Student student) {
        return "接收到的Student:" + student;
    }
}


后端参数重命名

@RequestParam("参数名"),通过这个注解进⾏参数重命名注意这个参数是必传参数!并且如果后端进行了重命名,还是必须使用@RequestParam注解里的参数名返回,注意无论是否改了名字,在URL中还是要写@RequestParam注解里的参数名传递值

下面代码中把name赋值给这个userName,name属于前端传来的参数,userName属于后端的参数

@RequestMapping("/method")
@RestController
public class DemoController {

    @RequestMapping("/m3")
    public String m3(@RequestParam("name") String userName) {
        return "接收到的名字:" + userName;
    }
}

注意看参数名!

如果你不按@RequestParam注解里的参数名传递值,看下面的效果

评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值