Spring MVC的主要组件 -- java面试
Handler: 也就是处理器。它直接对应着MVC的C也就是Controller,它的具体表现形式有很多,可以是类,也可以是方法。在Controller层中@RequestMapping
标注的所有方法都可以看成是一个Handler,只要可以实际处理请求的就可以是Handler。
-
HandlerMapping
initHandlerMappings(context)
,处理器映射器,根据用户请求的资源uri来查找Handler。在SpringMVC中会有很多请求,每个请求都需要一个Handler处理,接收到请求后具体要使用哪个Handler处理,这就是HandlerMapping需要做的事。 -
HandlerAdapter
initHandlerAdapters(context)
,处理器适配器。因为SpringMVC中的Handler可以是任意的形式,只要能处理请求就可以,但是Servlet需要的处理方法的结构是固定的,都是以request和response为参数的方法。如何让固定的Servlet处理方法调用灵活的Handler来进行处理,这就是HandlerAdapter要做的事。
Handler是用来干活的工具,HandlerMapping是根据需要干的活找到响应的工具,HandlerAdapter是使用工具干活的人。
-
HandlerExceptionResolver
initHandlerExceptionResolvers(context)
。 根据异常设置ModelAndView,之后再交给render方法渲染。 -
ViewResolver
initViewResolvers(context)
,ViewResolver用来将String类型的视图名和Locale解析为View类型的视图。 -
RequestToViewNameTranslator
nitRequestToViewNameTranslator(context)
,ViewResolver是根据ViewName查找View,但有的Handler处理完成后并没有设置View也没有设置ViewName,这时需要从request获取ViewName了,如何从request获取ViewName就是RequestToViewNameTranslator要做的事。 -
LocaleResolver
initLocaleResolver(context)
,解析视图需要两个参数,一是视图名,另一个Locale。LocaleResolver用于从request解析出Locale,Locale就是zh-cn之类,表示一个区域,有了这个就可以对不同区域的用户显示不同的结果。 -
ThemeResolver
initThemeResolver(context)
,用于解析主题。 -
MultipartResolver
initMultipartResolver(context),用于处理上传请求。 -
FlashMapManagerr
initFlashMapManager(context),用来管理FlashMap的,FlashMap主要用在redirect中传递参数。