【JavaEE】Spring Web MVC详解

news2024/11/15 12:22:12

一.基本概念.

  1. 什么是Spring Web MVC?

官方链接: https://docs.spring.io/spring-framework/reference/web/webmvc.html

  • 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), but it is more commonly known as “Spring MVC”.
  • 翻译过来就是:Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。它的正式名称“Spring Web MVC”来自其源模块的名称(Spring-webmvc),但它通常被称为"Spring MVC".
  1. 什么是Servlet呢?

Servlet 是一种实现动态页面的技术. 准确来讲Servlet是⼀套 Java Web 开发的规范,或者说是一套Java Web 开发的技术标准. 只有规范并不能做任何事情,必须要有人去实现它. 所谓实现 Servlet 规范,就是真正编写代码去实现 Servlet 规范提到的各种功能,包括类、方法、属性等. Servlet 规范是开放的,除了 Sun 公司,其它公司也可以实现 Servlet 规范,目前常见的实现了Servlet 规范的产品包括Tomcat、Weblogic、Jetty、Jboss、WebSphere 等,它们都被称为"Servlet 容器". Servlet 容器用来管理程序员编写的 Servlet 类.

  1. 什么是MVC

MVC 是 Model View Controller 的缩写,它是软件工程中的一种软件架构设计模式,它把软件系统分为模型、视图和控制器三个基本部分.
在这里插入图片描述

  • View(视图) 指在应用程序中专门用来与浏览器进行交互,展示数据的资源.

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

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

  • 举个例子:
    比如去公司面试, 我们到了公司之后, HR会给我们安排会议室, 根据候选人去通知不同的部门来安排面试, 面试结束后, 由HR来告诉面试结果
    在这个过程中, HR就是View(视图), 负责接待候选人, 并告知候选人面试结果不同的部门, 就是Controller(控制器), HR根据候选⼈来选择对应的部门来进行面试, 面试官 就是Model层, 来处理面试这个事情.

二.相关注解的使用.

1.建立连接

@RequestMapping

  • 在 Spring MVC 中使用 @RequestMapping 来实现 URL 路由映射 ,也就是浏览器连接程序的作用. 它是用来注册接口的路由映射.
  • @RequestMapping 既可修饰类,也可以修饰方法 ,当修饰类和方法时,访问的地址是类路径 + 方法路径.
    • @RequestMapping标识一个类:设置映射请求的请求路径的初始信息
    • @RequestMapping标识一个方法:设置映射请求请求路径的具体信息
@RequestMapping("/request")
@RestController
public class RequestController {
    @RequestMapping("/hello")
    public String say(){
        return "Hello Spring MVC";
    }
}

访问地址:http://127.0.0.1:8080/request/hello

:

  1. @RequestMapping 的URL 路径最前面加不加 / (斜杠)都可以, Spring程序启动时, 会进行判断, 如果前面没有加 / ,Spring会拼接上一个"/".
  2. @RequestMapping即支持GET请求,也支持POST请求.也可以使用@GetMapping或者@PostMapping来指定求情方式

2.传参

1.传递单个参数.

	@RequestMapping("/test1")
    //传参的名称必须和后端方法声明的参数名称一致,如果不一致就会接收不到
    public String test1(String name){
        return name;
    }

使用PostMan进行测试:
在这里插入图片描述

2.传递多个参数.

	@RequestMapping("/test4")
    public String test4(String name,Integer age){
        return "age: "+age+",name: "+name;
    }

使用PostMan进行测试:在这里插入图片描述

3.传递对象.

	@RequestMapping("/test5")
    public String test5(Student student){
        return "student: "+student;
    }

使用PostMan进行测试:
在这里插入图片描述

4.后端参数重命名(后端参数映射).

  • 某些特殊的情况下,前端传递的参数 key 和我们后端接收的 key 可以不一致,比如前端传递了一个time 给后端,而后端是使用 createtime 字段来接收的,这样就会出现参数接收不到的情况,如果出现这种情况,我们就可以使用 @RequestParam 来重命名前后端的参数值.
	@RequestMapping("test6")
    public String test6(@RequestParam("name") String userName){
        //此时name是一个必传参数,不传就会报错
        return "name: "+userName;
    }

使用PostMan进行测试:
在这里插入图片描述

  • 使用 @RequestParam 进行参数重命名时, 请求参数只能和 @RequestParam 声明的名称一致, 才能进行参数绑定和赋值.
  • 使用 @RequestParam 进行参数重命名时, 参数就变成了必传参数.

** 非必传参数的设置 **

	@RequestMapping("test7")
    public String test7(@RequestParam(value = "name",required = false) String 	userName){
        return "name: "+userName;
    }

5.传递数组.

	@RequestMapping("/test8")
    public String test8(String[] array){
        return Arrays.toString(array);
    }

测试结果:
在这里插入图片描述

6.传递集合.

  • 集合参数:和数组类似, 同一个请求参数名有为多个, 且需要使用@RequestParam 绑定参数关系
  • 默认情况下,请求中参数名相同的多个值,是封装到数组. 如果要封装到集合,要使用@RequestParam 绑定参数关系
	@RequestMapping("/test9")
    public String test9(@RequestParam List<String> list){
        return "list: "+list;
    }

测试结果:
在这里插入图片描述

6.传递JSON数据.

什么是JSON

JSON:JavaScript Object Notation 【JavaScript 对象表示法】
JSON是⼀种轻量级的数据交互格式. 它基于 ECMAScript (欧洲计算机协会制定的js规范)的⼀个子集,采用完全独立于编程语言的文本格式来存储和表示数据.
简单来说:JSON就是一种数据格式, 有自己的格式和语法, 使用文本表示一个对象或数组的信息, 因此JSON本质是字符串. 主要负责在不同的语言中数据传递和交换.

JSON语法.
  • JSON的语法:

    • 数据在键值对(Key/Value) 中
    • 数据由逗号 , 分隔
    • 对象用 {} 表示
    • 数组用 [] 表示
    • 值可以为对象, 也可以为数组, 数组中可以包含多个对象
  • JSON的两种结构

    • 对象: 大括号 {} 保存的对象是一个无序的 键值对 集合. 一个对象以左括号 { 开始, 右括号 } 结束。每个"键"后跟⼀个冒号 : ,键值对使用逗号 , 分隔
    • 数组: 中括号 [] 保存的数组是值(value)的有序集合. 一个数组以左中括号 [ 开始, 右中括号 ] 结束,值之间使用逗号 , 分隔。
  • JSON优点

    • 简单易用: 语法简单,易于理解和编写,可以快速地进行数据交换
    • 跨平台⽀持: JSON可以被多种编程语言解析和生成, 可以在不同的平台和语言之间进行数据交换和传输
    • 轻量级: 相较于XML格式, JSON数据格式更加轻量级, 传输数据时占用带宽较小, 可以提高数据传输速度
    • 易于扩展: JSON的数据结构灵活,支持嵌套对象和数组等复杂的数据结构,便于扩展和使用
    • 安全性: JSON数据格式是一种纯的本格式,不包含可执行代码, 不会执行恶意代码,因此具有较高的安全性
      举个例子:
{
 	"squadName": "Super hero squad",
 	"homeTown": "Metro City",
 	"formed": 2016,
 	"secretBase": "Super tower",
 	"active": true,
 	"members": [
 	{
 		"name": "Molecule Man",
 		"age": 29,
 		"secretIdentity": "Dan Jukes",
 		"powers": ["Radiation resistance", "Turning tiny", "Radiationblast"]
 	}, {
 		"name": "Madame Uppercut",
 		"age": 39,
 		"secretIdentity": "Jane Wilson",
 		"powers": ["Million tonne punch", "Damage resistance", "Superhuman reflexes"]
 	}, {
 		"name": "Eternal Flame",
 		"age": 1000000,
		 "secretIdentity": "Unknown",
 		"powers": ["Immortality", "Heat Immunity", "Inferno", "Teleportation", "Interdimensional travel"]
 	}]
}
传递JSON对象.
  • 接收JSON对象, 需要使用 @RequestBody 注解
  • RequestBody: 请求正文,意思是这个注解作用在请求正文的数据绑定,请求参数必须在写在请求正文中.
	@RequestMapping("/m7")
    public String test10(@RequestBody Student student){
        return "student: "+student;
    }

使用Postman来发送json请求参:
在这里插入图片描述
使用Fiddle抓包工具观察传输的类型:
在这里插入图片描述

7.获取URL中参数@PathVariable

path variable: 路径变量. 和字面表达的意思⼀样, 这个注解主要作用在请求URL路径上的数据绑定

	@RequestMapping("/article/{articleId}")
    public String test11(@PathVariable("articleId") Integer articleId){
        return "接受到参数了 articleId: "+articleId;
    }

测试的URL:
http://127.0.0.1:8080/request/article/14/%E5%BC%A0%E4%B8%89
在这里插入图片描述

8.上传文件@RequestPart

	@RequestMapping("test13")
    public String test13(@RequestPart("file") MultipartFile file){
        String originalFilename = file.getOriginalFilename();
        return "接收到文件名称了: originalFilename: "+originalFilename;
    }

测试结果:
在这里插入图片描述

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

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

相关文章

人工智能—美国加利福尼亚州房价预测实战

引言 在当今快速发展的房地产市场中&#xff0c;房价预测已成为一个至关重要的领域。它不仅关系到投资者的决策&#xff0c;也直接影响到普通购房者的生活质量。特别是在美国加利福尼亚州&#xff0c;这个以其高房价和房地产市场的波动性而闻名的地方&#xff0c;准确的房价预…

【面试八股总结】Redis数据结构及底层实现

一、五种基本数据结构 Redis 提供了丰富的数据类型&#xff0c;常见的有五种数据类型&#xff1a;String&#xff08;字符串&#xff09;&#xff0c;Hash&#xff08;哈希&#xff09;&#xff0c;List&#xff08;列表&#xff09;&#xff0c;Set&#xff08;集合&#xff0…

每日一练:攻防世界:miao~

给了一张jpg图片 没发现什么特别&#xff0c;放到winhex中查看也没思路。 放到kali里面foremost分离文件试试&#xff0c;结果分离出个wav音频文件 直接放到 audycity看看频谱图 发现字符串&#xff0c;但是没有其他信息。可能是密钥之类的。到这里我就卡住了&#xff0c;看…

Java15-API

目录 Math类 概述 常见方法 练习 System类 概述 常见方法 Runtime 概述 常见方法 Object类 概述 常见方法 一.演示toString方法 二.演示equals方法 三、对象克隆 分类&#xff1a; 浅克隆 深克隆&#xff1a; Objests类 概述 常见方法 BigInteger类 概…

chrome 录制器及性能分析工具的使用

需求背景&#xff1a; 对比不同VPN方案网络延迟的差异。 验证工具&#xff1a; chrome浏览器自带的录制器、性能插件可以完美的解决这个问题。 注意&#xff1a;录制的操作都在当前页面&#xff0c;不存在新开标签页的场景 解决方案&#xff1a; 使用chrome录制器&#xf…

了解指标体系1:指标是大数据开发中的关键要素

在大数据开发的过程中&#xff0c;指标体系是一个至关重要的概念。本文将介绍什么是指标&#xff0c;为什么它们如此重要&#xff0c;以及如何在大数据项目中有效地构建和应用指标体系。 目录 什么是指标&#xff1f;指标的类型为什么指标如此重要&#xff1f;如何构建有效的指…

朴素贝叶斯机器学习算法:从基础到高级

文章目录 一、说明二、从一个简单例子入手2.1 简单示例2.2 朴素贝叶斯算法的直觉解释 三、在训练阶段&#xff0c;朴素贝叶斯内部会发生什么&#xff1f;3.1 朴素贝叶斯如何处理数值数据&#xff1f;3.2 如果数据分布不是高斯分布怎么办&#xff1f;3.3 朴素贝叶斯的数值稳定性…

linux配置Vnc Server给Windows连接

1. linux 安装必要vnc server和桌面组件 sudo apt -y install tightvncserversudo apt install xfce4 xfce4-goodies2. linux 配置vncserver密码 #bash vncserver参考: https://cn.linux-console.net/?p21846#google_vignette 3. 将启动桌面命令写入.vnc/xstartup # .vnc/x…

06-操作元素

在前面的文章中重点介绍了一些元素的定位方法&#xff0c;定位到元素后&#xff0c;就需要操作元素了。本篇通过简单案例来介绍app应用中的一些常用操作。 一、案例介绍 下面列表中有四个字典&#xff0c;每个字典中的num1代表第一个操作数&#xff0c;num2代表第二个操作数&a…

2024.6.16周报

目录 摘要 ABSTRACT 一、文献阅读 一、题目 二、摘要 三、创新点 四、模型架构 五、文章解读 1、Introduction 2、实验 3、结论 二、代码复现 1、模型代码 2、实验结果 三、总结 摘要 本周我阅读了一篇题目为《Contaminant Transport Modeling and Source Att…

第九届信也科技杯全球AI算法大赛——语音深度鉴伪识别参赛A榜 0.968961分

遗憾没有进复赛&#xff0c;只是第41名。先贴个A榜的成绩。A榜的前三十名晋级&#xff0c;个个都是99分的大佬&#xff0c;但是B榜的成绩就有点低了&#xff0c;应该是数据不同源的问题&#xff0c;第一名0.78分。官网链接&#xff1a;语音深度鉴伪识别 官方baselin:https://g…

XHS-Downloader是一款小红书图片视频下载工具

这款软件可以提取账号发布、收藏、点赞作品链接&#xff1b;提取搜索结果作品链接、用户链接&#xff1b;下载小红书作品信息&#xff1b;提取小红书作品下载地址&#xff1b;下载小红书无水印作品文件&#xff01; &#x1f4d1; 功能清单 ✅ 采集小红书图文 / 视频作品信息…

项目五 OpenStack镜像管理与制作

任务一 理解OpenStack镜像服务 1.1 •什么是镜像 • 镜像通常 是指一系列文件或一个磁盘驱动器的精确副本 。 • 虚拟机 所使用的虚拟磁盘&#xff0c; 实际上是 一种特殊格式的镜像文件 。 • 云 环境下尤其需要 镜像。 • 镜像 就是一个模板&#xff0c;类似于 VMware 的虚拟…

每日复盘-202406019

今日关注&#xff1a; 20240619 六日涨幅最大: ------1--------300868--------- 杰美特 五日涨幅最大: ------1--------300462--------- 华铭智能 四日涨幅最大: ------1--------300462--------- 华铭智能 三日涨幅最大: ------1--------300462--------- 华铭智能 二日涨幅最大…

使用MAT定位线上OOM问题

目录 1.什么是OOM? 2.发生的可能原因 3.常见类型的OOM 4.如何定位问题&#xff1f; 4.1 获取dump文件 4.2 MAT分析 「Leak Suspects」泄露嫌疑 「Histogram」直方图 「dominator tree」支配树 「thread overview」线程视图 目录 1.什么是OOM? 2.发生的可能原因 …

MPLS TE简介

定义 MPLS TE&#xff08;MPLS Traffic Engineering&#xff09;&#xff0c;即MPLS流量工程。MPLS流量工程通过建立基于一定约束条件的LSP隧道&#xff0c;并将流量引入到这些隧道中进行转发&#xff0c;使网络流量按照指定的路径进行传输&#xff0c;达到流量工程的目的。 …

vue3+element ui +ts 封装周范围选择器

vue3element ui ts 封装周范围选择器 在业务场景中&#xff0c;产品需要在页面中使用周范围选择器&#xff0c;我们在使用ant-design的时候里面是有自带的&#xff0c;但是在emement中只有指定周的范围选择器&#xff1a; 这个是ant-design的周范围选择器 这个是element ui 的…

C# WinForm —— 36 布局控件 GroupBox 和 Panel

1. 简介 两个可以盛放其他控件的容器&#xff0c;可以用于把不同的控件分组&#xff0c;一般不会注册事件 GroupBox&#xff1a;为其他控件提供可识别的分组。可通过Text属性设置标题&#xff1b;有边框&#xff1b;没有滚动条&#xff0c;一般用于按功能分组 Panel&#xff…