了解 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.mzph.cn/news/25908.shtml

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

相关文章

概念解析 | 利用MIMO雷达技术实现高性能目标检测的关键技术解析

注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:MIMO雷达目标检测技术 参考资料:何子述, 程子扬, 李军, 等. 集中式 MIMO 雷达研究综述[J]. 雷达学报, 2022, 11(5): 805-829. 利用MIMO雷达技术实现高性能目标检测的关键技术解…

av_buffer_ref in libwebrtc.a is referenced by DSO, final link failed:bad value

这不是在编译阶段,是在链接库时出的问题。 此时执行 ldconfig会发现很多库提示如下: is not a symbolic link也就是这些库被认为是连接库,但是它没有连接到其他库上。应该把他连接到实体的库上。如果它本身就是一个实体的库,那么…

C语言单链表OJ题(较难)

一、链表分割 牛客网链接 题目描述: 现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。 思路:…

java+springboot+mysql员工工资管理系统

项目介绍: 使用javaspringbootmysql开发的员工工资管理系统,系统包含超级管理员,系统管理员、员工角色,功能如下: 超级管理员:管理员管理;部门管理;员工管理;奖惩管理&…

【BASH】回顾与知识点梳理(六)

【BASH】回顾与知识点梳理 六 六. 管线命令 (pipe)6.1 撷取命令: cut, grepcutgrep 6.2 排序命令: sort, wc, uniqsortuniqwc 6.3 双向重导向: tee6.4 字符转换命令: tr, col, join, paste, expandtrcoljoinpasteexpand 6.5 分区命…

element-ui - $prompt非空验证

//点击删除按钮 delStoreFun(data) { let than this; this.$prompt(删除门店请填写备注, 提示, { confirmButtonText: 确定, cancelButtonText: 取消, inputValidator: (value) > { //非空验证 if (!value) { return 输入不能为空 } }, }).then(({ value }) > { delS…

C语言预备知识

安装Visual studio 官方网址 https://visualstudio.microsoft.com/zh-hans/ 选择第一个社区版本(免费) 下载完成后打开安装包 安装完成后会自动打开程序选择c项目然后安装即可(c兼容c) 安装完成后启动程序注意这里需要注册也可…

java.util.NoSuchElementException: No value present-报错(已解决)

阿丹: 今天在spring-boot整合MongoDB的过程中出现了下面的错误,是因为追求新技术、更优雅产生的。 记录一下。 错误截图如下: 错误位置代码如下: 主要问题(问题原因): 因为之前升级了我的jdk的…

css实现文字颜色渐变+阴影

效果 代码 <div class"top"><div class"top-text" text"总经理驾驶舱">总经理驾驶舱</div> </div><style lang"scss" scoped>.top{width: 100%;text-align: center;height: 80px;line-height: 80px;fo…

前端架构师的具体职责范围(合集)

前端架构师的具体职责范围1 职责&#xff1a; 1、前端技术选型、架构搭建、制定前端开发规范&#xff0c;并编制相关文档 2、负责搭建前端框架、通用组件方案制定、性能优化相关工作; 3、维护和升级本地开发环境&#xff0c;提高开发效率&#xff0c;提升开发质量; 4、推动…

JavaScript对象的方法与原型链

在JavaScript中&#xff0c;对象是一种非常重要的数据类型&#xff0c;它允许我们将多个属性和方法组织在一起。对象的方法和原型链是理解JavaScript中面向对象编程的关键概念。本文将详细讲解对象的方法和原型链&#xff0c;用通俗易懂的方式帮助你深入理解这些概念。 1. 对象…

postgresql 使用之 存储架构 触摸真实数据的存储结构以及组织形式,存入数据库的数据原来在这里

存储架构 ​专栏内容&#xff1a; postgresql内核源码分析 手写数据库toadb 并发编程 个人主页&#xff1a;我的主页 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物. 概述 postgresql 数据库服务运行时&#xff0c;数据在磁…

【Linux】IO 篇:文件调用原理,文件描述符,FILE的内涵,解析重定向,理解缓冲区,软硬链接

文章目录 一、系统调用接口二、文件调用1. 文件描述符 fd2. 文件调用原理3. FILE 三、重定向dup2 四、缓冲区简易 FILE 的代码实现 五、ext2 文件系统1. inode 和 文件名2. 重新认识目录3. 理解文件的增删查改4. 一些补充 六、文件链接1. 建立软连接2. 建立硬连接 文件被加载之…

前后端开发的区别是什么?

VUE的开发方式为什么和后端的MVC开发方式不一样呢&#xff1f; 实际上&#xff0c;Vue 和后端开发的 MVC&#xff08;Model-View-Controller&#xff09;方式是不同的&#xff0c;因为它们面对的问题和场景也不同。 前端与后端的职责不同&#xff1a; 前端和后端的职责和任务不…

ARM 内存屏障指令

ARM 内存屏障指令 1. dmb (Data Memory Barrier) 数据内存栅栏2. dsb (Data Synchronization Barrier) 数据同步栅栏3. isb (Instruction Synchronization Barrier) 指令同步栅栏4. ARM 内存屏障指令如何选择使用&#xff1f;5. 使用示例5.1. DMB指令示例&#xff1a;5.2. DSB指…

java.lang.IllegalStateException: Failed to load ApplicationContext

问题描述 原因是我在进行微服务远程调用的时候报的错误。 解决方案 原来是jdk版本不一样导致的问题&#xff0c;改成1.8就行了

【学习日志】2023.Aug.6,支持向量机的实现

2023.Aug.6&#xff0c;支持向量机的实现 参考了大佬的代码&#xff0c;但有些地方似乎还有改进的空间&#xff0c;我加了注释 #codingutf-8 #Author:Dodo #Date:2018-12-03 #Email:lvtengchaopku.edu.cn #Blog:www.pkudodo.com数据集&#xff1a;Mnist 训练集数量&#xff1…

银河麒麟服务器ky10-server在线一键安装docker

脚本代码 # ---------------在线安装docker------------------- yum install docker -y # 修改docker拉取源为国内 rm -rf /etc/docker mkdir -p /etc/docker touch /etc/docker/daemon.json cat >/etc/docker/daemon.json<<EOF{"registry-mirrors": [&q…

7-数据结构-(带头节点)单链表的增删改查

问题&#xff1a; 单链表带头结点的创建以及输出&#xff0c;以及带与不带头节点的区别 思路&#xff1a; 单链表&#xff0c;逻辑上是线性结构&#xff0c;由许多单链表结点&#xff0c;串成一串。其单链表结构体中&#xff0c;数据项由data数据域和结点指针域。带头节点是为…

关于游戏的笔记

关于搭建秦时明月2一键端&#xff0c;并且开启秘境神秘商人东海寻仙幻化 1.该游戏下主要的目录 gm端 服务框架 服务端 2.修改对应的文件 C:\qs\Q2Server\server\conf_common\ManagerAddress.xmlC:\qs\Q2Server\server\conf_manager\GateServer.xml修改ip 3.启动gm startup…