【SpringMVC】Nice! 终于有人把SpringMVC讲明白了!

news2024/11/14 20:35:02

1. 前言

在学习到Spring MVC的框架时,我看到了一篇非常好的文章,SpringMVC【入门篇】 - 知乎 (zhihu.com)因为我觉得这篇文章在有些地方讲的比较通俗易懂,而且不失专业,为了让初学者能够很好的理解Spring MVC,做到真正的入门,我特意写一篇文章来讲解这篇文章中写的好的地方,对于那篇文章的一些晦涩难懂的知识,我希望用我的方式深入浅出的讲给大家听。

2. 摘要

本文旨在读者能通过本文知道SpringMVC是什么、干什么用的,在此基础上为了让读者能”知其然知其所以然”,还会介绍SpringMVC执行原理流程是怎么的,为的是让读者能对SpringMVC有更加深刻的认识和理解,最后再通过一个小例子,让读者切身感受下SpringMVC在项目中的作用。

3. SpringMVC概述

3.1 什么是Spring MVC?

SpringMVC就是一个Spring内置的MVC框架。

MVC框架,它解决WEB开发中常见的问题,而且使用简单,与Spring无缝集成。支持 RESTful风格的URL请求。

采用了松散耦合可插拔组件结构,比其他 MVC 框架更具扩展性和灵活性。

3.2 SpringMVC的作用

MVC模式(Model-View-Controller):解决页面代码和后台代码的分离。

3.3 SpringMVC原理

在没有使用SpringMVC之前我们都是使用Servlet在做Web开发。但是使用Servlet开发在接收请求参数,数据共享,页面跳转等操作相对比较复杂。servlet是java进行web开发的标准,既然springMVC是对servlet的封装,那么很显然SpringMVC底层就是Servlet,SpringMVC就是对Servlet进行深层次的封装。

3.4 SpringMVC例子

现在你是一个喜欢哈登的球迷,你想要查看他在2018西部决赛中,7场比赛的得分、助攻和篮板等数据。这时,MVC模式可以帮助我们更好地组织代码,让页面代码和后台代码分离,以便更好地管理和维护。在应用程序中,可以将应用程序划分为3个部分。

首先是模型(Model):模型是关于哈登数据和业务逻辑的部分。它包含了哈登在比赛中的各种数据统计,比如得分、助攻和篮板等信息。模型负责处理数据的存储、检索和更新。

其次是视图(View):视图是展示数据给用户的界面部分。比如,一个展示哈登比赛数据的页面可以显示他的得分、助攻和篮板等统计数据。视图通过图表、表格或其他形式来展示数据,以便用户球迷能够直观地了解哈登的表现。

最后是控制器(Controller):控制器是连接模型和视图的中间人。它接收球迷用户的请求,比如球迷用户想要查看某场比赛的数据,然后从模型中获取相应的数据,并将数据传递给视图进行展示。控制器还可以处理其他操作,比如切换场次、筛选数据等。

通过使用MVC模式,前端开发人员可以专注于设计和实现展示哈登数据的界面,后端开发人员可以专注于处理数据的存储和检索逻辑。这样,开发人员可以更独立地进行工作,提高开发效率,并且修改一个部分的代码不会影响到其他部分的代码。

4.MVC模式的历史

什么是mvc模式?

MVC分别是:模型model(javabean)、视图view(jsp/img)、控制器Controller(Action/servlet)。

C存在的目的就是为了保证M和V的一致性,当M发生改变时,C可以把M中的新内容更新到V中。

4.1 原始MVC 模式

MVC模式最早使用在CS 架构(20世纪70+年代)

下面为原始的MVC模式:

PS:目前web应用中,99%的项目都会使用MVC模式开发。

4.2 WEB开发的MVC

WEB开发从20世纪90+年代开始使用改进的MVC模式。在最原始的MVC上有一些改进

将model更广泛的使用,这样会比原始的mvc好多了。对MVC进行改进的主要是一些优秀的mvc框架,如Struts2,SpringMVC。

可以说,一个WEB项目如果缺少了MVC模式,那无异于一个人缺少了一颗有趣、阳光、乐光的心灵一样。

5. SpringMVC执行流程和原理

01、用户发送出请求被前端控制器DispatcherServlet拦截进行处理。
02、DispatcherServlet收到请求调用HandlerMapping(处理器映射器)。
03、HandlerMapping找到具体的处理器(查找xml配置或注解配置),生成处理器对象及处理器拦截器(如果有),再一起返回给DispatcherServlet。
04、DispatcherServlet调用HandlerAdapter(处理器适配器)。
05、HandlerAdapter经过适配调用具体的处理器(Handler/Controller)。
06、Controller执行完成返回ModelAndView对象。
07、HandlerAdapter将Controller执行结果ModelAndView返回给DispatcherServlet。
08、DispatcherServlet将ModelAndView传给ViewReslover(视图解析器)。
09、ViewReslover解析ModelAndView后返回具体View(视图)给DispatcherServlet。
10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
11、DispatcherServlet响应View给用户。

涉及组件分析:

1、前端控制器DispatcherServlet(不需要程序员开发)由框架提供,在web.xml中配置。
作用:接收请求,响应结果,相当于转发器,中央处理器。
 
2、处理器映射器HandlerMapping(不需要程序员开发)由框架提供。
作用:根据请求的url查找Handler(处理器/Controller),可以通过XML和注解方式来映射。
 
3、处理器适配器HandlerAdapter(不需要程序员开发)由框架提供。
作用:按照特定规则(HandlerAdapter要求的规则)去执行Handler中的方法。
 
4、处理器Handler(也称之为Controller,需要程序员开发)
注意:编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler。
作用:接受用户请求信息,调用业务方法处理请求,也称之为后端控制器。
 
5、视图解析器ViewResolver(不需要程序员开发)由框架提供。
作用:进行视图解析,把逻辑视图解析成真正的物理视图。 
SpringMVC框架支持多种View视图技术,包括:jstlView、freemarkerView、ThymeleafView等。
 
6、视图View(需要工程师开发)
作用:把数据展现给用户的页面
View是一个接口,实现类支持不同的View技术(jsp、freemarker、pdf等)

根据以上分析,SpringMVC需要程序员完成的工作有三个:

(1)配置前端控制器DispatcherServlet

(2)开发后端控制器Handler/Controller

(3)开发视图View

以上的执行过程了解一下就行,因为现在其实不怎么使用Spring MVC了,大家做项目都是用Springboot,因为Springboot太快了,这个SpringMVC配置这配置那太麻烦了。但是我为什么还是列出来呢?因为还是想让读者知道一下有这么一回事儿!

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

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

相关文章

蓝桥杯嵌入式第8届真题(完成) STM32G431

蓝桥杯嵌入式第8届真题(完成) STM32G431 题目 分析和代码 对比第六届和第七届,这届的题目在逻辑思维上确实要麻烦不少,可以从题目看出,这届题目对时间顺序的要求很严格,所以就可以使用状态机的思想来编程,拿到类似题…

EasyExcel分页上传数据

EasyExcel分页上传数据 一、实例 controller上传入口 PostMapping("/upload")ResponseBodyLog(title "导入工单", businessType BusinessType.IMPORT)public AjaxResult uploadFile(HttpServletRequest request, MultipartFile files) throws Exceptio…

并发容器【ConcurentHashMap、CopyOnWriteArrayList、阻塞队列、ArrayBlockingQueue】

并发容器 什么是并发容器?同步容器:并发容器: ConcurrentHashMap结构图JDK1.7结构图JDK1.8结构图 CopyOnWriteArrayList实现原理 并发队列阻塞队列ArrayBlockingQueue 转自极客时间 什么是并发容器? 在JUC包中,有一大部分是关于并发容器的,如Concurr…

mfc110.dll是什么?解决mfc110.dll丢失windows系统常见问题

今天我在打开电脑软件时候,突然报错出现找不到mfc110.dll丢失,无法打开软件,我不知道是什么原因,后面找了很久才找到解决方法,那么mfc110.dll是什么?为什么会丢失和mfc110.dll解决方法是什么,今…

软件测试-造数工具Faker简介

这里的Faker不是英雄联盟的Faker。。。 一、Python Faker 简介 Python Faker 是一个用于生成假数据的Python库。它允许开发者快速创建具有随机特征的虚构数据,这对于测试、填充数据库以及其他需要模拟真实数据的场景非常有用。Python Faker 提供了各种数据类型的生…

93.网游逆向分析与插件开发-游戏窗口化助手-升级经验数据获取的逆向分析

内容参考于:易道云信息技术研究院VIP课 上一个内容:显示游戏数据到小助手UI 码云地址(游戏窗口化助手 分支):https://gitee.com/dye_your_fingers/sro_-ex.git 码云版本号:852c339f5e4c103390b123e0eaed…

知识管理平台有哪些?帮助企业高效发展

在现代商业环境中,知识被认为是推动企业高效发展的关键因素。一个有效的知识管理平台可以帮助企业收集、整理和分享知识,从而提高工作效率,增强竞争优势。接下来,我将向大家推荐三款优秀的知识管理平台:Helplook&#…

JavaEE企业级应用软件开发—Spring框架入门学习笔记(一)

一、认识框架 实际开发中,随着业务的发展,软件系统变得越来越复杂,如果所有的软件都从底层功能开始开发,那将是一个漫长而繁琐的过程。此外,团队协作开发时,由于没有统一的调用规范,系统会出现大…

财报一片大好,为什么硅谷巨头还要裁员?

乘着人工智能的东风,科技巨头再度“碾压”美股,谷歌母公司Alphabet、微软、苹果、亚马逊和Meta四季度业绩均超过华尔街预期。分析师预计,英伟达新一季的的盈利增幅将达到400%,其股价已连续三天创下新高。 但在财报一片大好的同时…

【C语言 - 哈希表 - 力扣 - 相交链表】

相交链表题目描述 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 图示两个链表在节点 c1 开始相交: 题目数据 保证 整个链式结构中不存在环。 注意&#xff0…

92.网游逆向分析与插件开发-游戏窗口化助手-显示游戏数据到小助手UI

内容参考于:易道云信息技术研究院VIP课 上一个内容:游戏窗口化助手的UI设计-CSDN博客 码云地址(游戏窗口化助手 分支):https://gitee.com/dye_your_fingers/sro_-ex.git 码云版本号:e8116af3a7b0186adba…

gdb或者asan生成的coredump文件显示的错误行号和实际的不匹配问题

原因: 是^M这个东西引起的,vim看的时候会少一行多一个^M,但是windos看的时候没有^M,但是会多一行,所以生成的core文件显示的行号和vim看到的不匹配,几个^M就多几行,但是和windos下看文本的行号一…

六轴机器人奇异点

1 奇异点说明 有着6个自由度的KUKA机器人具有3个不同的奇点位置。即便在给定状态和步骤顺序的情况下,也无法通过逆向变换(将笛卡尔坐标转换成极坐标值)得出唯一数值时,即可认为是一个奇点位置。这种情况下,或者当最小的笛卡尔变化也能导致非常大的轴角度变化时,即为奇点位置…

vue3+echarts:Vue中使用echarts从后端获取数据并赋值显示

//由于前后端交互,所以使用axios发送请求 const Count ref(null); //设备种类数值 const Name ref(null); //设备种类名称 //设备种类 饼图 const pieChart () > {const getpieChart echarts.init(document.getElementById("deviceKind"));// 创建图标getpieC…

如何使用Docker部署DashDot服务器仪表盘并结合cpolar实现公网访问

📑前言 本文主要是使用Docker部署DashDot服务器仪表盘并结合cpolar实现公网访问的文章,如果有什么需要改进的地方还请大佬指出⛺️** 🎬作者简介:大家好,我是青衿🥇 ☁️博客首页:CSDN主页放风…

Leetcode—60. 排列序列【困难】

2024每日刷题&#xff08;113&#xff09; Leetcode—60. 排列序列 算法思想 实现代码 class Solution { public:string getPermutation(int n, int k) {vector<int> nums(n);// f[i] i!vector<int> f(n 1, 1); string ans;iota(nums.begin(), nums.end(), 1…

一文带你了解量子计算的力量

作为技术人员&#xff0c;我们知道有有四项技术一直在进行着巨大的进步——区块链、人工智能、物联网和量子计算机。本文中&#xff0c;我们将讨论量子计算机&#xff0c;包括它的含义&#xff0c;如何工作&#xff0c;它们将如何使用等。 什么是量子计算机&#xff1f; 量子计…

蓝桥杯Web应用开发-浮动与定位

浮动与定位 浮动布局比较灵活&#xff0c;不易控制&#xff0c;而定位可以控制元素的过分灵活性&#xff0c;给元素一个具体的空间和精确的位置。 浮动 我们使用 float 属性指定元素沿其容器的左侧或右侧放置&#xff0c;浮动布局常见取值如下&#xff1a; • left&#xff0…

2023:AI疯狂进化年

嘿&#xff0c;大家好&#xff01;让我们一起来回顾一下这疯狂的 2023 年吧&#xff01;记得那个二月初吗&#xff1f;ChatGPT 上线了&#xff0c;然后呢&#xff1f;短短两个月&#xff0c;用户数量就像火箭一样突破了 1 亿&#xff01;这速度&#xff0c;简直比超级赛亚人还快…

谷歌seo搜索引擎优化教程有吗?

教程&#xff0c;教学&#xff0c;指南&#xff0c;这些东西哪里都有&#xff0c;尤其是关于seo相关方面的&#xff0c;这些可以说到处都是&#xff0c;能把谷歌seo这个关键词做上去的&#xff0c;可以说就是实力的证明了&#xff0c;在这里我们说一个无论是老手还是新手都应该…