看图理解过程:
1、用户发送请求 到 前端控制器DispatcherServlet:
提示:DispatcherServlet的作用:接收请求,调用其他组件处理请求,响应结果,相当于转发器、中央处理器,是整个流程控制的中心。
2、前端控制器DispatcherServlet接收到请求后调用处理器映射器HandlerMapping:
处理器映射器HandlerMapping,查找处理器(Handler)。
3、处理器映射器(HandlerMapping),根据xml配置、注解自行查找对应的具体处理器Handler,然后生成了处理器对象及处理器拦截器,一并返回给DispatcherServlet。
4、前端控制器DispatcherServlet根据返回内容,调用处理器适配器HandlerAdapter。
5、处理器适配器HandlerAdapter去调用自定义处理器类(即到具体的Controller类)。
6、在MVC模式下,一般Controller层根据实际需求,调用service层,Service根据需求调用DAO,DAO进行数据库访问DB(增删改查),DB数据库返回操作结果给DAO,DAO返回处理结果给Service,Service返回结果给Controller,最终从自定义处理器中获取到返回结果,Controller类会把这个结果返回给处理器适配器HandlerAdapter。
7、处理器适配器HanderAdapter将该结果生成一个ModelAndView(模型视图)对象返回给前端控制器Dispatcher Servlet;
8、前端控制器DispatcherServlet将ModelAndView传给视图解析器ViewReslover。
9、视图解析器ViewReslover将得到的参数从逻辑视图转为物理视图,并返回给前端控制器DispatcherServlet。
10、前端控制器DispatcherServlet调用物理视图进行渲染并返回。
11、前端控制器DispatcherServlet渲染完成后,即展示回前端页面。
注:SpringMVC的执行流程,涉及到的是具体的底层代码逻辑,因为存在很多概念以及底层知识点其实我个人是不太理解的,例如处理器映射器是如何从配置中或者注解中得到一个映射结果,追寻至对应自定义的handler处理器类(也就是如果追寻至controller)等等,记录这个文章是因为在面试的时候许多面试官会问,而且在实际开发中,大部分情况下不会去思考或利用到这个知识点,就可能会很难理解。
个人还是比较建议有机会以及累积到一定的程度,去看下底层源码,尝试读懂会比较好理解。