SpringMVC请求处理流程

Spring MVC请求处理架构图:



        1、DispatchServlet:Spring MVC的核心控制器,作为SpringMVC请求处理以及请求返回的统一入口,进行全局的流程控制。
        
         2、HandlerMapping:处理映射器,根据请求的url映射到对应的处理器(Controller)的某个处理方法上,映射成功后返回一个HandlerExecutionChain对象(处理器执行链),其中包括处理器(Controller)以及拦截器。
               常用的HandlerMapping实现类:
                a、BeanNameUrlHandlerMapping:根据url和Bean的name进行映射找到处理器对象Controller,Bean的name属性定义是已“/"开头,如:
                    <bean name="/user/login.do" class="com.spring.web.controller.LoginController"/>
                    通常Controller要实现Controller接口,实现要处理请求的方法 handleRequest ,与 SimpleControllerHandlerAdapter联合使用。

                b、 SimpleUrlHandlerMapping:和BeanNameUrlHandlerMapping一样根据url和bean的name进行映射,但是功能更强大。

                c、DefaultAnnotationHandlerMapping:spring3.1之前spring2.5后使用,用于根据注解@Controller和@RequestMapping和url进行映射找到对应的处理器Controller和处理方法

                d、RequestMappingHandlerMapping:spring3.1后使用,也是根据注解@Controller和@RequestMapping和url进行映射匹配对象的处理器Controller和处理方法。
                注意:HandlerMapping接口定义一个方法:
                          HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception;
                          由具体的HandlerMapping实现类来实现,其中定义了映射规则,根据映射规则找到合适的处理器对象和指定方法,最终返回一个HandlerExecutionChain 对象。


                DispatchServlet接收到请求后,会根据顺序遍历Spring容器中的HandlerMapping对象(可以注册多个HandlerMapping处理器映射器对象根据每个HandlerMapping对象的映射规则找到对应的处理器Controller和处理方法,如当遍历到RequestMappingHandlerMapping对象时,RequestMapping HandlerMapping对象会遍历容器中的所有使用了@Controller注解的bean,在根据@RequestMapping注解和url进行匹配,找到对应的Controller对象和处理方法。当找到合适的Controller和处理方法后,则停止遍历HandlerMapping对象。
                DispatchServlet请求处理方法doDispatch()方法中实现:
              
            
                 getHandler()方法实现,就是遍历所有HandlerMapping对象,进行处理器映射:


        3、HandlerAdapter:处理器适配器,使用了适配器模式,将处理器映射器找到的处理器对象和处理方法适配成DispatchServlet所需要的请求处理方法(目标接口),这样DispatchServlet调用统一的请求处理接口完成请求处理,处理器适配器HandlerAdapter的功能就是将我们自定义的前端控制器Controller适配成DispatchServlet需要的接口
               根据Spring MVC实现前端控制器的方式不同,则对应的适配器要不同,常见的HandlerAdapter有:
                 a、SimpleControllerHandlerAdapter:要求Controller控制器实现Controller接口,以及实现接口中的方法handleRequest()方法来处理请求,通常和处理映射器BeanNameUrlHandlerMapping或者SimpleUrlHandlerMapping联合使用。

                 b、DefaultAnnotationHandlerAdapter:适配使用注解@Controller和@RequestMapping标识的处理器,spring3.1之前spring2.5后使用,和DefaultAnnotationHandlerMapping联合使用。

                 c、RequestMappingHandlerAdapter:适配使用注解@Controller和@RequestMapping标识的处理器,spring3.1后使用,替换了DefaultAnnotationHandlerAdapter,和RequestMappingHandler Mapping联合使用。
                 注意:handlerAdapter接口中定义了几个方法,有具体处理器适配器来实现:
                            boolean supports(Object handler);
                           判断该适配器能否支持适配当前的处理器handler

                            ModelAndView handle(HttpServletRequest request,HttpServletResponse  response, Object handler) throws Exception;
                           DispatchServlet处理请求所需要的目标接口,在其方法实现中完成适配, 来处理及准备ch处理器方法中的参数及Annotation,最后调用处理器的指定方法.
                
                    DispatchServlet遍历HandlerMapping获取HandlerExecutionChain对象后,遍历spring容器中的所有HandlerAdapter对象,查看当前处理器适配器对象是否能够支持适配找到的处理器对象Controller,能则调用适配器的接口handle()方法处理请求,处理前有拦截器的先执行拦截处理
                     DispatchServlet请求处理方法doDispatch()方法中实现:
                    
                    getHandlerAdapter()方法实现:


        4、ViewResolver:视图解析器,请求处理完后,DispatchServlet会受到请求处理结果(包括模型数据和逻辑视图),DispatchServlet会找到Spring容器中的ViewResolver对象将逻辑视图解析成物理页面文件。注意对于使用了@ResponseBody注解的方法,DispatchServlet会使用合适的消息转换器将请求处理结果转换后返回给前台
        
         5、DispatchServlet找到物理视图文件后,DispatchServlet使用视图模板引擎将模型数据渲染到物理视图页面中,最后DispatchServlet将渲染后的页面返回给前台,请求结束。




参考文档:
  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值