详解Spring MVC

目录

1.什么是Spring Web MVC

MVC定义

2.学习Spring MVC

建立连接

@RequestMapping 注解介绍及使用

获取单个参数

 获取多个参数

获取普通对象

 获取JSON对象

获取基础URL参数

获取上传文件

获取Header

获取Cookie

获取Session

总结


1.什么是Spring Web MVC

官⽅对于 Spring MVC 的描述是这样

Spring Web MVC is the original web framework built on the Servlet API and has been included in the Spring Framework from the very beginning. The formal name, )Spring Web MVC),

comes from the name of its source module (spring-webmvc)

翻译为中⽂: 

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

从上述定义我们可以得出⼀个信息:

Spring Web MVC 是⼀个 Web 框架. 下⾯咱们简称之为: Spring MVC

MVC定义

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

•  View(视图) 指在应⽤程序中专⻔⽤来与浏览器进⾏交互 ,展⽰数据的资源.

•  Model(模型) 是应⽤程序的主体部分 ,⽤来处理程序中数据逻辑的部分.

•  Controller(控制器)可以理解为⼀个分发器 ,⽤来决定对于视图发来的请求 ,需要⽤哪⼀个模型来处理 ,以及处理完后需要跳回到哪⼀个视图。即 ⽤来连接视图和模型

2.学习Spring MVC

既然是 Web 框架, 那么当⽤⼾在浏览器中输⼊了 url 之后 ,我们的 Spring MVC 项⽬就可以感知到⽤⼾的请求, 并给予响应.

咱们学习Spring MVC, 重点也就是学习如何通过浏览器和⽤⼾程序进⾏交互. 

主要分以下三个⽅⾯:

1.  建⽴连接:将⽤⼾ (浏览器)和 Java 程序连接起来 ,也就是访问⼀个地址能够调⽤到我们的 Spring 程序。

2.  请求: ⽤⼾请求的时候会带⼀些参数 ,在程序中要想办法获取到参数, 所以请求这块主要是 获取参数 的功能.

3.  响应: 执⾏了业务逻辑之后 ,要把程序执⾏的结果返回给⽤⼾ , 也就是响应.

建立连接

在 Spring MVC 中使⽤@RequestMapping来实现 URL 路由映射 ,也就是浏览器连接程序的作⽤

创建⼀个 UserController  ,实现⽤户通过浏览器和程序的交互 ,具体实现代码如下:

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/Romised")
public class BlogController {@RequestMapping("/sayHello")public String sayHello(){return "hello";}
}

 接下来访问:http://127.0.0.1:8080/Romised/sayHello 就可以看到程序返回的数据了

代码中为什么要加上@RestController?

因为没有这个注解的话@RequestMapping注解无法被扫描到,无法进行正确的路由映射,@RestController是 @Controller 和 @ResponseBody 的组合,@Controller 注解用于标识一个类是控制器类,用于处理 Web 请求并协调视图和模型之间的交互,@ResponseBody 注解的主要作用是指示方法的返回值直接作为 HTTP 响应体返回给客户端(返回的是数据)

⼀个项⽬中, 会有很多类, 每个类可能有很多的⽅法, Spring程序怎么知道要执⾏哪个⽅法呢?

Spring会对所有的类进⾏扫描, 如果类加了注解@RestController, Spring才会去看这个类⾥⾯的⽅法有没有加@RequestMapping这个注解

@RequestMapping 注解介绍及使用

@RequestMapping是 Spring Web MVC 应⽤程序中最常被⽤到的注解之⼀ ,它是⽤来注册接⼝

路由映射的

收到请求时, 路径为/sayHello 的请求就会调⽤ sayHello这个⽅法的代码.

路由映射:

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

@RequestMapping的使用:

@RequestMapping可修饰类也可以修饰⽅法,当修饰类和⽅法时,访问的地址是类路径 + 法路径

@RequestMapping标识⼀个类:设置映射请求的请求路径的初始信息 

@RequestMapping标识⼀个⽅法:设置映射请求请求路径的具体信息

  @RequestMapping  GET 还是 POST 请求?

本身并不限定是 GET 还是 POST 请求。它主要是用于定义请求的路径映射,通过结合不同的 HTTP 方法(如 @GetMapping 对应 GET 请求,@PostMapping 对应 POST 请求等)来具体指定该映射路径所支持的请求方式。可以与多种 HTTP 方法配合来处理不同类型的请求。

@Controller
public class MyController {@RequestMapping(value = "/Romised", method = RequestMethod.GET)public String getMethod() {return "result for GET";}@RequestMapping(value = "/Romised", method = RequestMethod.POST)public String postMethod() {return "result for POST";}
}

Spring MVC 参数获取

1.获取单个参数

@RestController
@RequestMapping("/Romised")
public class BlogController {@RequestMapping("/sayHello")public String sayHello(String name){return "hello!" + name;}
}

获取单个参数

注意说明:

1.代码中声明的参数名与请求地址栏中的参数名要完全一致,若不一致则无法获取到地址栏中对应的参数值,获取的为参数的默认值。

2.如果想明确指定请求中的参数要绑定到方法的参数,可以在方法的参数前加上@RequestParam注解进行参数重命名操作

 获取多个参数

@RestController
@RequestMapping("/Romised")
public class BlogController {@RequestMapping("/sayHello")public String sayHello(String name,String password){return "name:" + name + " password:" + password;}
}

获取多个参数注意说明:

1.进行参数匹配时,后端代码的参数名称要与地址栏中的参数名称要保证完全一致。

2.前后端进行参数匹配时,是以参数的名称进行匹配的,因此地址栏中的参数位置是不影响后端获取参数的结果

获取普通对象

创建实体类Person:

import lombok.Data;
@Data
public class Person {private Integer id;private String name;
}

 获取Person:

@RestController
@RequestMapping("/Romised")
public class BlogController {@RequestMapping("/sayHello")public Person sayHello(Person person){return person;}
}

 获取JSON对象

上述代码运行后获取JSON对象:发现获取不到JSON对象

在Spring MVC 中,提供了 @RequestBody 注解来实现接收 Json 对象的操作。代码如下: 

@RestController
@RequestMapping("/Romised")
public class BlogController {@RequestMapping("/sayHello")public Person sayHello(@RequestBody Person person){return person;}
}

获取基础URL参数

代码示例:

@RestController
@RequestMapping("/Romised")
public class BlogController {@RequestMapping("/sayHello/{name}/{password}")public String sayHello(@PathVariable(value = "name") String name,@PathVariable String password){return "name:" + name + " password:" + password ;}
}

获取基础URL参数注意说明:

使用@PathVariable 进行参数匹配时,后端代码的参数名称要与地址栏中的参数名称要保证一致且其对应的参数值要对应。

获取上传文件

代码示例:注意@RequestPart中的文件名和上传的要一致

@RestController
@RequestMapping("/fileTest")
public class BlogController {@RequestMapping("file")public String file(@RequestPart("Kun") MultipartFile file) throws IOException {System.out.println(file.getOriginalFilename());file.transferTo(new File("D:/BlogTest/" + file.getOriginalFilename()));return "success";}
}

上传文件成功!

注意:在new File的时候不要把路径写死,这样就可以上传多个文件不会覆盖

获取Header

获取Header的操作代码:

@RestController
@RequestMapping("/Romised")
public class BlogController {@RequestMapping("/getHeader")public String getHeader(HttpServletRequest request) {String userAgent = request.getHeader("User-Agent");return "userAgent:" + userAgent;}
}

在地址栏输入URL后,使用FIddler进行抓包操作获取请求的相关信息和响应信息

注意:

使用@RequestHeader 注解进行获取Header中的参数操作,该注解里的参数的参数名要与Header里面的参数名要一致

获取Cookie

首先在Chrome浏览器中打开开发者工具设置Cookie

 代码示例:

@RestController
@RequestMapping("/Romised")
public class BlogController {@RequestMapping("/getCookie")public String getCookie2(@CookieValue String kun,@CookieValue String romised){return "cookie存取的值kun:"+kun+",romised:"+romised;}
}

获取Session

获取Session的操作代码:

    @RequestMapping("/setSession")public String setSession(HttpServletRequest request){HttpSession session = request.getSession();session.setAttribute("username","Romised");return "success";}@RequestMapping("/getSession")public String getSession(HttpServletRequest request){HttpSession session = request.getSession(false);if (session!=null){String username = (String)session.getAttribute("username");return "登录用户:"+username;}return "session 为空";}@RequestMapping("/getSession2")public String getSession2(@SessionAttribute(required = false) String username){return "username:"+username;}@RequestMapping("/getSession3")public String getSession3(HttpSession session){String username = (String)session.getAttribute("username");return "登录用户:"+username;}

首先先设置session,然后可以通过三个方法获取session

总结

学习Spring MVC, 其实就是学习各种Web开发需要的注解

@RequestMapping: 路由映射

@RequestParam: 后端参数重命名

@RequestBody: 接收JSON类型的参数

@PathVariable: 接收路径参数

@RequestPart: 上传⽂件

@ResponseBody: 返回数据

@CookieValue: Cookie中获取值

@SessionAttribute: Session中获取值

@RequestHeader: Header中获取值

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

RestController: @ResponseBody + @Controller 返回数据

Cookie Session都是会话机制, Cookie是客户端机制, Session是服务端机制.二通过SessionId 来关联. Spring MVC内置HttpServletRequest, HttpServletResponse两个对象. 需要使⽤时, 直接在方法中添加对应参数即可, CookieSession可以从HttpServletRequest中来获取, 也可以直接使用HttpServletResponse设置Http响应状态码.

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

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

相关文章

转型先锋!G7易流的数字化到底有多牛?

在供应链全球一体化进程中,国内外局势的改变,使得物流行业运力供大于求趋势愈加明显,国内供应链参与者面对内外发展需求和激烈的市场竞争,需要打破同质化竞争的局面,提供具有特色的服务,形成专业、高效、灵…

深度学习500问——Chapter09:图像分割(3)

文章目录 9.8 PSPNet 9.9 DeepLab系列 9.9.1 DeepLabv1 9.9.2 DeepLabv2 9.9.3 DeeoLabv3 9.9.4 DeepLabv3 9.8 PSPNet 场景解析对于无限制的开放词汇和不同场景来说是具有挑战性的。本文使用文中的 pyramid pooling module 实现基于不同区域的上下文集成,提出了PS…

OrangePi AIpro初识及使用大模型GPT-Neo-1.3B测试

OrangePi AIpro介绍 1.1. 开发板简介 Orange Pi AI Pro 开发板是香橙派联合华为精心打造的高性能AI 开发板,其搭 载了昇腾AI 处理器,可提供8TOPS INT8 的计算能力,内存提供了8GB 和16GB 两种版本。可以实现图像、视频等多种数据分析与推理…

[xx点评完结]——白马点评完整代码+rabbitmq实现异步下单+资料,免费

项目所有功能已测,均可以跑通,Jmeter和RabbitMQ也都测了。 项目源码:dianpinghui: 仿黑马点评项目 资料: https://pan.baidu.com/s/1kTCn9PxgeIey90WgM4KRqA?pwdn66b 对佬有帮助可以给个star哈,感谢🌹🌹&#x1f3…

OpenHarmony 实战开发——内核IPC机制数据结构解析

一、前言 OpenAtom OpenHarmony(以下简称“OpenHarmony”)是由开放原子开源基金会(OpenAtom Foundation)孵化及运营的开源项目,目标是面向全场景、全连接、全智能时代,基于开源的方式,搭建一个…

【教学类-58-06】黑白三角拼图06(1页3张彩色黑点卡片,一种宫格36张,适合一个班级一次操作)

作品展示 背景需求 【教学类-58-05】黑白三角拼图05(2-10宫格,每个宫格随机1张-6张,带空格纸,1页3张黑白3张白卡)-CSDN博客文章浏览阅读343次,点赞10次,收藏6次。【教学类-58-05】黑白三角拼图…

玄机平台应急响应—webshell查杀

1、前言 这篇文章说一下应急响应的内容,webshell查杀呢是应急响应的一部分。那么什么是应急响应呢,所谓的应急响应指的是,当网站突然出现异常情况或者漏洞时,能够马上根据实际问题进行分析,然后及时解决问题。 2、应…

新增长100人研讨会:台州制造业企业共探数字驱动下的业绩增长策略

2024年5月17日,纷享销客联合鑫磊压缩机,在台州举办了一场主题为“数字化驱动下的业绩增长策略”的研讨会。本次会议汇聚台州多家制造行业的10余位数字化管理者,共同探讨在数字化转型浪潮中,制造业如何实现业绩的持续增长。 鑫磊压…

计算机二级Access操作题总结——基本操作

基础操作题 设置主键 例:将“线路”表中的“线路ID”字段设置为主键 ①右键单击“线路”表; ②单击【设计视图】; ③鼠标指到表的第一行→“线路ID”处,右键单击; ④单击【主键】 设置有效性规则 例:设…

【Linux】Linux基本指令1

1.软件,OS,驱动 我们看看计算机的结构层次 1.1.操作系统 操作系统是一款做 软硬件管理 的软件 操作系统(计算机管理控制程序)_百度百科 (baidu.com) 操作系统(英语:Operating System,缩写&a…

【全开源】景区手绘地图导览系统源码(ThinkPHP+FastAdmin)

一款基于ThinkPHPFastAdmin开发多地图手绘地图导览系统(仅支持H5),景区升4A5A必备系统,高级版支持全景。 ​打造个性化游览新体验 一、引言:景区导览系统的革新 在旅游业蓬勃发展的今天,景区导览系统成为了提升游客体验的关键。…

java方法负载问题

先介绍一下方法的重载 下面是例子 方法名都为sum而形参是不同的 记住! 是否为重载关系 1在同一个类里面 2形参不同(与返回值无关) 3方法名一样 第一个图为什么错? 答案:虽然在同一个类里面,并且方法名…

深度学习设计模式之组合模式

文章目录 前言一、介绍二、详细分析1.核心组成2.实现步骤3.代码示例4.优缺点优点缺点 5.使用场景 总结 前言 组合模式是将对象组合成树形结构来表现"整体/部分"层次结构,可以更好的实现管理操作。 一、介绍 组合设计模式又叫部分整体模式,将…

Kali : 安装Google Chrome 浏览器和ChromeDriver

目录 一、安装Google Chrome 浏览器 1、下载Google Chrome 2、安装Chrome 3、安装依赖包 二、安装ChromeDriver 1、查看Chrome版本 ​2、下载ChromeDriver 3、解压下载包 4、设置全局访问 5、赋予可执行权限 6、验证chromedriver 7、程序测试 一、安装Google Chrom…

【全开源】场馆预定系统源码(ThinkPHP+FastAdmin+UniApp)

一款基于ThinkPHPFastAdminUniApp开发的多场馆场地预定小程序,提供运动场馆运营解决方案,适用于体育馆、羽毛球馆、兵乒球馆、篮球馆、网球馆等场馆。 场馆预定系统源码:打造高效便捷的预定体验 一、引言:数字化预定时代的来临 …

【多态】(超级详细!)

【多态】(超级详细!) 前言一、 多态的概念二、重写1. 方法重写的规则2. 重写和重载的区别 三、多态实现的条件四、 向上转型五、动态绑定 前言 面向对象的三大特征:封装性、继承性、多态性。 extends继承或者implements实现&…

基于物联网技术的智能家居实训教学解决方案

引言 随着信息技术的飞速发展,,物联网(IoT)已深入至我们生活的每一个角落,从智能家居、智能健康、智能交通到智慧城市,无所不在。物联网技术已成为推动社会进步和产业升级的重要力量。智能家居作为物联网技…

5位机械工程师如何共享一台服务器算力

在数字化浪潮的推动下,算力共享技术正逐渐成为机械工程师们提升工作效率、优化资源配置的重要工具。那么五位机械工程师如何共享一台服务器算力呢? 首先,我们需要了解算力共享的基本概念。算力共享是指通过特定的技术手段,将分散…

机器学习之支持向量机SVM

支持向量机 概念 是supported vector machine(支持向量机),即寻找一个超平面使样本分成两类,且间隔最大分类 分类 硬间隔 若样本线性可分,且所有样本分类正确情况下,寻找最大间隔,即硬间隔 若…

计算机毕业设计 | springboot+vue汽车修理管理系统 汽修厂系统(附源码)

1,项目背景 在如今这个信息时代,“汽车维修管理系统” 这种维修方式已经为越来越多的人所接受。在这种背景之下,一个安全稳定并且强大的网络预约平台不可或缺,在这种成熟的市场需求的推动下,在先进的信息技术的支持下…