拼多多1面:Spring MVC的主要组件有哪些?
前言
SpringMVC已经成为目前最主流的MVC框架之一,并且随着Spring3.0的发布,全面超越Struts2,成为最优秀的MVC框架。它通过一套注解,让简单的Java类成为处理请求的控制器(web层---Servlet),而无须实现任何接口。同时它还支持RESTful变成风格。
下面是收录于话题 java基础面试题20个内容
1、Handler
也就是处理器。它直接应对着 MVC 中的 C 也就是 Controller 层,它的具体表现形式有很多,可以是类,也可以是方法。在 Controller 层中@RequestMapping 标注的所有方法都可以看成是一个 Handler,只要可以实际处理请求就可以是 Handler
2、HandlerMapping
initHandlerMappings(context),处理器映射器,根据用户请求的资源 uri 来查找 Handler 的。在 SpringMVC 中会有很多请求,每个请求都需要一个 Handler 处理,具体接收到一个请求之后使用哪个 Handler 进行,这就是 HandlerMapping 需要做的事。
3、HandlerAdapter
initHandlerAdapters(context),适配器。因为 SpringMVC 中的 Handler 可以是任意的形式,只要能处理请求就 ok,但是 Servlet 需要的处理方法的结构却是固定的,都是以 request 和 response 为参数的方法。如何让固定的 Servlet 处理方法调用灵活的 Handler 来进行处理呢?这就是 HandlerAdapter 要做的事情。
Handler 是用来干活的工具;HandlerMapping 用于根据需要干的活找到相应的工具;HandlerAdapter 是使用工具干活的人。
4、HandlerExceptionResolver
initHandlerExceptionResolvers(context), 其它组件都是用来干活的。在干活的过程中难免会出现问题,出问题后怎么办呢?这就需要有一个专门的角色对异常情况进行处理,在 SpringMVC 中就是 HandlerExceptionResolver。具体来说,此组件的作用是根据异常设置 ModelAndView,之后再交给 render 方法进行渲染。
5、ViewResolver
initViewResolvers(context),ViewResolver 用来将 String 类型的视图名和 Locale 解析为 View 类型的视图。View 是用来渲染页面的,也就是将程序返回的参数填入模板里,生成 html(也可能是其它类型)文件。这里就有两个关键问题:使用哪个模板?用什么技术(规则)填入参数?这其实是 ViewResolver 主要要做的工作,ViewResolver 需要找到渲染所用的模板和所用的技术(也就是视图的类型)进行渲染,具体的渲染过程则交由不同的视图自己完成。
6、RequestToViewNameTranslator
initRequestToViewNameTranslator(context),ViewResolver 是根据 ViewName 查找 View,但有的 Handler 处理完后并没有设置 View 也没有设置 ViewName,这时就需要从 request 获取 ViewName 了,如何从 request 中获取 ViewName 就是 RequestToViewNameTranslator 要做的事情了。RequestToViewNameTranslator 在 Spring MVC 容器里只可以配置一个,所以所有 request 到 ViewName 的转换规则都要在一个 Translator 里面全部实现。
7、LocaleResolver
initLocaleResolver(context), 解析视图需要两个参数:一是视图名,另一个是 Locale。视图名是处理器返回的,Locale 是从哪里来的?这就是 LocaleResolver 要做的事情。LocaleResolver 用于从 request 解析出 Locale,Locale 就是 zh-cn 之类,表示一个区域,有了这个就可以对不同区域的用户显示不同的结果。SpringMVC 主要有两个地方用到了 Locale:一是 ViewResolver 视图解析的时候;二是用到国际化资源或者主题的时候。
8、ThemeResolver
initThemeResolver(context),用于解析主题。SpringMVC 中一个主题对应一个 properties 文件,里面存放着跟当前主题相关的所有资源、如图片、css 样式等。SpringMVC 的主题也支持国际化,同一个主题不同区域也可以显示不同的风格。SpringMVC 中跟主题相关的类有 ThemeResolver、ThemeSource 和 Theme。主题是通过一系列资源来具体体现的,要得到一个主题的资源,首先要得到资源的名称,这是 ThemeResolver 的工作。然后通过主题名称找到对应的主题(可以理解为一个配置)文件,这是 ThemeSource 的工作。最后从主题中获取资源就可以了。
9、MultipartResolver
initMultipartResolver(context),用于处理上传请求。处理方法是将普通的 request 包装成
MultipartHttpServletRequest,后者可以直接调用 getFile 方法获取 File,如果上传多个文件,还可以调用 getFileMap 得到 FileName->File 结构的 Map。此组件中一共有三个方法,作用分别是判断是不是上传请求,将 request 包装成 MultipartHttpServletRequest、处理完后清理上传过程中产生的临时资源。
10、FlashMapManager
initFlashMapManager(context),用来管理 FlashMap 的,FlashMap 主要用在 redirect 中传递参数。
分享不易,如果觉得分享对大家有帮助,老规矩,点赞、关注、留言支持哦!