详解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.rhkb.cn/news/341162.html

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

相关文章

AI 正在攻克难题——赋予计算机嗅觉

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

MySQL 自定义函数(实验报告)

一、实验名称: 自定义函数 二、实验日期: 2024年 6 月 1 日 三、实验目的: 掌握MySQL自定义函数的创建及调用; 四、实验用的仪器和材料: 硬件:PC电脑一台; 配置:内存&#…

OpenCV学习 基础图像操作(十七):泛洪与分水岭算法

原理 泛洪填充算法和分水岭算法是图像处理中的两种重要算法,主要用于区域分割,但它们的原理和应用场景有所不同,但是他们的基础思想都是基于区域迭代实现的区域之间的划分。 泛洪算法 泛洪填充算法(Flood Fill)是一…

中电金信:从规划到落地,中电金信全程陪伴式服务助力泛金融数字化转型

在当前的全球经济和金融发展格局中,金融行业正经历着一场以数字化为核心的快速转型。中国银行业和保险业已经成功探索出一条数字化转型的路径,并积累了丰富的实践经验。然而,泛金融领域则仍处于数字化转型的初期阶段,其转型能力因…

【案例实战】 基于OpenCV实现鹿茸面积计算

学习《人工智能应用软件开发》,学会所有OpenCV技能就这么简单! 做真正的OpenCV开发者,从入门到入职,一步到位! 有人在我得B站答疑群里发了下面的图: 问:如何计算鹿茸最外圈蜡皮面积占整个鹿茸…

AI 入门指南二 :AI提示词(Prompt)

一,提示词的定义 提示词在中文中意为“触发”,在自然语言处理(NLP)的领域,它更接近于一个“心领神会”的概念,而非具有明确定义的术语。 简而言之,提示词是用户对大型语言模型的输入&#xff0…

Centos 7部署NTP

介绍 NTP是Network Time Protocol(网络时间协议)的简称,它是用来通过互联网或局域网将计算机时钟同步到世界协调时间(UTC)的协议。 安装 # yum安装 yum install -y ntp# 离线安装 #下载地址:https://mir…

全球首款AR电脑上线,可投影100英寸屏幕

近日,Sightful公司推出了一款名为Spacetop G1的革命性笔记本电脑,将AR技术与传统笔记本电脑巧妙融合,打造出令人惊叹的全新办公体验。 全球首款AR电脑上线,可投影100英寸屏幕 不同于传统笔记本电脑依赖物理屏幕显示内容&#xff0…

新手如何正确使用代理IP,一篇文章学会,包含实战案例

前言 一、代理IP1.1 什么是代理IP?1.2 代理ip分类1.3 代理IP的作用和优势 二、更换代理IP的方法2.1 重启路由器或光猫2.2 用拨号 vps 重拨更换动态IP代理。2.3 使用浏览器更换IP 三、IPIDEA代理的优势四、提取代理IP4.1 提取步骤4.2 浏览器使用代理IP 五、使用代理I…

c#基础()

学习目标 了解:嵌套类,匿名类,对象初始化器 重点:类的定义以及对象,构造方法,this和static关键字 掌握:面向对象的概念,访问修饰符,垃圾回收 面向对象 面向对象的概…

微信小程序毕业设计-在线订餐系统项目开发实战(附源码+论文)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:微信小程序毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计…

Flink系列一:flink光速入门 (^_^)

引入 spark和flink的区别:在上一个spark专栏中我们了解了spark对数据的处理方式,在 Spark 生态体系中,对于批处理和流处理采用了不同的技术框架,批处理由 Spark-core,SparkSQL 实现,流处理由 Spark Streaming 实现&am…

期刊的分类与级别

在学术界,期刊的分类与级别构成了一个评价学术成果和学者贡献的重要标准,同时也是学术出版与学术交流的基础。然而,对于初涉学者来说,理解期刊的分类与级别可能并不直观。本文旨在提供一个系统性的解释,并阐述为何期刊…

云南区块链商户平台发票助手成品

目录 1 概述2 功能对比3 项目演示图4 核心逻辑4.1智能赋码4.2 解密方法4.3 登录与检测4.4 发票金额大写转换4.5 检查登录是否失效4.6 验证码识别5 演示效果6 项目部署6.1 Web站点部署6.1.1 环境6.1.2 前端6.1.3 后端6.2 Docker部署6.2.1 构建镜像6.2.2 创建容器6.3.3 访问项目域…

基于PHP+MySQL开发的一套游泳馆预约报名小程序开发源码模板

最近新开发了一套游泳馆线上预约报名小程序,其主要功能有预约功能,报名功能,支付功能,个人中心,订单管理,商品管理等等。 游泳馆预约报名小程序系统-运行环境 开发语言:PHP 数据库:M…

54.WEB渗透测试-信息收集- 端口、目录扫描、源码泄露(2)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:53.WEB渗透测试-信息收集-端口、目录扫描、源码泄露(1) 关于源码…

Postman 连接数据库 利用node+xmysql

1、准备nodejs环境 如果没有安装,在网上找教程,安装好后,在控制台输入命令查看版本,如下就成功了 2、安装xmysql 在控制台输入 npm install -g xmysql 3、连接目标数据库 帮助如下: 示例: 目标数据库…

【Redis数据库百万字详解】数据持久化

文章目录 一、持久化1.1、什么是持久化1.2、持久化方式1.3、RDB优缺点1.4、AOF优缺点 二、RDB持久化触发机制2.1、手动触发2.2、自动触发 三、RDB持久化配置3.1、配置文件3.2、配置查询/设置3.3、禁用持久化3.4、RDB文件恢复 四、RDB持久化案例4.1、手动持久化4.2、自动持久化案…

补充一下关于大众点评如何获取cookie的问题

第一步:先打开网站https://www.dianping.com/,然后再用手机号登录,在选择自己要爬的城市 第二步:打开按f12或者右键鼠标选择最下面的检查就打开这个页面了,如果是英文页面就选择network,如果是中文就选择网络 第三步&a…

2024精选热门骨传导耳机推荐,你不会还不挑选吧?

骨传导耳机作为最近两年来才兴起的耳机品类,在街头的出现频率并不是很高,很多人对骨传导耳机不够了解甚至没听说过。骨传导耳机不入耳的设计,安全性、舒适性和稳定性都更高,既然有这么多的优势,那就为大家挑选几款高性…