【面试题】SpringMVC底层执行流程(工作原理)解析

Java技术 潘老师 3年前 (2021-03-12) 1486 ℃ (0) 扫码查看

SpringMVC底层执行流程是在面试过程中经常被问到一个问题,下面潘老师对SpringMVC的工作原理做一下总结:

SpringMVC的工作流程图:

【面试题】SpringMVC底层执行流程(工作原理)解析

1、相关名词说明

1、前端控制器(DispatcherServlet)

  • 接收请求,响应结果,相当于转发器,中央处理器

2、处理器映射器(HandlerMapping)

  • 根据请求的url查找Handler(处理器/Controller)
  • 可以通过XML和注解方式实现映射。

3、处理器适配器(HandlerAdapter)

  • 按照HandlerAdapter所要求的规则执行Handler

4、处理器Handler(也称之为Controller)

  • 接收用户请求信息,调用业务方法处理请求,也称之为后端控制器

5、视图解析器(ViewResolver)

  • 进行视图解析,把逻辑视图解析成真正的物理视图

6、视图(View)

  • 把数据展现给用户的页面

2、SpringMVC的工作流程说明:

第1步: 请求发送拦截

用户(客户端/浏览器)向服务器发送请求,请求被SpringMVC的前端控制器DispatcherServlet捕获

第2步:调用HandlerMapping,返回执行链

DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping(处理器映射器)获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象(执行链)的形式返回

第3步:调用HandlerAdapter

DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter(处理器适配器)调用

附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(…)方法
第4步:调用Controller

HandlerAdapter经过适配调用具体的Handler处理器(就是我们写的Controller),并将提取Request中的模型数据,填充Handler入参

补充:在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作:
HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息
数据转换:对请求消息进行数据转换。如String转换成Integer、Double等
数据格式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等
数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中
第5步:返回ModelAndView

Controller执行完成会返回一个ModelAndView对象,HandlerAdapter将Controller执行结果ModelAndView返回给DispatcherServlet

第6步:获取ViewResolver

根据返回的ModelAndView,选择一个适合的ViewResolver(视图解析器)返回给DispatcherServlet,然后DispatcherServlet将ModelAndView传给该ViewReslover

注意:该ViewResolver必须是已经注册到Spring容器中的 ViewResolver
第7步:渲染视图

ViewResolver解析后返回具体View(物理视图),DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)

第8步:返回客户端

将渲染结果返回给用户客户端

3、精简版:

【面试题】SpringMVC底层执行流程(工作原理)解析

  • 1. 用户发送请求到前端控制器DispatcherServlet
  • 2. DispatcherServlet收到请求调用处理器映射器HandlerMapping
  • 3. HandlerMapping通过注解或XML找到具体的处理器,并生成执行链返回给DispatcherServlet。
  • 4. DispatcherServlet调用处理器适配器HandlerAdapter
  • 5. HandlerAdapter经过适配调用具体的处理器(Controller)
  • 6. Controller执行完成返回ModelAndView对象
  • 7. HandlerAdapter将Controller执行结果ModelAndView返回给DispatcherServlet
  • 8. DispatcherServlet将ModelAndView传给视图解析器ViewReslover
  • 9. ViewReslover解析后返回具体的视图View
  • 10. DispatcherServlet根据View进行渲染视图
  • 11. DispatcherServlet将页面响应给用户

4、涉及组件分析:

1、前端控制器DispatcherServlet(不需要程序员开发),由框架提供,在web.xml中配置。
作用:接收请求,响应结果,相当于转发器,中央处理器。

2、处理器映射器HandlerMapping(不需要程序员开发),由框架提供。
作用:根据请求的url查找Handler(处理器/Controller),可以通过XML和注解方式来映射。

3、处理器适配器HandlerAdapter(不需要程序员开发),由框架提供。
作用:按照特定规则(HandlerAdapter要求的规则)去执行Controller。

4、控制器Controller(需要工程师开发)
注意:编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler。
作用:接受用户请求信息,调用业务方法处理请求,也称之为后端控制器。

5、视图解析器ViewResolver(不需要程序员开发),由框架提供
作用:进行视图解析,把逻辑视图名解析成真正的物理视图。
SpringMVC框架支持多种View视图技术,包括:jstlView、freemarkerView、pdfView等。

6、视图View(需要工程师开发)
作用:把数据展现给用户的页面
View是一个接口,实现类支持不同的View技术(jsp、freemarker、pdf等)


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/java/2482.html
喜欢 (0)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】