Spring MVC中DispatcherServlet的doService、doDispatch关联的一些组件

我们从访问正常时的调用顺序开始聊起:

       在doService()方法中先把localeResolver、themeResolver以及上下文等放入request的属性中,方便后面有需要的人进行使用。根据flashMapManager获取重定向的原有的请求参数。最后调用doDispatch()方法

       在doDispatch()方法中:

  1. 从HandlerMapping集合中获取HandlerExecutionChain。
  2. 从HandlerAdapter集合中找到支持HandlerExecutionChain的Handler的HandlerAdapter
  3. 把HandlerExecutionChain中HandlerInterceptor数组进行遍历,调用HandlerInterceptor的preHandle()方法判断是否继续执行这个请求。如果某个HandlerInterceptor的preHandle()方法返回false(即,不继续执行),则直接遍历已经遍历过的HandlerInterceptor的afterCompletion()方法,然后这个请求直接返回。
  4. HandlerAdapter调用handle()方法结合HandlerExecutionChain的Handler执行业务流程(例如:Controller的某个方法)得到ModelAndView对象。(注:这里面涉及太多内容,暂不展开描述。)
  5. 当ModelAndView对象不为空,且没有返回视图时,则会去使用RequestToViewNameTranslator对象找对应的视图名称。
  6. 遍历HandlerExecutionChain中HandlerInterceptor数组,调用HandlerInterceptor的postHandle()方法对Handler处理完后处理。
  7. 使用LocaleResolver对象进行国际化处理。
  8. 使用ViewResolver集合进行视图解析。
  9. 遍历HandlerExecutionChain中HandlerInterceptor数组,调用HandlerInterceptor的afterCompletion()方法对Handler处理完并被渲染完成后进行处理。

       一些组件的说明:

  • HandlerMapping

       Handler的映射器,用于将普通的一个方法转换成一个Handler。例如:将@RequestMapping注解的方法转换成一个Handler。

  • HandlerExecutionChain

       处理调用链,包含一个Handler和一个HandlerInterceptor数组

  • HandlerInterceptor

       Handler拦截器。有三个方法,如下:

              1、preHandle()可以拦截请求。

              2、postHandle()在方法处理完后进行处理。

              3、afterCompletion()整个请求完成后再次处理。

  • HandlerAdapter

       Handler适配器,用于支持多种处理器,例如:HttpRequestHandler、Controller的子类、Servlet的子类以及我们最常用的基于@RequestMapping注解的方法。

  • LocaleResolver

       国际化解析器

  • ViewResolver

       视图解析器

  • ThemeResolver

       主题解析器

  • RequestToViewNameTranslator

       用于在未显式提供视图名称时将传入的HttpServletRequest转换为逻辑视图名称。

  • FlashMapManager

       注:笔者暂时只知道用于管理重定向的数据。

  • HandlerExceptionResolver

       异常处理解析器

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值