学习笔记——springMVC架构

springMVC是一个MVC模式的实现,至于具体什么是MVC大佬们写了多很详细的博文给出一些链接:

链接1

SpringMVC框架“简单”执行流程

1、首先用户(或浏览器)发送请求到服务端。

2、在服务端配置好的的前端控制器DispatcherServlet就会接受这个请求,这个前端控制器很重要,他负责把用户的请求,有序的送给各个springMVC的组件来执行(当然这个前端控制器也是一个springmvc的一个组件)。

3、当数据都处理好之后(比如:如果用户请求访问一个页面,而这个页面需要在后台做一些处理,比如给页面添加时间、用户信息等),前端控制器DispatcherServlet会将处理好的数据传给用户(或者浏览器)。

 

 

 

提示:从上面看前端控制器DispatcherServlet是个很厉害的类整个springMVC的流程都有他参与。那么是不是只要有他就能完成整个springmvc的流程了呢?当然不是,上面只是介绍了最简单的流程。下面会分析下前端控制器DispatcherServlet到底做了什么。

SpringMVC框架“详细”执行流程

 

 

 

 从上面的图可以看到在整个流程的几个调用(2、4、8、10、11)中都是由前端控制器来决定的,这样看来这个前端控制器更像是一个中央控制器,但是不知道为什么看了好多博文都称他为前端控制器。而从这个前端控制器的名称和继承来看,他本质上也是一个Servlet

 

下面详细看一下步骤:

1、用户从前端发送请求,可能是请求一个html页面、可能是请求一个jsp页面等等等等等。

2、前端控制器DispatcherServlet接收到这个请求,然后调用处理器映射器HandlerMapping。这又是一个springmvc的组件。

这个处理器映射器HandlerMapping会根据用户的URL请求去找指定的Handler(也就是处理器,也就是我们编写的Controller类)并生成这个处理器的实例,但此时不会执行这个Handler处理器,他是根据我们配置的映射来指定的处理器的,比如我门用注解写的@RequestMapping("/login")。

3、处理器在找到指定的Handler处理器,如果有拦截器也会一起被找到,在这步处理器映射器返回给前端映射器一个HandlerExecutionChain,看名字处理执行链,就知道他是按照顺序执行一系列的拦截器和处理器的。这里可以不对这个类进行特别了解,只要知道其中有一些处理器handler拦截器就行了。

4、这一步前端控制器通过处理器适配器HandlerAdapter来执行刚才从处理器映射器那里获得的处理器。这里为什么不用前端控制器直接盗用处理器,而使用处理器适配器来执行处理器呢?springMVC这里使用了适配者模式

5、处理器适配器调用处理器。

6、调用的处理器返回ModelAndView对象。这个对象包含和View视图信息和Model数据信息。

7、处理器适配器又把刚才得到的ModelAndView给前端控制器。

8、前端控制器将刚刚获得的ModelAndView对象传给视图解析器ViewResolver让他来处理。

9、视图解析器返回View给前端控制器。

10、前端控制器对获得的视图View进行解析(将ModelAndView中的模型数据填充到视图中)。

11、将解析后的View返回给用户。

 

至此,整个流程走完,辛苦前端控制器了。

 

SpringMVC的架构——组件

上面说了框架的执行流程,显然,只有一个前端控制器这个组件是不够的,还用到了其他很多springMVC组件,下面来看些这些组件,混个脸熟。

(这个器那个器的,刚开始看的时候头都大了)

 

1、前端控制器DispatcherServlet

这是个主要负责转发请求、响应结果、处理执行流程啊等等,中央处理器一样别的组件都围着他转。他说调用哪个组件就调用哪个组件。

继承关系:

 

 看到了吧,他也是servelt的一些高级实现。

 

2、处理器映射器HandlerMapping

是个接口,用来处理映射请求的。

他有一些实现,继承关系如下:

 

 

3、处理器适配器HandlerAdapter

这也是个接口,负责执行处理器Handler,也就是Controller。这时适配器设计模式的应用,这样要想执行更多类型的处理器的时候,值需要拓展适配器就行了,其他代码不用动。

实现类和继承关系:

 

 

 

4、视图解析器ViewResolver

他也是个接口,用来生成View的,比如freeMakerView、jspView等。。

实现类和继承关系:

 

 

5、View视图接口

上面的视图解析器是生成的视图View,这个View接口又不同的实现类,用于实现不同的视图。也就是返回给用户的数据,可能不一定是可视化的html、jsp类似的结果,也可能是xml或者json这种数据。

实现类和继承关系如下:

 

 如上面,又freeMaker的实现、JstlView的是的实现、又xxxJsonView的实现。用于返回给用户不同的数据结果。

 

转载于:https://www.cnblogs.com/Eastry/p/11536916.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值