SpringMVC - 运行流程图及分析

在这里插入图片描述在这里插入图片描述
SpringMVC流程描述:
①用户发送请求(同步、异步),请求被Spring前端控制器 DispatcherServlet 获取

②DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping获得HandlerExecutionChain对象并返回

  • 注意:
  • 1.HandlerMapping:HandlerMapping 是由 DispatcherServlet 调用,DispatcherServlet 会从容器中取出所有 HandlerMapping 实例并遍历,让 HandlerMapping 实例根据自己实现类的方式去尝试查找 Handler。
    (此处 HandlerMapping 实例是由SpringMVC的配置文件决定的)
    添加了两种配置会出现不同的HandlerMapping实例
    在这里插入图片描述
    <mvc:default-servlet-handler/>:产生第一个实例
    作用:可以对请求进行判断如果是静态资源,则会跳转到目标资源不再去在控制器中查找对应的映射
    <mvc:annotation-driven/>:产生第三个实例
    作用:加了这个标签之后,会为我们注册三个bean,分别是RequestMappingHandlerMapping,RequestMappingHandlerAdapter,ExceptionHandler,使得我们的@RequestMapping,@RequestParam,@ExceptionHandler这些注解生效,在之前这些都得手动配置才行
  • 2.HandlerExecutionChain:HandlerMapping将找到对应的 Handler,并将 Handler(执行程序)与一堆 HandlerInterceptor(拦截器)封装到HandlerExecutionChain 对象中

③DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter。(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(…)方法)

④提取Request中的模型数据,填充Handler入参,开始执Handler(Controller)。 (在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作)

⑤ Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象

⑥调用拦截器的 postHandler 方法判断是否存在异常(若存在异常会重新获得新的ModelAndView对象)

⑦根据返回的ModelAndView,选择一个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet,将逻辑视图解析为物理视图)

⑧ViewResolver 结合Model和View,来渲染视图

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

发布了120 篇原创文章 · 获赞 16 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43327091/article/details/98620109