SpringMVC请求流程 àì夳堔傛蜴生んèń 2021-07-24 22:44 450阅读 0赞 本文内容来自朱要光老师编著的《SpringMVC+MyBatis开发从入门到项目实战》书的第8章。 在学习SpringMVC框架之前,首先需要了解SpringMVC框架的整体请求流程和使用到的API流。SpringMVC的整体请求流程如下: ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Bhbl9qdW5iaWFv_size_16_color_FFFFFF_t_70][] **第一步:**用户单击某个请求路径,发起一个request请求,此请求会被前端控制器(DispatcherServlet)处理。 **第二步:**前端控制器(DispatcherServlet)请求处理器映射器(HandlerMapping)去查找 Handler。可以依据注解或者XML配置去查找。 **第三步:**处理器映射器(HandlerMapping)根据配置找到相应的 Handler(可以包含若干个 Interceptor 拦截器),返回给前端控制器(DispatcherServlet)。 **第四步:**前端控制器(DispatcherServlet)请求处理器适配器(HandlerAdapter)去执行相应的 Handler(常称为Controller )。 **第五步:**处理器适配器(HandlerAdapter)执行 Handler。 **第六步:**Handler 执行完毕后返回给处理器适配器(HandlerAdapter)一个 ModelAndView 对象(SpringMVC底层对象,包括 Model 数据模型和 View 视图信息)。 **第七步:**处理器适配器(HandlerAdapter)接收到 Handler 返回的 ModelAndView 对象后,将其返回给前端控制器(DispatcherServlet)。 **第八步:**前端控制器(DispatcherServlet)接收到 ModelAndView 对象后,会请求视图解析器(ViewResolver) 对视图进行解析。 **第九步:**视图解析器(ViewResolver)根据 View 信息匹配到相应的视图结果,反馈给前端控制器(DispatcherServlet)。 **第十步:**前端控制器(DispatcherServlet)接收到 View 具体视图后,进行视图渲染,将 Model 中的模型填充到 View 视图中的 request 域,生成最终的视图(View)。 **第十一步:**前端控制器(DispatcherServlet)向用户返回请求结果。 以上就是 SpringMVC 的整个请求处理流程,其中用到的组件有:前端控制器(DispatcherServlet)、处理器映射器(HandlerMapping)、处理器适配器(HandlerAdapter)、处理器(Handler)、视图解析器(ViewResolver)、视图(View)。 **流程中出现的各个组件的功能说明如下:** <table> <thead> <tr> <th style="width:251px;">组件</th> <th style="width:548px;">说明</th> </tr> </thead> <tbody> <tr> <td style="width:251px;">前端控制器(DispatcherServlet)</td> <td style="width:548px;">其作用是接收用户请求,然后给用户反馈结果。它的作用相当于一个转发器或中央处理器,控制整个流程的执行,对各个组件进行统一调度,以降低组件之间的耦合性,有利于组件之间的扩展。</td> </tr> <tr> <td style="width:251px;">处理器映射器(HandlerMapping)</td> <td style="width:548px;">其作用是根据请求的URL路径,通过注解或者XML配置,寻找匹配的处理器(Handler)信息。</td> </tr> <tr> <td style="width:251px;">处理器适配器(HandlerAdapter)</td> <td style="width:548px;">其作用是根据映射器找到的处理器(Handler)信息,按照特定规则执行相关的处理器(Handler)。</td> </tr> <tr> <td style="width:251px;">处理器(Handler)</td> <td style="width:548px;">其作用是执行相关的请求处理逻辑,并返回相应的数据和视图信息,将其封装至 ModelAndView 对象中。</td> </tr> <tr> <td style="width:251px;">视图解析器(ViewResolver)</td> <td style="width:548px;"> <p>其作用是进行解析操作,通过 ModelAndView 对象中的 View 信息将逻辑视图名解析成真正的视图 View (如通过一个JSP路径返回一个真正的JSP页面)。</p> </td> </tr> <tr> <td style="width:251px;">视图(View)</td> <td style="width:548px;">其本身是一个接口,实现类支持不同的 View 类型(JSP、FreeMarker、Excel等)。</td> </tr> </tbody> </table> [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Bhbl9qdW5iaWFv_size_16_color_FFFFFF_t_70]: /images/20210724/0898ae8bd9344516bd2765d848eeea24.png
还没有评论,来说两句吧...