SpringMVC执行原理,清晰易懂。

SpringMVC执行的具体流程是什么?如果你去看官方文档,里面的英语真的让人头皮发麻,当你点击翻译时,当spring单词被翻译成春天,你就会发现大事不妙,这篇文章将用最直白的话讲解一下SpringMVC的流程。

基本了解

SpringMVC框架是基于组件方式执行流程的,SpringMVC里有许多不同的组件,都有着各自独特的功能。就像工厂流水线做鞋子一样,有的部分做鞋底,有的部分做鞋带,各司其职。

五个组件

SpringMVC有哪些组件:
1,DispatcherServlet:前端控制器
2,HandlerMapping:处理器映射器
3,HandlAdapter:处理器适配器
4,Handler:处理器
5,View Resolver:视图解析器

这么多器,看的着实让人头疼。别慌,下面慢慢给你解释明白。

各个组件的作用

1,DispatcherServlet

作用:
是指挥中心,作为接受客户端发来request请求,相当于转发器,由
它调用其它组件处理用户的请求。

白话:就像一个老板,一会让这个部门给他生产一架飞机,一会让那个部门生产一辆汽车。

2,Handler

作用:
它就是我们开发中要编写的具体业务控制器,对具体的用户请求进行处理。

例子:Handler处理器其实就是我们写controller层里的方法,比如下面这个图就是一个Handler处理器。在这里插入图片描述

3,HandlerMapping

作用:
根据请求的url找到对应的Handler处理器。因为有很多个Handler处理器,所以当Handler处理器的映射路径和请求的url里的相对应,就代表是我们要找的Handler了。

SpringMVC提供了不同的映射器,通过不同映射方式实现,例如:配置文件、实现接口、注解等。最常用的就是注解。

例子:
如果你的请求url是:http://localhost:8085/stu/findAll
他会根据/stu/findAll找到对应的Handler处理器。也就会找到下图这个handler处理器。
在这里插入图片描述

4,HandlerAdapter

作用:
因为Handler会有各种各样的,所以需要适配器。HandlerAdapter负责Handle在执行的时候,会适配参数的绑定、转换器、该调用哪一个视图解析器等等。

白话:他就像共享充电宝,既带有苹果数据线,也带有安卓数据线。当你充苹果手机肯定会选择苹果线,充安卓手机选择安卓线。

5,ViewResolver

作用:
View Resolver 负责将处理结果生成 View 视图,View Resolver 根据逻辑视图名解析成物理视图名(具体的页面地址),生成 View 视图对象。

具体讲解:
1,handler(处理器)里返回的String、View、还是ModelAndView最后都会转换为一个ModelAndView对象。ViewResolver(视图解析器)则会接收到这个ModelAndView对象。

2,,ViewResolver(视图解析器)会把接受到的View(视图名称)解析为InternalResourceView对象,InternalResourceView会把接受的Model存放到对应的request域中,然后通过RequestDispatcher在客户端把请求转发到目标URL

(什么是ModelAndView,他是一个类,可以设置你要返回的视图名和Model。Model里可以封装数据。)

ModelAndView modelAndView = new ModelAndView();
        //设置视图名称
        modelAndView.setViewName();
        //设置你要封装的数据
        modelAndView.addObject();

下面是我没使用ModelAndView这个类,直接写了一个Model,而且返回的是一个String,但Handler(处理器)会把它转换为一个ModelAndView对象返回给其他组件:
在这里插入图片描述
View Resolver视图解析器的配置:
在这里插入图片描述
根据handler里的视图名,和ViewResolver视图解析器配置的后缀包名,组成了我们要转发的目标URL:http://localhost:8085/list.jsp

我们看下图,因为是转发,所以url不会变,但页面已经变成了list.jsp的页面
在这里插入图片描述
在这里插入图片描述

整体流程

先上一张图,这个就是SpringMVC执行的流程。
在这里插入图片描述

1,DispatcherServlet(前端控制器)接受request。

2,DispatcherServlet(前端控制器)调用HandlerMapping(处理器映射器),根据request的url找到对应的Handler(处理器)。

3,HandlerMapping(处理器映射器)将找到的Handler(处理器)返回给DispatcherServlet(前端处理器)。

4,DispatcherServlet(前端控制器)调用HandlAdapter(处理器适配器),让它执行Handler(处理器)。

5,HandlAdapter(处理器适配器)执行Handler(处理器)。

6,Handler(处理器)将返回的ModelAndView给HandlAdapter(处理器适配器)。

7,HandlAdapter(处理器适配器)将得到的ModelAndView返回给DispatcherServlet(前端处理器)。

8,DispatcherServlet(前端控制器)调用ViewResolver(视图解析器),让它解析ModelAndView里的逻辑视图名,也就是解析ModelAndView里面的视图名。

9,View Resolver(视图解析器)返回具体的视图给DispatcherServlet(前端处理器)。

10,DispatcherServlet(前端处理器)对视图进行渲染,也就是将ModelAndView里的Model(模型数据)填充到视图里。

11,DispatcherServlet(前端处理器)响应用户。


如果有任何错误或不正,欢迎指出。当然,你有任何疑问或不懂的地方,可以在下面评论提出。对你有帮助的话,点个赞呗。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值