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配置这配置那太麻烦了。但是我为什么还是列出来呢?因为还是想让读者知道一下有这么一回事儿!