【框架篇】Spring MVC 介绍及使用(详细教程)

Spring MVC 介绍

1,MVC 设计模式

MVC(Model-View-Controller)是一种常见的软件设计模式,用于将应用程序的逻辑分离成三个独立的组件:

  1. 模型(Model):模型是应用程序的数据和业务逻辑的表示。它负责处理数据的读取、存储和操作,以及业务规则的处理。模型通常是独立于用户界面的,可以在不同的视图和控制器之间共享和重用。
  2. 视图(View):视图是用户界面的呈现部分,负责展示数据给用户,并接收用户的输入。视图通常是根据模型的数据进行渲染和更新的,它可以是Web页面、图形界面或命令行界面等。
  3. 控制器(Controller):控制器是模型和视图之间的协调者,负责接收用户的输入并根据输入调用相应的模型逻辑。控制器将用户的请求转发给模型进行处理,并将处理结果传递给视图进行展示。控制器还可以处理视图的事件和状态变化。

MVC设计模式的作用如下:

  • 分离关注点:MVC将应用程序的不同关注点(数据、业务逻辑、用户界面)分离开来,使得各个组件可以独立开发、测试和维护,提高了代码的可读性和可维护性。
  • 提高可重用性:通过将数据和业务逻辑抽象成模型,可以在不同的视图和控制器之间共享和重用,减少了重复编写代码的工作量。
  • 改善可扩展性:MVC模式使得各个组件之间的耦合度降低,可以更方便地对应用程序进行扩展和修改,而不会影响其他组件的功能。
  • 改善用户体验:通过将用户界面和业务逻辑分离,MVC模式使得用户界面更加灵活和响应,可以根据不同的需求进行定制和优化。

总的来说,MVC设计模式通过将应用程序的逻辑分离成模型、视图和控制器,提供了一种结构化的开发方式,使得代码更加可读、可维护和可扩展,同时改善了用户体验和开发效率。


2,Spring MVC

2.1,Spring MVC 的介绍

Spring Web MVC是基于Servlet API构建的原始Web框架,也是Spring框架的一部分。它提供了灵活可扩展的MVC架构,方便开发者构建高性能的Web应用程序,并与 Spring 生态系统无缝集成。


2.2,Spring MVC与MVC的关系

Spring MVC与MVC之间的关系的要点总结:

  1. Spring MVC是一个Web框架,而MVC是一种架构模式。Spring MVC是基于MVC模式的实现之一。
  2. MVC是一种将应用程序的不同方面分离的设计模式,包括模型(Model)、视图(View)和控制器(Controller)。
  3. Spring MVC遵循MVC设计模式,将应用程序的不同方面分离开来,通过模型、视图和控制器的协作来处理Web请求。

综上所述,Spring MVC是Spring框架提供的基于MVC架构并继承了Servlet API的Web开发框架。它遵循MVC模式的原则,提供了一套完整的开发流程和特性。通过Spring框架的支持,它能够实现灵活性、可配置性和可扩展性,帮助开发者构建高性能的Web应用程序。

注意:既然是 Web框架,那么当用户在浏览器中输入了url之后,我们的Spring MVC 项目就可以感知到用户的请求。


2.3,Spring MVC 的重要性

现在的项目大部分Java项目都是基于Spring或者Spring Boot的,而Spring 的核心就是Spring MVC。

简单来说,Spring MVC是一切项目的基础,我们以后创建的所有Spring、Spring Boot项目基本都是基于Spring MVC的。

在创建Spring Boot项目时,我们勾选的Spring Web框架其实就是Spring MVC框架。


学习Spring MVC,我们只需要掌握以下3个功能:

1.连接的功能︰将用户(浏览器)和 Java 程序连接起来,也就是访问一个地址能够调用到我们的Spring程序。

2.获取参数的功能︰用户访问的时候会带一些参数,在程序中要想办法获取到参数。

3.输出数据的功能︰执行了业务逻辑之后,要把程序执行的结果返回给用户。


3,Spring MVC 创建和使用

3.1,Spring MVC创建

Spring MVC项目的创建方式有2种,分别为:

  1. 使用Maven项目添加 Spring MVC框架依赖的方式创建
  2. 使用Spring Boot的方式创建Spring MVC 项目

由于第一种方式中的过程较复杂,而第二种方式较为简单,故在2018年以后基本都是使用第二种方式来进行创建Spring MVC项目。

Spring MVC项目创建和Spring Boot 项目创建基本相同,只需要在创建的时候选择Spring Web 框架就相当于创建了Spring MVC项目。


3.2,Spring MVC连接

在Spring MVC项目中实现连接操作之前,我们需要先解决一个问题:何为路由映射?

所谓的路由映射指的是,当用户访问一个url时,将用户的请求对应到程序中某个类的某个方法的过程。

Spring MVC项目实现连接的操作就与路由映射密切相关,实现路由映射可以使用注解。

用来实现注册接口的路由映射的常见注解有@RequestMapping@PostMapping@GetMapping

1,@RequestMapping注解

@RequestMapping注解的基本使用:

image-20230718115800144

@RequestMapping注解的基本用法说明:

  • @RequestMapping注解可以修饰类,也可以修饰方法,当修饰类和方法时,访问的地址是类+方法。
  • @RequestMapping注解可以处理任何HTTP方法的请求,包括GET、POST、PUT、DELETE等。
  • @RequestMapping注解可以使用method属性来进行限定处理请求的HTTP方法。

2,@PostMapping注解

@PostMapping注解的基本使用:

image-20230718115954231

@PostMapping注解的基本用法说明:

  • @PostMapping注解通常用于修饰控制器类中的方法,而不是类本身。
  • @PostMapping注解只可以处理HTTP POST请求映射到处理方法上。

3,@GetMapping注解

@GetMapping注解的基本使用:

image-20230718115626572

@GetMapping注解的基本用法说明:

  • @GetMapping注解通常用于修饰控制器类中的方法,而不是类本身。
  • @GetMapping注解只可以处理HTTP GET请求映射到处理方法上。

4,三类注解区别总结

三类注解区别总结归纳:

  • @RequestMapping是通用的注解,可以修饰类和方法,可用于映射任何类型的HTTP请求。
  • @PostMapping是专用的注解,可修饰方法,但不能修饰类,仅用于映射HTTP POST请求。
  • @GetMapping是专用的注解,可以修饰方法,但不能修饰类,仅用于映射HTTP GET请求。

5,GET请求的映射方式

1)使用@GetMapping注解

image-20230718154156197

2)使用RequestMapping注解

image-20230718154319483

3)使用RequestMapping注解并搭配method属性

image-20230718154439268


3.3,Spring MVC参数获取
1,获取单个参数

获取单个参数的操作代码:

image-20230718162519368

对操作代码进行运行检测:

image-20230718155432895

获取单个参数注意说明:

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

image-20230718161208044

2)如果想明确指定请求中的参数要绑定到处理方法的参数,可以在处理方法的参数前使用@RequestParam注解进行参数重命名操作。

image-20230718161641747

对操作代码进行运行检测:

image-20230718161526257


2,获取多个参数

获取多个参数的操作代码:

image-20230718162345430

对操作代码进行运行检测:

image-20230718162322166

获取多个参数注意说明:

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

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


3,获取普通对象

实体类UserEntity创建:

image-20230718164322566

获取普通对象的操作代码:

image-20230718190310682

对操作代码进行运行检测:

image-20230718190154585

获取普通对象注意说明:

1)Spring MVC 会根据地址栏中输入的参数列表自动实现参数对象的赋值操作。


4,获取Json对象

获取Json对象的操作代码:

image-20230718165942363

对操作代码进行运行检测:

image-20230718170020982

从上述的运行检测中,发现无法接收成功 Json对象,尽管上述代码可以接收获取到普通对象。那怎样才能成功接收Json对象呢?

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

image-20230718170310419

对操作代码进行运行检测:

image-20230718170239525


5,获取基础URL参数

获取基础URL参数的操作代码:

image-20230718192055963

对操作代码进行运行检测:

image-20230718192024823

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

1)使用@PathVariable 注解进行获取URL中的基础参数操作。

2)基础URL里面的参数是 ?之前的参数,而不是 ?之后的参数(参数列表内的参数)。

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


6,获取上传文件

获取上传文件的操作代码:

image-20230718193626497

对操作代码进行运行检测:

image-20230718193902056

打开指定的路径进行验证文件是否成功上传,观察到文件成功上传并且文件名为指定的img.png,说明文件成功上传。

image-20230718193543078

上述操作虽然能够实现获取上传文件,但也存在明显的不足缺陷,那就是指定文件路径中只能有一个文件。为什么会出现这种情况呢?

那是因为文件名已经在代码中确定了,只能为img.png,当上传成功一个文件后,后续成功上传的文件会覆盖之前的文件。

那若想解决这个覆盖问题,实现指定文件路径中有多个文件,该怎么办呢?

出现上述这种情况的原因是文件名确定死了,所以我们就只需要从文件名入手即可,也就是让文件名不确定死。

如果想让文件名不确定死,我们可以使用UUID.randomUUID进行随机生成一组32位数的16进制数字所构成的文件名。

获取上传文件的改进代码:

image-20230718195012320

对操作代码进行运行操作后,再打开指定文件目录下,发现不会出现上述情况了,能够实现指定文件路径中有多个文件。

image-20230718195148265


7,获取Header

获取Header的操作代码:

image-20230718200259225

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

image-20230718200130991

获取Header的注意事项:

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


8,获取Cookie

获取Cookie的操作代码:

image-20230718201420225

手动构造Cookie操作流程:

image-20230718201252285

获取Cookie的操作代码运行结果:

image-20230718201339910
获取Cookie的注意事项:

1)使用@CookieValue 注解进行获取Cookie的操作,该注解里的参数的参数名要与Cookie列表里面的Cookie名要一致。


9,获取Session

获取Session的操作代码:

image-20230718203214286

存储Session的操作代码运行检测:

image-20230718202938270

获取Session的操作代码运行检测:

image-20230718203049319

获取Session的注意事项:

1)使用@SessionAttribute 注解进行获取Session的操作,该注解里的参数的参数名要与Session列表里面的Session名要一致。

2)存储Session操作没有与之对应的注解,只有获取Session操作才有对应的注解@SessionAttribute 进行简便获取。

3)Cookie能通过手动添加,但Session不能手动添加,只能通过代码进行Session创建后添加,故可知Session比Cookie更安全。


3.4,Spring MVC数据输出

1,返回静态页面

静态页面代码:

image-20230718204039730

返回静态页面操作代码:

image-20230718204157330

注意说明:如果index.html不加/,表示在当前目录下查找该文件,如果加了/,表示在根目录下查找该文件。

操作代码运行后,具进行查看输出数据是否为静态网页。

image-20230718204002139


2,返回文本数据

返回文本数据操作代码:

image-20230718210759540

操作代码运行后,通过抓包工具进行查看输出数据的格式是否为文本数据格式。

image-20230718210704852


3,返回Json对象

返回Json对象操作代码:

image-20230718210212707

操作代码运行后,通过抓包工具进行查看输出数据的格式是否为Json对象格式。

image-20230718211102775


结语

这就是本期博客的全部内容啦!如果有什么其他的问题无法自己解决,可以在评论区留言哦!

最后,如果你觉得这篇文章写的还不错的话或者有所收获的话,麻烦小伙伴们动动你们的小手,给个三连呗(点赞??,评论,收藏??),多多支持一下!各位的支持是我最大的动力,后期不断更新优质的内容来帮助大家,一起进步。那我们下期见!

在这里插入图片描述


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

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

相关文章

qt vs ios开发应用环境搭建和上架商店的记录

qt 下载链接如下 https://download.qt.io/new_archive/qt/5.14/5.14.2/qt-opensource-mac-x64-5.14.2.dmg 安装选项全勾选就行,这里特别说明下qt5.14.2/qml qt5.14.2对qml支持还算成熟,但很多特性还得qt6才行,这里用qt5.14.2主要是考虑到服…

windows 极速安装 Linux (Ubuntu)-- 无需虚拟机

1. 安装 WSL 和 Ubuntu 打开命令行,执行 WSL --install -d ubuntu若报错,则先执行 WSL --update2. 重启电脑 因安装了子系统,需重启电脑才生效 3. 配置 Ubuntu 的账号密码 打开 Ubuntu 的命令行 按提示,输入账号,密…

AI编程工具使用技巧——通义灵码

活动介绍通义灵码1. 理解通义灵码的基本概念示例代码生成 2. 使用明确的描述示例代码生成 3. 巧妙使用注释示例代码生成 4. 注意迭代与反馈原始代码反馈后生成优化代码 5. 结合生成的代码进行调试示例测试代码 其他功能定期优化生成的代码合作与分享结合其他工具 总结 活动介绍…

C#表达式和运算符

本文我们将学习C#的两个重要知识点:表达式和运算符。本章内容会理论性稍微强些,我们会尽量多举例进行说明。建议大家边阅读边思考,如果还能边实践就更好了。 1. 表达式 说到表达式,大家可能感觉有些陌生,我们先来举个…

pycharm+pyside6+desinger实现查询汉字笔顺GIF动图

一、引言 这学期儿子语文期末考试有一道这样的题目: 这道题答案是B,儿子做错了选了C。我告诉他“车字旁”和“车”的笔顺是不一样的,因为二者有一个笔画是不一样的,“车字旁”下边那笔是“提”,而“车”字是“横”&am…

2018年西部数学奥林匹克几何试题

2018G1 在 △ A B C \triangle ABC △ABC 中, O O O 为外心, M M M 为边 B C BC BC 的中点, 延长 A B AB AB 交 ( A O M ) (AOM) (AOM) 于点 D D D, ( A O M ) (AOM) (AOM) 交 A C AC AC 于点 E E E. 求证: E C D M ECDM ECDM. 证明: 设点 G G G 为 △ A B C …

C++ QT中Q_Q和Q_D是什么?怎么使用?本质是什么?C++仿写

1.QT中Q_Q和Q_D是什么? Q_Q可以得到外部可以访问的类指针Q_D可以得到内部封装,外部不可达的类指针2. 怎么使用? 上代码 APrivate.h#pragma once #include <QtCore>class A;class APrivate {Q_DECLARE_PUBLIC(A) public:APrivate();~APrivate(); public:void APrivate…

宇泰串口卡驱动在Ubuntu22.04编译、安装汇总

从官网下载驱动官网地址 上传到Ubuntu, 目录结构如下&#xff1a; 驱动源代码: 驱动代码是基于开源项目编译来的 编译路径不能有中文路径&#xff0c;否则可能有类似错误 源码是基于Linux2.3内核编译&#xff0c;我当前是6.8.0-51&#xff0c;数据结构有升级&#xff0c;需要调…

WOA-CNN-GRU-Attention、CNN-GRU-Attention、WOA-CNN-GRU、CNN-GRU四模型对比多变量时序预测

WOA-CNN-GRU-Attention、CNN-GRU-Attention、WOA-CNN-GRU、CNN-GRU四模型对比多变量时序预测 目录 WOA-CNN-GRU-Attention、CNN-GRU-Attention、WOA-CNN-GRU、CNN-GRU四模型对比多变量时序预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 基于WOA-CNN-GRU-Attention、…

广播网络实验

1 实验内容 1、构建星性拓扑下的广播网络,实现hub各端口的数据广播,验证网络的连通性并测试网络效率 2、构建环形拓扑网络,验证该拓扑下结点广播会产生数据包环路 2 实验流程与结果分析 2.1 实验环境 ubuntu、mininet、xterm、wireshark、iperf 2.2 实验方案与结果分析…

人参t2t基因组-文献精读100

Telomere-to-telomere reference genome for Panax ginseng highlights the evolution of saponin biosynthesis 人参的端粒到端粒参考基因组揭示皂苷生物合成的进化 摘要 人参&#xff08;Panax ginseng&#xff09;是中药的代表性植物之一&#xff0c;并在全球范围内广泛使…

深度学习基础--GRU学习笔记(李沐《动手学习深度学习》)

前言 GRU是RNN模型的升级版&#xff0c;也是LSTM的弱化版&#xff0c;学习GRU也是为了学习LSTM做准备&#xff0c;这一篇文章是学习笔记&#xff1b;RNN&#xff1a;RNN讲解参考&#xff1a;李沐动手学习深度学习&#xff1b;欢迎收藏加关注&#xff0c;本人将会持续更新。 文…

unity学习17:unity里的旋转学习,欧拉角,四元数等

目录 1 三维空间里的旋转与欧拉角&#xff0c;四元数 1.1 欧拉角比较符合直观 1.2 四元数 1.3 下面是欧拉角和四元数的一些参考文章 2 关于旋转的这些知识点 2.1 使用euler欧拉角旋转 2.2 使用quaternion四元数,w,x,y,z 2.3 使用quaternion四元数,类 Vector3.zero 这种…

Three.js计算机与反射艺术相结合

反射-CSDN直播反射映象https://live.csdn.net/v/460090 一.CSS部分 body {margin: 0;padding: 0;height: 100vh;overflow: hidden;display: flex;align-items: center;justify-content: center;background: black; }二.JS部分 //wccchallenge - reflection //reflection for…

PDF文件提取开源工具调研总结

概述 PDF是一种日常工作中广泛使用的跨平台文档格式&#xff0c;常常包含丰富的内容&#xff1a;包括文本、图表、表格、公式、图像。在现代信息处理工作流中发挥了重要的作用&#xff0c;尤其是RAG项目中&#xff0c;通过将非结构化数据转化为结构化和可访问的信息&#xff0…

从AI生成内容到虚拟现实:娱乐体验的新边界

引言 在快速发展的科技时代&#xff0c;娱乐行业正经历一场前所未有的变革。传统的娱乐方式正与先进技术融合&#xff0c;创造出全新的沉浸式体验。从AI生成的个性化内容&#xff0c;到虚拟现实带来的身临其境的互动场景&#xff0c;科技不仅改变了我们消费娱乐的方式&#xf…

pthread_create函数

函数原型 pthread_create 是 POSIX 线程&#xff08;pthread&#xff09;库中的一个函数&#xff0c;用于在程序中创建一个新线程。 #include <pthread.h>int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *a…

《offer 来了:Java 面试核心知识点精讲 -- 原理篇》

在 Java 面试的战场上&#xff0c;只知皮毛可不行&#xff0c;面试官们越来越看重对原理的理解。今天就给大家分享一本能让你在面试中脱颖而出的 “武林秘籍”——《offer 来了&#xff1a;Java 面试核心知识点精讲 -- 原理篇》。 本书详细介绍了Java架构师在BAT和移动互联网公…

家政服务小程序,打造智慧家政新体验

春节即将来临&#xff0c;家政市场呈现出了火热的场景&#xff0c;大众对家政服务的需求持续增加。 近年来&#xff0c;家政市场开始倾向数字化、智能化&#xff0c;借助科学技术打造家政数字化平台&#xff0c;让大众在手机上就可以预约家政服务&#xff0c;减少传统家政市场…

vim练级攻略(精简版)

vim推荐配置: curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh 0. 规定 Ctrl-λ 等价于 <C-λ> :command 等价于 :command <回车> n 等价于 数字 blank字符 等价于 空格&#xff0c;tab&am…