【Spring】Spring MVC

目 录

  • 一.什么是 Spring MVC?
    • 1.MVC 定义
    • 2.MVC 和 Spring MVC 的关系
  • 二.为什么要学 Spring MVC?
  • 三.怎么学 Spring MVC?
    • 1.Spring MVC 创建和连接
      • 综上连接方式:
    • 2.获取参数
      • 1.传递单个参数
      • 2.获取多个参数
      • 3.获取对象
      • 4.获取表单参数
      • 5.接收JSON对象
      • 6.上传文件
      • 7.获取Cookie/Session/header
      • 8.后端参数重命名
      • 9.特殊的URL地址和获取参数的方式:
    • 3.返回数据
      • 请求转发和请求重定向

一.什么是 Spring MVC?

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

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

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

1.MVC 定义

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

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

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

  • Controller(控制器)是应用程序中处理⽤户交互的部分。通常控制器负责从视图读取数据,控制用户输⼊,并向模型发送数据。

2.MVC 和 Spring MVC 的关系

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

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


二.为什么要学 Spring MVC?

现在绝大部分的 Java 项目都是基于 Spring(或 Spring Boot)的,而 Spring 的核心就是 SpringMVC。也就是说 Spring MVC 是 Spring 框架的核心模块,而 Spring Boot 是 Spring 的脚手架,因此我们可以推断出,现在市面上绝大部分的 Java 项目约等于 Spring MVC 项目,这是我们要学 SpringMVC 的原因

在创建 Spring Boot 项目时,我们勾选的 Spring Web 框架其实就是 Spring MVC 框架,如下图所示:

在这里插入图片描述

Spring MVC 它是⼀切项目的基础,以后创建的所有Spring、Spring Boot 项目基本都是基于 Spring MVC 的。


三.怎么学 Spring MVC?

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

对于 Spring MVC 来说,掌握了以上 3 个功能就相当于掌握了 Spring MVC。

1.Spring MVC 创建和连接

在创建的时候选择 Spring Web 就相当于创建了 Spring MVC 的项目,在 Spring MVC 中使用 @RequestMapping 来实现 URL 路由映射,也就是浏览器连接程序的作用

在这里插入图片描述

  1. 由于 Spring MVC 在前端页面显示的是 view 信息,我们此处就需要用 @ResponseBody 声明当前类返回的是非静态页面@RequestMapping 在浏览器中可以实现路由映射,如上面代码,端口号是 8181 ,我们使用端口号加上类路由加上方法路由就可以访问到程序
    在这里插入图片描述
  2. 也可以把类的路由省略,只要端口号加上方法路由也可以访问,但是方法路由不能省略,必须得有
    在这里插入图片描述
  3. @Controller 控制器,在 Spring 启动时加载并注册,根据前面的五大类注解,这里可不可以换成别的注解呢?答案是不行的,此处只能使用 @Controller 注解,由于我们的 @Controller 是配合着 @ResponseBody 使用的,他们也可以缩写成一个注解 @RestController,并且功能还是齐全的
    在这里插入图片描述
    在这里插入图片描述
    @RestController = @Controller + @ResponseBody:是一个http控制器,返回的是非静态页面的数据

@RequestMapping 是 post 还是 get 请求?

使用 PostMan 测试⼀下,默认情况下使用注解 @RequestMapping 是否可以接收 GET 或 POST 请求

在这里插入图片描述

在这里插入图片描述

由此可发现 @RequestMapping 既是 post 也是 get 请求,我们还可以在 @RequestMapping 中修改是使用 post 还是 get 请求,在 @RequestMapping 中加入一个 method 即可

在这里插入图片描述

还有一种简化版写法:@GetMapping

在这里插入图片描述

综上连接方式:

  • @RequestMapping : 支持使用类型的接口访问(包含Get/Post… . )

  • @PostMapping : 只支持Post请求

  • @GetMapping : 只支持Get请求

注意:以上注解需要配合 @Controller 或 @RestController 一起使用。


2.获取参数

参数请求的类型:

  • URL传参
  • Ajax传参
  • Form表单传参

1.传递单个参数

在后端代码中这样编写单个参数的获取

在这里插入图片描述

在前端URL中传参:

在这里插入图片描述

注意:参数名必须相同,才能获取到参数的值。

这种方式也是 Spring MVC (Spring Web)主要获取参数的方式。

2.获取多个参数

在这里插入图片描述

在这里插入图片描述

Spring MVC 中当传递多个参数的时候,传递参数的顺序是不影响程序执行的,获取参数的结果之和参数的名称有关,和顺序无关。

3.获取对象

创建一个学生类:

在这里插入图片描述

调用:

在这里插入图片描述

在这里插入图片描述

注意事项:参数的传递是对大小写敏感的,此处不要写错

4.获取表单参数

  • 获取少数 form 表单参数

在这里插入图片描述
在这里插入图片描述

此处就可以获取到表单参数了

在这里插入图片描述
在这里插入图片描述

  • 获取多参数 form 表单参数(封装成对象)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.接收JSON对象

在这里插入图片描述

后端接收代码:

在这里插入图片描述

此处既不能用单个数据类型接收也不能用对象,只能用 @RequestBody 加对象的方式来获取

6.上传文件

在这里插入图片描述

在本地创建的一个目录 D:\Testpng 用来测试桌面的图片是否能存储到文件夹中

在 postman 中传:

在这里插入图片描述

在 D 盘中的目录:

在这里插入图片描述

表示当前文件传输成功了

此处写绝对路径

7.获取Cookie/Session/header

获取 Cookie:
在这里插入图片描述

访问浏览器,由于浏览器里我们没有存储 Cookie,此处使用开发者工具添加 cookie,然后进行打印:

在这里插入图片描述

如果有多个 cookie 需要打印,只需要在 @CookieValue(“java”)String java 后面加个逗号隔开继续添加即可

浏览器会默认将当前网站的所有 cookie 发送给后端,是因为 http 协议无状态。

Session 获取:

设置 Session:

在这里插入图片描述

读取:

在这里插入图片描述
在这里插入图片描述

获取 header:

在这里插入图片描述

通过 fiddler 抓包看到百度的 User-Agent

在这里插入图片描述

在这里插入图片描述


8.后端参数重命名

例如我们后端写了一个 time 的程序,前端输入数据的时候,只想用 t 来表示,前后端都不妥协的情况下就只能后端来加一个注解来过渡了

在这里插入图片描述

在这里插入图片描述

此时我们需要在代码里加入注解:

在这里插入图片描述

只能识别 t 参数,并将t参数的值,设置给 time 变量,此时即使使用 time 参数,那么当前的写法也是读取不到前端的参数的,它只认参数名为 t 的参数。所以加了个 required ,传递的不是按规则来的就直接为 null,而不是报错,设置参数是否必传,如果是 true 就需要必传。

在这里插入图片描述


9.特殊的URL地址和获取参数的方式:

在这里插入图片描述

如果想重命名就按照上面 name 的格式来,不用重命名就按照上面 password 来。

在这里插入图片描述


3.返回数据

默认请求下无论是 Spring MVC 或者是 Spring Boot 返回的是视图(xxx.html),而现在都是前后端分离的,后端只需要返给给前端数据即可,这个时候我们就需要使用 @ResponseBody 注解了。

前面详解了 @ResponseBody 注解

  • @ResponseBody 返回的值如果是字符会转换成 text/html,如果返回的是对象会转换成 application/json 返回给前端。
  • @ResponseBody 可以用来修饰方法或者是修饰类,修饰类表示类中的所有方法都会返回 html 或者 json,而不是视图。

请求转发和请求重定向

forward VS redirect

return 不但可以返回⼀个视图,还可以实现跳转,跳转的方式有两种:

  • forward 是请求转发;
  • redirect:请求重定向。

forward(请求转发)和 redirect(请求重定向)的区别,举例来说,例如,你告诉你妈妈,你想吃辣条,如果你妈妈,说好,我帮你去买,这就是 forward 请求转发;如果你妈妈让你自己去买,那么就是请求 redirect 重定向。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

注意:我这里是返回的前端页面,就需要把 @RestController 换成 @Controller,相当于去掉了 @ResponseBody,让他返回一个前端静态页面

forward 和 redirect 具体区别如下:

  1. 请求重定向(redirect)将请求重新定位到资源;请求转发(forward)服务器端转发。
  2. 请求重定向地址发生变化,请求转发地址不发生变化。
  3. 请求重定向与直接访问新地址效果⼀直,不存在原来的外部资源不能访问;请求转发服务器端转发有可能造成原外部资源不能访问。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/262247.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Day17_集合与数据结构(链表,栈和队列,Map,Collections工具类,二叉树,哈希表)

文章目录 Day17 集合与数据结构学习目标1 数据结构2 动态数组2.1 动态数组的特点2.2 自定义动态数组2.3 ArrayList与Vector的区别?2.4 ArrayList部分源码分析1、JDK1.6构造器2、JDK1.7构造器3、JDK1.8构造器4、添加与扩容5、删除元素6、get/set元素7、查询元素8、迭…

论文学习 BioNeRF: Biologically Plausible Neural Radiance Fields for View Synthesis

论文学习 BioNeRF: Biologically Plausible Neural Radiance Fields for View Synthesis 前言简介NeRF介绍BioNeRF位置编码提取感知过滤记忆更新纹理推断损失函数 量化验证总结 前言 虽然我不应该再看NeRF相关的东西了,但是我还是觉得这个论文的题目很有意思&#…

ChatGPT 是什么

文章目录 一、ChatGPT 是什么二、ChatGPT的发明者三、ChatGPT的运作方式四、ChatGPT的技术五、ChatGPT的优势六、ChatGPT的局限性七、ChatGPT的应用八、ChatGPT的未来九、总结 一、ChatGPT 是什么 OpenAI的ChatGPT,即Chat Generative Pre-Trained Transformer&…

Sora来袭,蹭一波AI热潮|GPT · 重点梳理 -- 什么是ChatGPT,能干嘛,怎么用?

课程安排 学习内容 第一章 2024年AI领域最新技术 1.OpenAI新模型-GPT-5 2.谷歌新模型-Gemini Ultra 3.Meta新模型-LLama3 4.科大讯飞-星火认知 5.百度-文心一言 6.MoonshotAI-Kimi 7.智谱AI-GLM-4 第二章 OpenAI开发者大会后GPT最新技术 1.最新大模型GPT-4 Turbo详细介绍…

(done) 什么是特征值和特征向量?如何求特征值的特征向量 ?如何判断一个矩阵能否相似对角化?

什么是齐次方程? https://blog.csdn.net/shimly123456/article/details/136198159 行列式和是否有解的关系? https://blog.csdn.net/shimly123456/article/details/136198215 特征值和特征向量 参考视频:https://www.bilibili.com/video/BV…

HTML5新婚、年会、各种聚会的现场抽奖活动(附源码)

文章目录 1.抽奖平台设计来源1.1 主界面效果1.2 抽奖效果1.3 中奖效果 2.效果和源码配置2.1 动态效果2.2 人员信息配置2.3 奖品信息配置2.4 抽奖音效配置2.5 源代码 源码下载 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/deta…

【kubernetes】二进制部署k8s集群之cni网络插件flannel和calico工作原理(中)

↑↑↑↑接上一篇继续部署↑↑↑↑ 目录 一、k8s集群的三种接口 二、k8s的三种网络模式 1、pod内容器之间的通信 2、同一个node节点中pod之间通信 3、不同的node节点的pod之间通信 Overlay Network VXLAN 三、flannel网络插件 1、flannel插件模式之UDP模式&#xff0…

Linux网络编程套接字

目录 前言 一、预备知识 1.1 源IP地址和目的IP地址 1.2 区分端口号和进程ID 1.3 TCP协议和UDP协议 1.4 网络字节序 二、socket编程接口 2.1 socket套接字的概念 2.2 socket常见API 2.3 sockaddr结构 三、关于IP和Port的绑定问题 四、编写简单的UDP服务端和客户端 前…

基于Python网络爬虫的IT招聘就业岗位可视化分析推荐系统(完整系统源码+数据库+详细文档)

文章目录 基于Python网络爬虫的IT招聘就业岗位可视化分析推荐系统(完整系统源码数据库详细文档)源码获取在文章末尾项目概述招聘岗位数据爬虫分析系统展示用户注册登录系统首页IT招聘数据开发岗-javaIT招聘数据开发岗-PythonIT招聘数据开发岗-Android算法…

通过Jmeter压测存储过程

一、存储过程准备: 1、建立一个空表: CREATE TABLE test_data ( id NUMBER, name VARCHAR2(50), age NUMBER ); 2、建立一个存储过程: CREATE OR REPLACE PROCEDURE insert_test_data (n IN NUMBER) AS BEGIN--EXECUTE IMMEDIATE truncat…

如何高效率完成软件开发?试试低代码

一、前言 对于一个非技术出身的软件行业从业者而言,理解技术是一道坎,但也是向上发展所必须跨越的一道坎。在一个软件公司,无论是商务、售前还是项目经理亦或者是产品经理,对技术的理解程度,往往意味着他的专业程度。而…

开发Chrome插件,background.js中log打印未出现在控制台

不同于内容脚本(通常命名content.js),在后台脚本(通常命名background.js或service-worker.js)中console.log并不会在控制台中直接显示。 要查看后台脚本上下文的正确控制台,执行如下步骤: 访问…

Facebook Horizon:探索虚拟现实中的社交空间

随着科技的不断进步,虚拟现实(VR)技术正成为社交互动和娱乐体验的新前沿。在这个数字时代,Facebook作为全球最大的社交媒体平台之一,正在引领虚拟社交的新时代,其推出的虚拟社交平台Facebook Horizon成为了…

ELF文件内容详解——各节内容分析

文章目录 写在前面准备.text节.data节.strtab.symtab.shstrtab.shstrtab之后 写在前面 只看readelf这个工具说实话我感觉还是有点云里雾里,这里就逐字节分析一下ELF文件中text节(代码段)的内容 本文分析使用的汇编程序ELF文件内容详解这篇文…

Redis之缓存雪崩问题解决方案

文章目录 一、书接上文二、介绍三、解决方案1. 锁2. 不同的过期时间3. 缓存预热和定时任务 一、书接上文 Redis之缓存穿透问题解决方案实践SpringBoot3Docker 二、介绍 缓存雪崩,指大量的缓存失效,大量的请求又同时落在数据库。主要的一种诱因是key设…

【Java面试】MQ(Message Queue)消息队列

目录 一、MQ介绍二、MQ的使用1应用解耦2异步处理3流量削峰4日志处理5消息通讯三、使用 MQ 的缺陷1.系统可用性降低:2.系统复杂性变高3.一致性问题四、常用的 MQActiveMQ:RabbitMQ:RocketMQ:Kafka:五、如何保证MQ的高可用?ActiveMQ:RabbitMQ:RocketMQ:Kafka:六、如何保…

数据湖Iceberg、Hudi和Paimon比较

1.社区发展现状 项目Apache IcebergApache HudiApache Paimon开源时间2018/11/62019/1/172023/3/12LicenseApache-2.0Apache-2.0Apache-2.0Github Watch1481.2k70Github Star5.3k4.9k 1.7k Github Fork1.9k2.3k702Github issue(Open)898481263Github issue(closed)20542410488…

【xss跨站漏洞】xss漏洞利用工具beef的安装

安装环境 阿里云服务器,centos8.2系统,docker docker安装 前提用root用户 安装docker yum install docker 重启docker systemctl restart docker beef安装 安装beef docker pull janes/beef 绑定到3000端口 docker run --rm -p 3000:3000 janes/beef …

小红书x-s算法及补环境 单旋转验证码

前言 大家好呀!新的一年,先祝大家新年快乐咯.祝大家逆向,风控都一把过咯. 新年第一篇文章,后续会持续更新哦! 春晚见证了中国经济的新风口,今年春晚互联网企业赞助商就两家,小红书和京东.小红书类似国外的ins,有预感未来小红书会大火,所以写了这篇文章,有需要的加我,联系方式…

MySQL多实例部署:从概念到实操的全面指南

目录 MySQL多实例管理 单实例 什么是多实例 多实例的好处 多实例的弊端 MySQL多实例用在哪些场景 资金紧张的公司 用户并发访问量不大的业务 大型网站也有用多实例 部署MySQL多实例 rpm和源码的优缺点 二进制方式安装mysql 准备二进制mysql运行所需的环境 准备多…