浅谈SpringMVC

news2024/11/14 17:18:31

什么是MVC模式

MVC:MVC是一种设计模式

MVC的原理图:
在这里插入图片描述

分析:
1:M-Model 模型(完成业务逻辑:有javaBean构成,service+dao+entity)

2:V-View 视图(做界面的展示 jsp,html……)

3:C-Controller 控制器(接收请求—>调用模型—>根据结果派发页面)

springMVC是一个MVC的开源框架,springMVC=struts2+spring,springMVC就相当于是Struts2
加上sring的整合,但是这里有一个疑惑就是,springMVC和spring是什么样的关系呢?这个在百度
百科上有一个很好的解释:意思是说,springMVC是spring的一个后续产品,其实就是spring在原
有基础上,又提供了web应用的MVC模块,可以简单的把springMVC理解为是spring的一个模块
(类似AOP,IOC这样的模块),网络上经常会说springMVC和spring无缝集成,其实springMVC
就是spring的一个子模块,所以根本不需要同spring进行整合。

工作原理:
在这里插入图片描述

  • 1 用户发送请求至前端控制器DispatcherServlet。
  • 2 DispatcherServlet收到请求调用HandlerMapping处理器映射器。
  • 3 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器
    拦截器(如果有则生成)一并返回给DispatcherServlet。
  • 4 DispatcherServlet调用HandlerAdapter处理器适配器。
  • 5 HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
  • 6 Controller执行完成返回ModelAndView。
  • 7 HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。
  • 8 DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
  • 9 ViewReslover解析后返回具体View。
  • 10 DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
  • 11 DispatcherServlet响应用户。

组件说明:
以下组件通常使用框架提供实现:

DispatcherServlet: 作为前端控制器,整个流程控制的中心,控制其它组件执行,统一调度,降低
组件之间的耦合性,提高每个组件的扩展性。

HandlerMapping: 通过扩展处理器映射器实现不同的映射方式,例如:配置文件方式,实现接口
方式,注解方式等。

HandlAdapter: 通过扩展处理器适配器,支持更多类型的处理器。

ViewResolver: 通过扩展视图解析器,支持更多类型的视图解析,例如:jsp、freemarker、pdf、
excel等。

组件:

1:前端控制器DispatcherServlet(不需要工程师开发),由框架提供 作用:接收请求,响
应结果,相当于转发器,中央处理器。有了dispatcherServlet减少了其它组件之间的耦合度。 用户
请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServlet是整个流程控制的中心,由它
调用其它组件处理用户的请求,dispatcherServlet的存在降低了组件之间的耦合性。

2:处理器映射器HandlerMapping(不需要工程师开发),由框架提供 作用:根据请求的url查找
Handler HandlerMapping负责根据用户请求找到Handler即处理器,springmvc提供了不同的映射
器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。

3:处理器适配器HandlerAdapter 作用:按照特定规则(HandlerAdapter要求的规则)去执行
Handler 通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对
更多类型的处理器进行执行。

4:处理器Handler(需要工程师开发) 注意:编写Handler时按照HandlerAdapter的要求去做,
这样适配器才可以去正确执行Handler Handler 是继DispatcherServlet前端控制器的后端控制器,
在DispatcherServlet的控制下Handler对具体的用户请求进行处理。 由于Handler涉及到具体的用
户业务请求,所以一般情况需要工程师根据业务需求开发Handler。

5:视图解析器View resolver(不需要工程师开发),由框架提供 作用:进行视图解析,根据逻辑视图名解析成真正的视图(view) View Resolver负责将处理结果生成View视图,View Resolver首先根
据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将
处理结果通过页面展示给用户。 springmvc框架提供了很多的View视图类型,包括:jstlView、
freemarkerView、pdfView等。 一般情况下需要通过页面标签或页面模版技术将模型数据通过页面
展示给用户,需要由工程师根据业务需求开发具体的页面。

6:视图View(需要工程师开发jsp…) View是一个接口,实现类支持不同的View类型(jsp、
freemarker、pdf…)

核心架构的具体流程步骤如下:
1:首先用户发送请求——>DispatcherServlet,前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行处理,作为统一访问点,进行全局的流程控制;

2:DispatcherServlet——>HandlerMapping, HandlerMapping 将会把请求映射为HandlerExecutionChain 对象(包含一个Handler 处理器(页面控制器)对象、多个
HandlerInterceptor 拦截器)对象,通过这种策略模式,很容易添加新的映射策略;

3:DispatcherServlet——>HandlerAdapter,HandlerAdapter 将会把处理器包装为适配器,从而支
持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器;

4:HandlerAdapter——>处理器功能处理方法的调用,HandlerAdapter 将会根据适配的结果调用真
正的处理器的功能处理方法,完成功能处理;并返回一个ModelAndView 对象(包含模型数据、逻
辑视图名);

5:ModelAndView的逻辑视图名——> ViewResolver, ViewResolver 将把逻辑视图名解析为具体的View,通过这种策略模式,很容易更换其他视图技术;

6:View——>渲染,View会根据传进来的Model模型数据进行渲染,此处的Model实际是一个Map数据结构,因此很容易支持其他视图技术;

7:返回控制权给DispatcherServlet,由DispatcherServlet返回响应给用户,到此一个流程结束。

看到这些步骤我相信大家很感觉非常的乱,这是正常的,但是这里主要是要大家理解springMVC中
的几个组件:

前端控制器(DispatcherServlet):接收请求,响应结果,相当于电脑的CPU。

处理器映射器(HandlerMapping):根据URL去查找处理器。

处理器(Handler):需要程序员去写代码处理逻辑的。

处理器适配器(HandlerAdapter):会把处理器包装成适配器,这样就可以支持多种类型的处理器,类比笔记本的适配器(适配器模式的应用)。

视图解析器(ViewResovler):进行视图解析,多返回的字符串,进行处理,可以解析成对应的页面。

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

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

相关文章

MySQL sql注意点

本文列取了常用但是容易遗漏的一些知识点。另外关键词一般大写,为了便于阅读所以很多小写。也为了给自己查缺补漏。 distinct(去重) 也许你经常对单个字段去重,并且知道不建议用distinct,而是group by,因为…

Cesium 展示——加载 tileset.json 格式的模型数据

文章目录 需求分析需求 已给 tileset.json 文件,现需加载该模型文件, 该模型特点:模型上的各模块均可以进行点击设置,且相机视角拉近后可以看到内部隐藏的物件模块 分析 tileset.json :模型数据【模型加载】方法export function init3dTileLayer (option) {var tilesetMo…

让AI玩一千万次贪吃蛇

如果让人工智能来玩贪吃蛇游戏,会发生什么? 图源:DALLE 目录 贪吃蛇实现 游戏规则 游戏实现 Q学习算法实现 Q学习简介 Q表和Q值 Q学习更新规则 Q学习在贪吃蛇游戏中的应用 整体项目完整代码 运行过程截图 代码分析 环境设置 …

SORA技术报告

文档链接:https://openai.com/research/video-generation-models-as-world-simulators 文章目录 Video generation models as world simulatorsTurning visual data into patchesVideo compression networkSpacetime latent patchesScaling transformers for video …

Linux使用C语言获取进程信息

Linux使用C语言获取进程信息 Author: OnceDay Date: 2024年2月22日 漫漫长路,才刚刚开始… 全系列文章可查看专栏: Linux实践记录_Once_day的博客-CSDN博客 参考文档: Linux proc目录详解_/proc/mounts-CSDN博客Linux下/proc目录介绍 - 知乎 (zhihu.com)Linux内…

该如何选择适合的服务器

服务器,简单来说,就是一个专门用来为其他计算机提供服务的计算机。 我们熟悉的网站、应用和各种在线服务,绝大多数都运行在一台或多台服务器中,所以说服务器是整个网络世界的基石。 服务器一般具有高速的CPU运算、高数据吞吐、可扩…

CrossOver虚拟机软件2024有哪些功能?最新版本支持哪些游戏?

CrossOver由codewaver公司开发的类虚拟机软件,目的是使linux和Mac OS X操作系统和window系统兼容。CrossOver不像Parallels或VMware的模拟器,而是实实在在Mac OS X系统上运行的一个软件。CrossOvers能够直接在Mac上运行Windows软件与游戏,而不…

算法练习-组合【回溯算法】(思路+流程图+代码)

难度参考 难度:困难 分类:回溯算法 难度与分类由我所参与的培训课程提供,但需 要注意的是,难度与分类仅供参考。且所在课程未提供测试平台,故实现代码主要为自行测试的那种,以下内容均为个人笔记&#xff0…

Code-Audit(代码审计)习题记录6-7

介绍: 自己懒得搭建靶场了,靶场地址是 GitHub - CHYbeta/Code-Audit-Challenges: Code-Audit-Challenges为了方便在公网练习,可以随地访问,本文所有的题目均来源于网站HSCSEC-Code Audit 6、习题6 题目内容如下: 源代…

Python+Flask低代码数据融合引擎工具

我用了2年多时间开发了一个低代码数据融合引擎工具 1.整体界面 2.主要功能 1)通过excel文件生成mysql数据表结构及数据保存 说明:功能细节包括(excel文件上传,文件内容预览,建表导入数据),难点在于对excel数据类型判断,并与mysql数据类型对应 2)建立数据表结构并批量导入数据 …

python程序设计基础:字符串与正则表达式

第四章:字符串与正则表达式 4.1字符串 最早的字符串编码是美国标准信息交换码ASCII,仅对10个数字、26个大写英文字母、26个小写英文字母及一些其他符号进行了编码。ASCII码采用1个字节来对字符进行编码,最多只能表示256个符号。 随着信息技…

Ubuntu20.04开启/禁用ipv6

文章目录 Ubuntu20.04开启/禁用ipv61.ipv62. 开启ipv6step1. 编辑sysctl.confstep2. 编辑网络接口配置文件 3. 禁用ipv6(sysctl)4. 禁用ipv6(grub)附:总结linux网络配置 Ubuntu20.04开启/禁用ipv6 1.ipv6 IP 是互联网…

openssl

最新版本3.0 使用 生成自签名的根证书 openssl req -x509 -new -key rootCA.key -days 3650 -out rootCA.crt -subj "/CCA/STCA/LCA/OCA/OUCA/CNCA" pem格式 BASE64,会有PUBLIC KEY表示公钥,PRIVATE KEY表示私钥 根据私钥生成公钥 openss…

工业信息安全的神秘武器——德迅卫士(主机安全)

前言: 服务器作为承载公司业务及内部运转的底层平台,其稳定、安全地运行是公司的正常发展的前提保障。由于主机上运行着各种各样的业务,会存在着各类漏洞及安全问题。攻击者以此为目标,通过对服务器的攻击来获利,给公司…

英文输入法(C 语言)

题目来自于博主算法大师的专栏:最新华为OD机试C卷AB卷OJ(CJavaJSPy) https://blog.csdn.net/banxia_frontend/category_12225173.html 题目 主管期望你来实现英文输入法单词联想功能,需求如下: 依据用户输入的单词前…

Java智慧工地云综合管理平台SaaS源码 助力工地实现精细化管理

目录 智慧工地系统介绍 1、可视化大屏 2、视频监控 3、Wi-Fi安全教育 4、环境监测 5、高支模监测 6、深基坑监测 7、智能水电监测 8、塔机升降安全监测 智慧工地系统功能模块 1、基础数据管理 2、考勤管理 3、安全隐患管理 4、视频监控 5、塔吊监控 6、升降机监…

三分钟快速搭建家纺行业小程序商城:轻松实现电子商务梦想

随着互联网的普及和移动设备的广泛使用,越来越多的商业活动正在向数字化转型。在这个过程中,小程序商城作为一种新型的电子商务模式,正逐渐受到商家的青睐。本文将通过具体步骤,指导读者如何开发一个纺织辅料小程序商城。 一、选择…

Capto 一款适用Mac屏幕录制编辑软件

Capto 是一款功能强大的 Mac 屏幕录制和编辑软件,能够满足用户的多种录制和编辑需求。无论是个人还是专业用户,都可以通过 Capto 实现高质量的屏幕录制和编辑。 首先,Capto 提供了全面的屏幕录制功能,包括全屏、选中区域、甚至是摄…

Nest.js权限管理系统开发(三)环境变量与配置文件

一般来说数据库的配置包含了一些敏感信息,不宜写在代码中提交到远程仓库,所以我们可以将配置写在配置文件中,然后提交 git 时候将生产环境的配置文件其忽略。我们可以新建.env和.env.prod两个文件分别存放开发与生产环境配置,也可以使用YAML等…

Linux【动静态库】

目录 1.软硬链接 1.1软硬链接的语法 1.2理解软硬链接 1.3目录文件的硬链接 1.4应用场景 1.5ACM时间 2.动静态库 2.1认识库 3.制作静态库 3.1静态库打包 3.2静态库的使用 4.制作动态库 4.1动态库打包 4.2动态库的链接使用 4.3动态库的链接原理 总结&#xff1…