DispatcherServlet初始化了9个组件
HandlerMapping
根据request找到相应的处理器Handler和Interceptors,HanddlerMaping接口只有一个方法,getHandler()
HandlerAdapter
一共三个方法,
supports(),判断是否可以使用某个Handler。
handler方法是用来具体使用Handler干活。
getLastModified是获取资源的Last-Modified,Last-Modified是资源最后一次修改的时间。
选择哪个HandlerAdapter的过程在getHandlerAdapter方法中,它的逻辑是遍历所有的Adapter,然后检查哪个可以处理当前的Handler,找到第一个可以处理Handler的Adapter后就停止查找并将其返回。
HandlerAdapte需要注册到Spring MVC的容器中,注册方法和HandlerMapping一样,只要配置Bean就可以。Handler是从HandlerMapping返回的。
HandlerExceptionResolver
根据异常设置ModelAndView,之后再交给render方法进行渲染。render只负责将ModelAndView渲染成页面。
HandlerExceptionResolver只有一个方法,只需要从异常解析出ModelAndView就可以,具体实现可以维护一个异常为key,View为value的Map,解析时直接从Map里获取View,如果Map里没有相应的异常可以返回默认的View。
ViewResolver
ViewResolver用来将String类型的视图名和Locale解析为View类型的视图,ViewResolver接口也非常简单。只定义了:
View resolveViewName(String viewName,Locale locale)throws Exception
RequestToViewNameTranslator
ViewResolver是根据ViewName查找View,但有的Handler处理完之后并没有设置View也没有设置viewName,这时就需要从request获取ViewName了,而如何从request获取view-Name就是RequestToViewNameTranslator要做的事情。
定义了一个getViewName方法,只要通过request获取到viewName就可以了。
LocaleResolver
解析视图需要两个参数:一个是视图名,另一个是Locale。
LocaleResolver用于从request解析出Locale。接口只定义两个方法:
resolveLocale(HttpServletRequest request)
从request中解析出Locale和将特定的Locale设置给某个request。
setLocale(HttpServletRequest request,HttpServletResponse response,Locale locale)
ThemeResolver
解析主题用的。
Spring MVC中又一套主题对应一个properties文件,里面存放着跟当前主题相关的所有资源。
MultipartResolver
用于处理上传请求,处理方法是将普通的request包装成MultipartHttpServletrequest,MultipartHttpServletrequest可以直接调用getFile方法获取到File,如果上传多个文件,还可以调用getFileMap得到FileName-File结构的Map.
这个接口有三个方法,
1.判断是不是上传请求,
2.将request包装成MultipartHttpServlet,处理完后清理上传过程中产生的临时资源。
FlashMapManager
FlashMap主要用在redirect中传递参数,而FlashMapManager用来管理FlashMap的。
该接口有两个方法。
FlashMap retrieveAndUpdate(HttpServletRequest request,HttpServletResponse,response)
void saveOutputFlashMap(FlashMap flash,HttpServletRequest request,HttpServletResponse response)