(一)HandlerMappings
查找handler的,handler在SpringMVC是处理事情的一个类,比如说给一个方法标注了一个@RequestMapping注解,那么就可以给这个方法看成是一个handler.由handler来负责实际的请求.
HandlerMappings的作用是能够根据url和具体的handler建立一个对应关系
HandlerMapping就是url和对应的Controller中的@RequestMapping方法映射关系.
HandlerMapping负责映射用户的URL和对应的处理类,HandlerMapping并没有规定这个URL与应用的处理类如何映射,在HandlerMapping接口中只定义了根据一个URL必须返回一个HandlerExecutionChain代表的处理链,我们可以在这个处理链中添加任意的HandlerAdapter实例来处理这个URL对应的请求。
Spring MVC提供了许多HandlerMapping的实现,默认使用的是BeanNameUrlHandlerMapping,可以根据Bean的name属性映射到URL中。同时,我们可以为DispatcherServlet提供多HandlerMapping供其使用。DispatcherServlet在选用HandlerMapping的过程中,将根据我们指定的一系列HandlerMapping的优先级进行排序,然后优先使用优先级高的HandlerMapping
(二)HandlerAdapters
是一个适配器,因为在SpringMVC中,handler可以是任意形式的,只要你能处理请求,就被认为是一个Handler(方法参数是任意类型的,可能是对象,也可能是数组).Request请求参数不能直接跟我们要访问的目标方法参数进行匹配,所以这个时候就由HandlerAdapter进行适配.HandlerAdapter可以将Request里面的参数转换成我们目标handler能使用的参数.
Spring MVC通过HandlerAdapter来实际调用处理函数。以AnnotationMethodHandlerAdapter为例
DispatcherServlet中根据handlermapping找到对应的handler method后,首先检查当前工程中注册的所有可用的handlerAdapter,根据handlerAdapter中的supports方法找到可以使用的handlerAdapter。通过调用handlerAdapter中的handle方法来处理及准备handler method中的参数及annotation(这就是spring mvc如何将reqeust中的参数变成handle method中的输入参数的地方),最终调用实际的handle method。
(三)HandlerExceptionResolvers
用来处理handler中产生的异常情况的组件,异常在Java中一抛出来就是一大串,可能谁都看不懂,HandlerExceptionResolvers可以将谁都看不懂的异常转换成页面上的用户可以看懂的友好的内容\
比如说404异常跳到404页面,500异常跳到500页面,
(四)ViewResolvers
视图解析器,在Spring配置文件中都会给接口类配置一些视图.
(五)RequestToViewNameTranslator
(六)LocaleResolver
从request中解析出来的locale(地点),比如说IE浏览器设置的语言环境,这个语言环境决定了Locale
我们可以设置默认的语言,可以根据语言的环境来显示不同的国际化的一些文字.这就是有些网站既可以支持中文版又可以支持英文版的原因.就是通过Locale来实现的.
(七)ThemeResolver
这个类用来解析主题的,就是样式,用来换皮肤的,它可以来实现view用不同的css或者图片去给这个页面定义不同的风格,当然这些图片css需要放到项目的classpath下.
类似于插件的东西,当然我们也很少去用这个功能.
(八)MultipartResolver
用于处理上传文件请求的一个组件,通过拿到普通的request,转换成MultipartRequest来做文件上传的一个处理.也可以通过MultipartResolver的getFile拿到具体的文件.而且能够支持多文件上传,底层是用Map存储的,是根据fileName和File来进行对应的关系.
(九)FlashMapManager
FlashMap说白了就是参数中转 ,是FlashMap的管理类,是用来管理FlashMap的,
FlashMap是闪存,FlashMap主要是用来重定向的参数传递的时候,比如说处理用户订单的时候为了避免这个请求重复提交,可以处理完post请求之后redirect一个get请求,这个get请求就可以用来显示订单详情的信息,这样的话可以规避用户刷新重新提交的问题.但是在页面上要显示订单的信息,这样的信息转换以后,数据怎么获取?因为重定向是没有参数传递的功能的.
解决办法是通过FlashMap,在重定向之前,把我们要传递的参数写入request里面,然后request里面attribute,我们可以在attribute写入一个值,可以在attribute里面固定一个key,把值存到这个key里面,FlashMap再根据这个key获取值,在我们重定向之后,spring就自动将这个key的值填入到Model里面.这样页面就可以直接从Model里面取值了.