SpringMVC执行的具体流程是什么?如果你去看官方文档,里面的英语真的让人头皮发麻,当你点击翻译时,当spring单词被翻译成春天,你就会发现大事不妙,这篇文章将用最直白的话讲解一下SpringMVC的流程。
SpringMVC框架是基于组件方式执行流程的,SpringMVC里有许多不同的组件,都有着各自独特的功能。就像工厂流水线做鞋子一样,有的部分做鞋底,有的部分做鞋带,各司其职。
SpringMVC有哪些组件:
1,DispatcherServlet:前端控制器
2,HandlerMapping:处理器映射器
3,HandlAdapter:处理器适配器
4,Handler:处理器
5,View Resolver:视图解析器
这么多器,看的着实让人头疼。别慌,下面慢慢给你解释明白。
作用:
是指挥中心,作为接受客户端发来request请求,相当于转发器,由
它调用其它组件处理用户的请求。
白话:就像一个老板,一会让这个部门给他生产一架飞机,一会让那个部门生产一辆汽车。
作用:
它就是我们开发中要编写的具体业务控制器,对具体的用户请求进行处理。
例子:Handler处理器其实就是我们写controller层里的方法,比如下面这个图就是一个Handler处理器。
作用:
根据请求的url找到对应的Handler处理器。因为有很多个Handler处理器,所以当Handler处理器的映射路径和请求的url里的相对应,就代表是我们要找的Handler了。
SpringMVC提供了不同的映射器,通过不同映射方式实现,例如:配置文件、实现接口、注解等。最常用的就是注解。
例子:
如果你的请求url是:http://localhost:8085/stu/findAll
他会根据/stu/findAll找到对应的Handler处理器。也就会找到下图这个handler处理器。
作用:
因为Handler会有各种各样的,所以需要适配器。HandlerAdapter负责Handle在执行的时候,会适配参数的绑定、转换器、该调用哪一个视图解析器等等。
白话:他就像共享充电宝,既带有苹果数据线,也带有安卓数据线。当你充苹果手机肯定会选择苹果线,充安卓手机选择安卓线。
作用:
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的页面
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(前端处理器)响应用户。
如果有任何错误或不正,欢迎指出。当然,你有任何疑问或不懂的地方,可以在下面评论提出。对你有帮助的话,点个赞呗。