Spring Web MVC(一篇带你了解并入门,附带常用注解)

news2024/12/26 2:15:23

一,什么是Spring Web MVC 

先看一下官网怎么说:

也就是Spring Web MVC一开始就是包含在Spring框架里面的,但通常叫做Spring MVC。

也可以总结出一个信息,这是一个Web框架。后面我就简称为Spring MVC了。

1.1MVC

MVC也就是Model View Controller的缩写,是一个软件架构模式。主要分为模型,视图,控制器三个基础部分。

1.2 Spring MVC

根据上面的来说,Spring MVC也就是一个实现了MVC模式的Web框架。

在之前我们一开始创建的时候选择的Spring Web也就是这个Web框架。

这里也可以说明Spring Boot也是Spring MVC创建项目的一种方式罢了

二,Spring MVC 使用方法

2.1Spring MVC如何进行交互

交互这边主要分为三个方面:

建立连接:将用户和java程序连接起来,也就是访问一个地址能够调用到我们的Spring程序。

请求:用户请求会带一些参数,在程序中要想办法获取到参数,这个请求也就是指获取参数的功能。

响应:执行完逻辑之后,将结果返回给用户。

举个例子加强理解:

建立连接:去银行柜台

请求:拿着银行卡和身份证去存款

响应:银行给我一张存折,说我存好了。

2.2常用注解和注解解释

路由映射:@RequestMapping(最常用到的注解)

解释:当用户访问一个URL的时候,将用户的请求对应到程序某个类的某个方法的过程就叫做路由映射。

@RequestMapping可以修饰类,也可以修饰方法,访问地址就是类路径+方法路径,

还有一个常问的面试也就是@RequestMapping是GET请求还是POST请求,记住,它是两种都可以,看你是什么他都可以实现。

@RequestMapping("/user")
@RestController//返回数据
public class UserController {
     @RequestMapping("/sayHi")
     public String sayHi(){
         return "hello,Spring MVC";
   }//访问路径即为http://127.0.0.1:8080/user/sayHi
}

后端参数重命名:@RequestParam

这个注解也就是害怕前端传来的参数和后端接受的参数字段不同的时候。就比如前端name,后端是username,这样就会出现接受不到参数的情况。这时就可以使用这个注解来重命名参数值,来接收这个。

具体实现代码:在括号里面加上要修改的参数名就可以了

@RequestMapping("/m4")
public Object method_4(@RequestParam("name") String username) {
         return "接收到参数username:" + username;
}

但要注意,使用了这个注解之后,你的这个参数是必传参数,如果没有就会报错。

返回数据:@RequestBody

意思就是请求正文的数据绑定,请求参数必须写到正文中

代码实现:

@RequestMapping(value = "/m7")
public Object method7(@RequestBody Person person) {
         return person.toString();
}

获取URL参数:@PathVariable

这个注解主要作用就是在请求URL的数据绑定。

代码实现:

@RequestMapping("/m8/{id}/{name}")
public String method8(@PathVariable Integer id, @PathVariable("name") String use
 return "解析参数id:"+id+",name:"+userName;
}

 上传文件:@RequestPart

也就是上传文件到指定路径

代码实现:

@RequestMapping("/m9")
public String getfile(@RequestPart("file") MultipartFile file) throws IOExceptio
     //获取⽂件名称 
     String fileName = file.getOriginalFilename();
     //⽂件上传到指定路径 
     file.transferTo(new File("D:/temp/" + file.getOriginalFilename()));
     return "接收到⽂件名称为: "+fileName;
}

获取Cookie:@CookieValue

也就是获取令牌。

代码实现:

@RequestMapping("/getCookie")
public String cookie(@CookieValue("bite") String bite) {
       return "bite:" + bite;
}

获取Session:@SessionAttribute

代码实现:

@RequestMapping("/getSess2")
public String sess2(@SessionAttribute(value = "username",required = false) Strin
     return "username:"+username;
}

获取Header:@RequestHeader

代码实现:

@RequestMapping("/header")
public String header(@RequestHeader("User-Agent") String userAgent) {
     return "userAgent:"+userAgent;
}

前面使用的@RestController 其实是返回的数据。也是一个高频使用的注解,有他才能启动。

@RestController =@Controller +@ResponseBody

上面讲了ResponseBody,这里说一下@Controller:定义一个控制器,在项目启动时加载,将对象交给Spring管理。

三,总结

3.1常用注解总结:

@RequestMapping:路由映射

@RequestParam:后端参数重命名

@RequestBody:接收JSON类型的参数

@PathVariable:接收路径参数

@RequestPart:上传⽂件 

@ResponseBody:返回数据 

@CookieValue:从Cookie中获取值 

@SessionAttribute:从Session中获取值 

@RequestHeader:从Header中获取值

@Controller:定义⼀个控制器,Spring框架启动时加载,把这个对象交给Spring管理.默认返回视图. 

@RestController:@ResponseBody+@Controller返回数据

3.2解释一下Cookie和Session

Cookie和Session都是会话机制,Cookie是客⼾端机制,Session是服务端机制。

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

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

相关文章

202496读书笔记|《飞花令·菊(中国文化·古典诗词品鉴)》——荷尽已无擎雨盖,菊残犹有傲霜枝

202496读书笔记|《飞花令菊(中国文化古典诗词品鉴)》——荷尽已无擎雨盖,菊残犹有傲霜枝 《飞花令菊(中国文化古典诗词品鉴)》素心落雪 编著。飞花令得名于唐代诗人韩翃《寒食》中的名句“春城无处不飞花”&#xff0c…

食南之徒~马伯庸

◆ 第一章 >> 老赵,这你就不懂了。过大于功,要受罚挨打,不合算;功大于过,下回上司有什么脏活累活,第一时间会想到你,也是麻烦多多。只有功过相抵,上司既挑不出你的错&#xf…

Unity 调试死循环程序

如果游戏出现死循环如何调试呢。 测试脚本 我们来做一个测试。 首先写一个死循环代码: using System.Collections; using System.Collections.Generic; using UnityEngine;public class dead : MonoBehaviour {void Start(){while (true){int a 1;}}}Unity对象设…

Flowable-SpringBoot项目集成

在前面的介绍中,虽然实现了绘制流程图,然后将流程图存储到数据库中,然后从数据库中获取流程信息,并部署和启动流程,但是部署的流程绘制器是在tomcat中部署的,可能在部分的项目中,需要我们将流程…

微信小程序数组绑定使用案例(一)

微信小程序数组绑定案例&#xff0c;修改数组中的值 1.Wxml 代码 <view class"list"><view class"item {{item.ischeck?active:}}" wx:for"{{list}}"><view class"title">{{item.name}} <text>({{item.id}…

武忠祥李永乐强化笔记

高等数学 函数 极限 连续 函数 复合函数奇偶性 f[φ(x)]内偶则偶&#xff0c;内奇则同外 奇函数 ln ⁡ ( x 1 x 2 ) \ln(x \sqrt{1 x^{2}}) ln(x1x2 ​) 单调性 一点导数>0不能得出邻域单调增&#xff0c;加上导函数连续则可以得出邻域单调增 极限 等价无穷小…

达梦数据库的系统视图v$utsk_info

达梦数据库的系统视图v$utsk_info 查询守护进程向服务器发送请求的执行情况。 升级到 V3.0 版本后&#xff0c;此视图仅用于查看当前服务器的命令执行情况&#xff0c;在 CMD 字段值不为 0 时&#xff0c;说明是有效的命令信息&#xff1b;此时如果 CODE 字段值是 100&#xf…

202495读书笔记|《红楼梦(插图本)(童年书系·书架上的经典)》——荣辱自古周而复始,岂是人力所能保的?

202495读书笔记|《红楼梦&#xff08;插图本&#xff09;&#xff08;童年书系书架上的经典&#xff09;》——荣辱自古周而复始&#xff0c;岂是人力所能保的&#xff1f; 摘录人物关系&#xff1a; 《红楼梦&#xff08;插图本&#xff09;&#xff08;童年书系书架上的经典&…

02互联网行业的产品方向(2)

数字与策略产品 大数据时代&#xff0c;数据的价值越来越重要。大多数公司开始对内外全部数据进行管理与挖掘&#xff0c;将业务数据化&#xff0c;数据资产化&#xff0c;资产业务化&#xff0c;将数据产品赋能业务&#xff0c;通过数据驱动公司业务发展&#xff0c;支撑公司战…

学习周报:文献阅读+Fluent案例+水动力学方程推导

目录 摘要 Abstract 文献阅读&#xff1a;物理信息神经网络学习自由表面流 文献摘要 讨论|结论 预备知识 浅水方程SWE&#xff08;Shallow Water Equations&#xff09; 质量守恒方程&#xff1a; 动量守恒方程&#xff1a; Godunov通量法&#xff1a; 基本原理&…

嵌入式Linux学习: platform 设备驱动实验

在Linux中&#xff0c;Platform&#xff08;平台&#xff09;机制是一个重要的设备驱动管理框架&#xff0c;它主要在Linux 2.6内核及以后的版本中引入。Platform机制的主要目的是提供一种统一的方式来管理那些不直接挂靠在传统物理总线&#xff08;如USB、PCI、I2C、SPI等&…

单链表的应用(3)

返回倒数第k个结点 实现一种算法&#xff0c;找出单向链表中倒数第 k 个节点。返回该节点的值。 思路&#xff1a; 利用快慢指针&#xff0c;先让快指针走k步快慢指针一起往后遍历&#xff0c;直到快指针到达链表的末端此时的慢指针就是链表的倒数第k个结点 int kthToLast(…

昇思MindSpore学习总结十六 —— 基于MindSpore的GPT2文本摘要

1、mindnlp 版本要求 !pip install tokenizers0.15.0 -i https://pypi.tuna.tsinghua.edu.cn/simple # 该案例在 mindnlp 0.3.1 版本完成适配&#xff0c;如果发现案例跑不通&#xff0c;可以指定mindnlp版本&#xff0c;执行!pip install mindnlp0.3.1 !pip install mindnlp …

提供代码!直接可以运行,Chatgpt代码分享

效果演示 安装依赖库 pip install openai粘贴如下代码 # 设置 API Key import openaiopenai.api_key "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"# 设置请求参数model_engine "text-davinci-002"prompt "python的应用领域"comp…

Bonree ONE赋能汽车行业 重塑可观测性体验

随着数字化、智能化浪潮的汹涌而至&#xff0c;全球汽车产业正站在一个崭新的历史起点上。新能源汽车&#xff0c;作为这场科技革命和产业变革的领跑者&#xff0c;其数智化发展正呈现出前所未有的蓬勃态势。7月18-19日&#xff0c;第四届中国新能源汽车产业数智峰会于上海举办…

《0基础》学习Python——第二十三讲__网络爬虫/<6>爬取哔哩哔哩视频

一、在B站上爬取一段视频&#xff08;B站视频有音频和视频两个部分&#xff09; 1、获取URL 注意&#xff1a;很多平台都有反爬取的机制&#xff0c;B站也不例外 首先按下F12找到第一条复制URL 2、UA伪装&#xff0c;下列图片中&#xff08;注意代码书写格式&#xff09; 3、Co…

【2024】springboot O2O生鲜食品订购

博主介绍&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围&#xff1a;SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化…

sass版本更新,不推荐使用嵌套规则后的声明

目前在 Sass 中不推荐使用嵌套规则后的声明&#xff0c;在 为了通知用户即将进行的更改&#xff0c;并给他们时间进行更改 与之兼容的样式表。在未来的版本中&#xff0c;Dart Sass 将更改为 匹配纯 CSS 嵌套生成的顺序。Deprecation Warning: Sasss behavior for declarations…

视频点播项目

文章目录 视频点播技术栈与项目环境JsonCppMariaDBhttplib 工具类设计文件类Json类 数据管理模块视频信息管理&#xff08;数据表设计&#xff09;数据管理类设计 网络通信接口设计业务处理模块设计前端界面主页面播放页面 项目总结项目回顾项目结构关键技术点总结 视频点播 允…

el-table表头使用el-dropdown出现两个下拉框

问题描述&#xff1a;el-table在固定右边列时&#xff0c;表头使用el-dropdown会出现两个下拉框&#xff0c;如图所示&#xff1a; 解决方法&#xff1a; 1.只显示第一个下拉框&#xff0c;通过控制样式将其他的下拉框display:none; 2.如图所示&#xff0c;修改插槽写法&…