dispatcherServlet

initStrategies(ApplicationContext context)

  1. initMultipartResolver(context)//初始化上下文解析器
  2. initLocaleTesolver(context)//初始化本地解析器
  3. initThemeResolver(context)//初始化主题解析器
  4. initHandlerMapping(context)//初始化处理器映射器,将请求映射都处理器
  5. initHandlerAdapterd(context)//初始化处理适配器
  6. initHandlerExceptionResolverd(context)//初始化处理器异常解析器,如果执行中遇到异常,
    将交给 HandlerExceptionResolver来解析
    7、initRequestToViewNameTranslator(context);//初始化到视图解析器
    8、initViewResolver(context)//初始化视图解析器,通过viewResolver解析视图名到具体实现
    9、initFlashMapManager(context)//初始化flash映射器

DispatcherServlet程序清单

1. 本地化解析器:只允许一个实例 ;
1-查找名位localResolver类型位LocalResolver的bean实例,
2-为找到则默认使用 AcceptHeaderLocaleResolver.
2. 主题解析器:只允许一个实例
1-查找名为 themeResolver类型名称位ThemeResolver的Bean实例,
2-未找到则默认使用 FixedTheneResolver
3. 处理器映射器2个:允许多个实例 先类型后名??
1-如果detectAllHandlerMappings的属性位true(默认为true),则根据类型匹配机制查找spring容
其中 所有类型为HanderMapping的bean,将他们作为该类型组件
2-如果detectAllHandlerMappings的属性位false,则查找名为handlerMapping、类型为
HandlerMappring的bean作为该类型组件
3-如果都没找到则使用BeanNameUrlHandlerMapping实现类创建该类型组件
4. 处理器适配器3个:允许多个实例
1-如果detectAllHandlerAdapters的属性位true(默认为true),则根据类型匹配机制查找spring容
其 中 所有类型为HandlerAdapter的bean,将他们作为该类型组件
2-如果detectAllHandlerAdapters的属性位false,则查找名为handlerAdapter、类型为
HandlerAdapter的bean作为该类型组件
3-如果都没找到则使用DispatcherServlet.properties配置文件中指定的三个实现类分别创建一个
适配器,并添加到适配器列表中
5. 异常处理器3个:允许多个实例
1-如果detectAllHandlerExceptionResolvers的属性位true(默认为true),则根据类型匹配机制查
找spring容其中 所有类型为HandlerExceptionResolver的bean,将他们作为该类型组件
2-如果detectAllHandlerExceptionResolvers的属性位false,则查找handlerExceptionResolver、
类型为 HandlerExceptionResolver的bean作为该类型组件
3-如果都没找到则使用DispatcherServlet.properties配置文件中默认的实现类。
注意:该文件中没有对应处理器异常解析器的默认实现类,用户可以自定义处理器异常解析
器,并添加到该文件中
6. 视图名称解析器:只允许一个实例
1-查找名为viewNameTranslator、实现类为RequestToViewNameTranslator的bean
2-未找到则默认使用DefalutRequestToViewNameTranslator作为该类型组件
7. 视图解析器:允许多个实例
1-如果detectAllViewResolvers的属性位true(默认为true),则根据类型匹配机制查
找spring容其中 所有类型为lViewResolver的bean,将他们作为该类型组件
2-如果detectAllViewResolvers的属性位false,则查找viewResolvers、
类型为 ViewResolver的bean作为该类型组件
3-未找到则默认使用DispatcherServlet.properties配置文件中默认实现类
InternalResourceViewResolver作为该类的组件

8. 文件上传解析器:只允许一个实例
1-查找名为muliiparResolver、类型为MuliiparResolver的bean作为组件
2-如果用户未在上下文中显示定义MuliiparResolver类型的组件,则DispatcherServlet将不加载
该类型组件
9. falshMap映射管理器
1-查找名为FalshMaoManager、类型为SessionFalshMaoManager的bean作为该类组件,用于
管理FlashMap.即数据存储在HttpSession中
这9中逐渐都实现了org.springframework.core.Ordered接口,可以通过Ordered的属性设置优先
级的执行顺序,数字越小优先级越高

DispatchcerServlet流程

  1. 用户发送请求,被spring的DispatcherServlet截获

  2. DispatcherServlet对请求URL进行解析,得到URI,然后根据URI调用HandlerMapping获取该 Handler配置的所有相关对象,包括Handler对象和其拦截器,这些对象会被封装到HandlerExceptionChain对象中返回

  3. DispatcherServlet根据获得的Handler,选择一个合适的HandlerAdapter,HandlerAdapter会找到对应的Handler,来处理实际的请求。

  4. 提取请求中的模型数据,开始中Handler(Controller),填充Handler入参过程
    1-消息转换:将请求消息(JSOM\XML)等转换成对象,将对象转换成指定格式的响应消息
    2-数据转换:将请求消息进行数据转换,如String转Integer
    3-数据格式转换:将请求消息进行数据格式转换,如字符串转日期或数字
    4-数据验证:验证数据的有效型性:如长度、格式,验证结果存到BindingResult或Error中

  5. Handler执行完成后,向DispatcherServler返回一个ViewAndModel对象

  6. 根据ViewAndModel对象找到一个合适的ViewResolver返回给DispatcherServlet

  7. ViewResolver结合view和Model来渲染视图

  8. 将视图渲染结果返回给客户


①. 客户端请求提交到DispatcherServlet
②. 由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller
③. DispatcherServlet将请求提交到Controller(也称为Handler)
④. Controller调用业务逻辑处理后,返回ModelAndView
⑤. DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图
视图负责将结果显示到客户端

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值