了解 spring MVC + 使用spring MVC - springboot


前言

本篇介绍什么是spring MVC ,如何使用spring MVC,了解如何连接客户端与后端,如何从前端获取各种参数;如有错误,请在评论区指正,让我们一起交流,共同进步!


文章目录

  • 前言
  • 1. 什么是 spring MVC ?
  • 2. 了解 spring MVC 的 3个功能
    • 2.1 spring MVC的连接功能
    • 2.2 spring MVC 获取参数的功能
    • 2.3 spring MVC 输出数据的功能 - 返回页面
  • 总结

本文开始

1. 什么是 spring MVC ?

spring MVC :spring MVC 是一个 基于 Servlet API 构建Web框架;(spring MVC == spring Web MVC)=》使用spring MVC,客户端就能通过请求能与后端进行交互;

为什么要认识MVC?
MVC是一种思想,而spring MVC 是 MVC思想的实现;

认识MVC:
MVC: 英文 Model View Controller - 模型视图控制器,一种软件架构模式;

MVC 执行流程:(用户请求,经过Controller + Model + View处理,将结果返回前端页面的过程)
① 用户请求首先到 Controller
② Controller 将请求转发给Model
③ Model 处理业务并将数据结果返回给 Controller
④ Controller 将数据给 View 引擎
⑤ View 转换数据生成最终页面给用户;

2. 了解 spring MVC 的 3个功能

2.1 spring MVC的连接功能

spring MVC 连接:将浏览器(客户端)与程序连接起来;- 通过请求能调用spring程序;

如何连接客户端 与 程序呢?
方式一:通过注解 @RequestMapping() 实现路由(也就是访问路径);

【注】

@RequestMapping()可修饰类 和 修饰方法;

  • @RequestMapping的参数就是路由,格式为:“/xxx”;
    修饰类为一级路由,修饰方法为二级路由;
  • @RequestMapping支持请求类型:多种类型包括 post + get; (其他类型不介绍了,这两种是常用类型)
  • 设置后端接收的请求类型:例如:修改@RequestMapping,让java程序只支持post请求:
    @RequestMapping(path=“/test”, method = RequestMethod.POST)

方式二:通过@GetMapping() - 只支持get请求,写在方法上
使用方式:@GetMapping(“/xxx”)
通过@PostMapping() - 只支持post请求
使用方式:@PostMapping(“/xxx”)

2.2 spring MVC 获取参数的功能

spring MVC 获取参数:从请求中获取参数;

  • 获取单个参数:
    保证代码的参数与请求参数的key值一样就行,代码中的值就会自带注入获取参数
    【注】参数名字:不用使用小驼峰的形式(不用出现大写字母)因为Linux不支持,但可以使用下滑线连接;(例如:user_name)

保证key值一样:框架会自带动注入参数值;在这里插入图片描述

  • 获取多个参数:只是在()中添加即可,但要保证key值与请求传入的key一样;
 @RequestMapping("/name2")public String getName(String name, Integer age) {return "Name: " + name +" "+ "age: " + age;}
  • 获取对象:前端传递的请求,后端获取参数时框架会根据 对象中的属性值 与 请求中的key值相比较,如果属性值 == 请求中的key值,就会赋值给属性,没有的使用默认值;
    【注】可以避免之后的代码一直添加参数,而一直修改代码,使用对象获取参数可以不用修改参数,修改对象即可;

在这里插入图片描述

  • 修改前端传递的参数名称:修改注释为@RequestParam(), value中为前端参数值,required 是 设置非必传参数,设置了就可以不用传了;
@RequestMapping("/age")public int a(@RequestParam(value = "a", required = false) String age) {return age;//修改后端名称就可以在此方法中使用了;}
  • 获取前端Json对象:通过注释@RequestBody,获取前端Body中的json数据;
@RequestMapping("/json")public User addJson(@RequestBody User user) {return user;}
  • 获取前端URL中非queryString部分的参数:通过注释@PathVariable获取
    //{}来装要获取的参数:{}中的名称a 与 方法中的名称aid不一样,就需要使用();@RequestMapping("/article/{a}")public Integer article(@PathVariable("a") Integer aid) {return aid;}//如果{}中的参数名称 与方法中设置的名称一样,就可以省略();如下:@RequestMapping("/article2/{aid}/{name}")public String article2(@PathVariable Integer aid ,@PathVariable String name) {return "id: " + aid + " " + "name: " + name;}

获取的aid==234在这里插入图片描述

  • 获取文件:使用注释@RequestPart()
 @RequestMapping("/upload")public String upload(@RequestPart("my_file")MultipartFile file) throws IOException {//1.生成一个UUid: 全球唯一IDString name = UUID.randomUUID().toString().replace("-", "");//2.得到源文件的后缀: 从.后开始截取;name += (file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")));String path = "D:\\File_Test\\" + name;//3.保存文件file.transferTo(new File(path));return path;}
  • 获取 cookie 和 session 和 Header:通过注释@CookieValue, @SessionAttribute, @RequestHeader
//获取cookie
//value参数: 是cookie的名称;required: 是设置非必须参数;@RequestMapping("/get_cookie")@ResponseBodypublic String getCookie(@CookieValue(value = "test_cookie", required = false)String cookie) {return cookie;}
//获取session@RequestMapping("/get_session")@ResponseBodypublic String getSession(@SessionAttribute(value = "test_session",required = false)String session) {return session;}
//获取header@RequestMapping("/get_header")@ResponseBodypublic String getHeader(@RequestHeader(value = "test_Header",required = false)String header) {return header;}

2.3 spring MVC 输出数据的功能 - 返回页面

spring MVC 输出数据:将数据返回前端页面;

  • 框架自动转换数据类型:springboot框架会根据要返回的数据类型,自动转换;如果能转换为json(对象与集合就可以转换json),就会转换,不能就根据类型判断,是html就返回html格式等等;

为什么使用 @Controller,还要加上@ResponseBody?

之前前后端不分离的时,使用@Controller注释,返回的是一个页面;但现在前后端分离,需要返回数据就可以,这就使用到了@ResponseBody注释,加上注释后返回的就是数据,不再是页面了;

【注】组合注释@RestController == @Controller + @ResponseBody;


forward : 请求转发 与 redirect :请求重定向
区别:

  • 请求重定向 会将请求定位到新的资源;请求转发服务器端转发,不会定位新资源;
  • 请求重定向地址发生变化,请求转发地址不发生变化;
  • 请求重定向不存在原来外部资源不能访问,请求转发存在原来的外部资源不能访问;

示例:张三 拿钱 给 李四,让李四去买饼干,如果李四去买就是请求转发;如果李四不同意去买就是请求重定向,就需要张三自己去买;
对于原外部资源能不能访问:张三自己去买(请求重定向),买的一定是自己喜欢吃的,但是让李四去买(请求转发),不一定是张三喜欢吃的;


总结

✨✨✨各位读友,本篇分享到内容如果对你有帮助给个👍赞鼓励一下吧!!
感谢每一位一起走到这的伙伴,我们可以一起交流进步!!!一起加油吧!!!

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

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

相关文章

Vue 全局事件总线 Event-Bus

全局事件总线 作用:可以在全局层面上,在任意组件之间相互传递数据。不再局限于父子组件传值,或多层嵌套传值等方式。 使用方式:完全与父子组件传值一致,使用 $on 监听事件,使用 $emit 触发事件&#xff0c…

el-tooltip设置文字溢出时展示否则不展示

改写el-tooltip使其支持文字溢出时展示否则不展示,而不是需要使用js设置单独控制 新建 src/utils/rewriteElTooltip.js (一模一样 cv就行) export default function rewriteElTooltip(el) {el.props {...el.props,overflow: Boolea…

kagNet:对常识推理的知识感知图网络 8.4+8.5

这里写目录标题 摘要介绍概述问题陈述推理流程 模式图基础概念识别模式图构造概念网通过寻找路径来匹配子图基于KG嵌入的路径修剪 知识感知图网络图卷积网络(GCN)关系路径编码分层注意机制 实验数据集和使用步骤比较方法KAGNET是实施细节性能比较和分析I…

eNSP 路由器启动时一直显示 # 号的解决办法

文章目录 1 问题截图2 解决办法2.1 办法一:排除防火墙原因导致 3 验证是否成功 1 问题截图 路由器命令行一直显示 # 号,如下图 2 解决办法 2.1 办法一:排除防火墙原因导致 排查是否因为系统防火墙原因导致。放行与 eNSP 和 virtualbox 相…

【计算机网络】socket编程

文章目录 1. 网络通信的理解2.进程PID可以取代端口号吗?3. 认识TCP协议4. 认识 UDP协议5. socket编程接口udp_server.hpp的代码解析socket——创建 socket 文件描述符Initserver——初始化1.创建套接字接口,打开网络文件bind——绑定的使用 2.给服务器指…

spring-boot webservice的例子

webservice发布服务 源码下载地址 spring-boot-webservice例子资源-CSDN文库 webservice cilent调用 源码下载地址 spring-boot-clintwebservice调用服务的例子资源-CSDN文库

VSCode---通过ctrl+鼠标滚动改变字体大小

打开设置然后在右边输editor.mouseWheelZoo勾选即可实现鼠标滚动改变字体大小 4.这种设置的字体大小是固定的

Plugin [id: ‘com.android.application‘, version: ‘7.xx‘, apply: false] was not found in any ...

Plugin [id: com.android.application, version: 7.3.0-alpha03, apply: false] was not found in any of the following sources: 问题原因: 如上解释,所配置gradle版本在本地配置的gradle仓库里面没找到。 解决办法: 1.弄清楚自己本地的…

JVM基础篇-方法区与运行时常量池

JVM基础篇-方法区与运行时常量池 方法区 Java 虚拟机有一个在所有 Java 虚拟机线程之间共享的方法区。方法区类似于传统语言的编译代码的存储区或者类似于操作系统进程中的“文本”段。它存储每个类的结构,例如运行时常量池、字段和方法数据,以及方法和…

Redis 单线程VS多线程

面试题 redis到底是单线程还是多线程?IO多路复用是什么?redis为什么快? Redis单线程 是什么 Redis的版本很多3.x、4.x、6.x,版本不同架构也是不同的,不限定版本问是否单线程也不太严谨。 1、版本3.x ,最…

使用JProfiler进入JVM分析

要评测JVM,必须将JProfiler的评测代理加载到JVM中。这可以通过两种不同的方式发生:在启动脚本中指定-agentpath VM参数,或者使用attach API将代理加载到已经运行的JVM中。 JProfiler支持这两种模式。添加VM参数是评测的首选方式,集…

深入了解 PostgreSQL 扩展插件

深入了解 PostgreSQL 扩展插件 在 PostgreSQL 数据库中,扩展插件是极具价值的工具,它们为我们提供了丰富多样的功能增强。本篇博客将深入介绍几个常用的 PostgreSQL 扩展插件,包括 pg_stat_statements、uuid、postgis 以及 postgis_raster。…

【MATLAB第58期】基于MATLAB的PCA-Kmeans、PCA-LVQ与BP神经网络分类预测模型对比

【MATLAB第58期】基于MATLAB的PCA-Kmeans、PCA-LVQ与BP神经网络分类预测模型对比 一、数据介绍 基于UCI葡萄酒数据集进行葡萄酒分类及产地预测 共包含178组样本数据,来源于三个葡萄酒产地,每组数据包含产地标签及13种化学元素含量,即已知类…

【新版系统架构补充】-嵌入式技术

嵌入式微处理体系结构 冯诺依曼结构 传统计算机采用冯诺依曼结构,也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构 冯诺依曼的计算机程序和数据共用一个存储空间,程序指令存储地址和数据存储地址指向同一个存…

回归预测 | MATLAB实现SO-CNN-BiLSTM蛇群算法优化卷积双向长短期记忆神经网络多输入单输出回归预测

回归预测 | MATLAB实现SO-CNN-BiLSTM蛇群算法优化卷积双向长短期记忆神经网络多输入单输出回归预测 目录 回归预测 | MATLAB实现SO-CNN-BiLSTM蛇群算法优化卷积双向长短期记忆神经网络多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 MATLAB实现SO-CN…

uni-app 微信小程序自定义导航栏

一、效果图 二、导航栏的组成 上面的导航栏主要由状态栏(就是手机电量显示栏)和小程序的导航栏组成,android手机一般为48px,ios手机一般为44px 三、开发步骤 1、设置navigationStyle:custom {"path": "pages/v…

机器学习-特征选择:如何使用Lassco回归精确选择最佳特征?

一、引言 特征选择在机器学习领域中扮演着至关重要的角色,它能够从原始数据中选择最具信息量的特征,提高模型性能、减少过拟合,并加快模型训练和预测的速度。在大规模数据集和高维数据中,特征选择尤为重要,因为不必要的…

MySQL库的操作

MySQL库的操作 1. 库的操作 1.1 创建数据库 语法: CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [,create_specification] ...]create_specification: [DEFAULT] CHARACTER SET charset_name [DEFAULT] COLLATE collation_name说明&#xff…

Grafana集成prometheus(4.Grafana添加预警)

上文已经完成了grafana对prometheus的集成及数据导入,本文主要记录grafana的预警功能(以内存为例) 添加预警 添加入口(2个) databorard面板点击edit,下方有个Alert的tab,创建Alert rules依赖…

探索PostgreSQL的新功能:最新版本更新解析

PostgreSQL作为一种强大而开源的关系型数据库管理系统,不断在不断进化和改进。每一次的版本更新都带来了更多功能和改进,让用户在处理大规模数据和复杂查询时体验更好的性能和功能。在本文中,我们将深入探索PostgreSQL的最新版本更新&#xf…