SpringMVC基本原理详解

MVC是什么、SpringMVC是什么、能帮我们做什么?

带着问题去学习:

SpringMVC是帮助我们开发Web项目的,下面讲简单分析, 我们为要用到SpringMVC?以及 MVC是什么?SpringMVC是什么?能帮我们做什么?

1、最初的web

我们最初编写web程序的时候, 其实就是在编写servlet和jsp, 其中如何配置servlet还记得吗, 需要配置一个servlet的名字,和背后相应具体的类, 以及它的URL。 它的含义是什么呢? 就是我们在浏览器访问这个URL的时候 ,请求会交给这个servlet来处理(其中有重写方法等一堆过程),然后servlet处理后, 会返回一个结果, 这个结果可以是绑定另外一个servlet的URl或者是一个JSP视图, 说明白点URL和Servlet是绑定到一起的,上面就是一个web请求的过程, 用户请求URl, 这个URL会有自己配套的servlet来处理请求, 处理后会回复相应。 说到这里我们看到了一个关键词URL和servlet的处理代码。web程序的核心就是这了,URL 、和URL绑定的Servlet、以及处理请求的代码 ,但也是我们每次都要编写的。

2、存在的问题

了解到上面的web程序流程之后, 我们就会发现存在的一些问题, 就是我们需要事先安排好, URl和servlet之间的对应关系, 显然这是一个重复的过程, 我们使用框架的目的就是来简化我们的开发, 使得我们的注意力全部放在业务代码的开发上来。相应的SpringMVC就是来帮助我们处理web开发的URl和具体处理请求代码的这个过程。

3、什么是MVC

又回头问一下:什么是MVC?了解过上面的执行流程之后, 大概对MVC就清楚了。 C, 就是我们所说的控制器,它就是负责把我们的URl和具体的处理相应的代码连接起来, 组合一个控制器(控制web的url请求和业务代码的匹配) V , 就是我们的视图意思, 用来显示我们的处理结果, 比如:我们访问淘宝, 输入信息后, 登陆的时候会出现一个界面, 这个界面就是 V 。那什么是 M ?比如:我们在淘宝的界面搜索商品, 系统会返回给我什么信息呢?站在程序员的角度来看, 返回的就是一个html代码、和一堆前端样式以及一堆的数据,然后上面的一堆东西在组装成我们看到的界面。返回的数据就是 MVC中的M, 模型(数据模型)。MVC这三块就已经讲解清楚。它彻底把web开发分模块化, 方便我们实际的开发过程。 而写代码时候的MVC是一种 代码的架构, 是为了程序之间解耦和的, 它既不是设计模式也不是MVC的思想, 其实就是一种为了解耦和的构建代码架构。

结论:

MVC是一种很流行的框架,通过把Model,View,Controller分离,把较为复杂的web应用分成逻辑清晰的几部分,是为了简化开发,减少出错。还是为了组内开发人员之间的配合。总之就是一种分层工作的办法。

4、Spring MVC能帮我们做什么事情

SpringMVC是一款web层(表现层的框架,用于连接前端和后端, 把后端的数据送到前端显示, 接受从前端传送过来的数据)

SpringMVC的核心功能就是处理前端的请求, 并做相应。 其本身是基于servlet开发的, 本身拥有一个基本的前端处理器, 需要在web.xml中配置。只有配置了这个前端处理器, springmvc才算是生效了, 能够拦截我们的web请求。

基本流程:用户发送请求-》前端控制器拦截后-》处理器处理-》处理后的结果返回给前端拦截器-》拦截器把处理结果交给jsp-》jsp解析后交给前端处理器-》前端处理器把最终的结果返回给用户。

SpringMVC的执行过程

在这里插入图片描述

SpringMVC的架构

在这里插入图片描述

SpringMVC的详细执行过程

1、发起请求到前端控制器(DispatcherServlet),该控制器中就会过滤出你哪些请求可以访问该servlet哪些不可以,就是url-pattern的作用,并且会加载springmvc.xml配置文件

2、前端控制器会找到HandlerMapping(处理器映射器),通过HandlerMapping完成url到controller映射的组件,通俗点讲,就是将在springmvc.xml中配置的或者注解的url与对应的处理类找到并进行存储,实际上是用一个map集合来保存这种映射关系,map<url,handler>; 这样,就将所有的这种映射关系都记录保存了下来

3、通过HandlerMapping有了这些映射关系,并且找到了url对应的处理器,HandlerMapping就会将其处理器(图中红色标明的handler)返回,在其返回之前,在加上很多的拦截器,其作用后面进行讲解,这里知道在返回的处理器前会有很多的拦截器即可。

4、DispatcherServlet拿到了handler之后,找到HandlerAdapter(处理器适配器),通过它来访问处理器,并且执行处理器。

这里会有人会有疑惑,为什么需要处理器适配器,我们都获得了处理类了,直接调用不就行了吗?

不行,因为我们只知道处理类在哪里,并不知道执行处理类中的哪个方法,其实也就是不知道处理类是通过哪种方式创建出来的,实现HttpRequestHandler?还是注解方式,或者是其他方式,我们不知道,所以需要HandlerAdapter来帮我们确认调用哪个方法。

5、执行处理器(这个是我们自己写的代码)

6、处理器会返回一个ModelAndView对象给HandlerAdapter

7、通过HandlerAdapter将ModelAndView对象返回给前端控制器(DispatcherServlet)

8、前端控制器请求视图解析器(ViewResolver)去进行视图解析,根据逻辑视图名解析成真正的视图(jsp),其实就是将ModelAndView对象中存放视图的名称进行查找,找到对应的页面形成视图对象。

9、返回视图对象到前端控制器。

10、视图渲染,就是将ModelAndView对象中的数据放到request域中,用来让页面加载数据的。

11、通过第8步,通过名称找到了对应的页面,通过第10步,request域中有了所需要的数据,那么就能够进行视图渲染了。最后将其返回。

SpringMVC组件说明

1、前端控制器

DispatcherServlet 是整个流程的控制中心,相当于中央处理器,接收请求,响应结果,降低各个组件的耦合度,提高组件的扩展性。 DispatcherServlet 接受用户的请求, 然后调用HandlerMapping处理器映射器, 去映射相应的处理器。

2、处理器映射器

HandlerMapping处理器映射器根据具体的URL去匹配不同的处理器 Handler, 它会返回一条执行链, 执行链是由一些拦截器和我们的处理器组成,在执行我们的处理器之前, 会先执行拦截器。 它就是负责存放URL和处理器之间的映射关系的。另外可以通过扩展处理器映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。

3、处理器适配器

当我们知道要处理的类在那里之后, 就需要处理器适配器来进行适配了。适配的目的就是为了确定具体的处理器是什么, 它是采用的那种处理方式。

4、处理器

自己编写的代码。

5、视图解析器

它是将我们配置的逻辑视图名, 自动解析为具体的物理视图。它把具体的视图返回给前端处理器, 前端处理器进行视图渲染, 把model中的数据放到request的请求域中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值