文章目录
1、重温请求流程
在Spring MVC的架构环境下,用户在Web端触发了请求,请求会先通过前端控制器(DispatcherServlet),然后前端控制器(DispatcherServlet)会请求处理器映射器(HandlerMapping)寻找处理该请求的Handler(或带拦截器的Handler链),接着前端控制器(DispatcherServlet)会根据处理器映射器(HandlerMapping)传来的Handler(或带拦截器的Handler链)与配置的处理器适配器(HandlerAdapter)进行匹配,找到可以处理此Handler(或带拦截器的Handler链)类型的处理器适配器(HandlerAdapter),进而该处理器适配器(HandlerAdapter)调用自己的handler方法,利用Java的反射机制去执行具体的Controller方法并获得ModelAndView视图对象。
2、Spring MVC默认的注解配置
2.1 在Spring 3.1之前
Spring MVC默认加载的注解的处理器映射器和处理器适配器分别为DefaultAnnotationHandlerMapping、AnnotationMethodHandlerAdapter。它们位于Spring MVC的核心jar包的org.springframework.web.servlet.mvc.annotation包下。
2.2 在Spring 3.1之后
DefaultAnnotationHandlerMapping、AnnotationMethodHandlerAdapter已经被列为国企的映射器和适配器,Spring MVC增加了新的基于注解的处理器映射器和适配器,分别为RequestMappingHandlerMapping和RequestMappingHandlerAdapter,它们同样位于Spring MVC的核心jar包的org.springframework.web.servlet.mvc.method.annotation包下。
3、配置注解的处理器映射器和适配器方式
3.1 第一种配置方式
第一种配置方式和费注解的处理器适配器和映射器的配置一样,声明相关的bean即实现即可,配置如下:
<!--注解映射器-->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" />
<!--注解适配器-->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" />
3.2 第二种配置方式
第二种配置方式,使用“<mvc:annotation-driven />”标签来配置。annotation-driven标签是一种简写模式,使用默认配置代替了一般的手动配置。annotation-driven标签会自动注册处理器映射器和处理器适配器(Spring 3.1 至 Spring 4 皆使用RequestMappingHandlerMapping和RequestMappingHandlerAdapter)。并且除此之外还提供了数据绑定支持,例如@NumberFormatannotation支持、@DateTimeFormat支持、@Valid支持、读写XML的支持(JAXB)和读写JSON的支持(Jackson)。在实际开发中,为了提高开发效率,使用最多的就是基于annotation-driven标签的配置。annotation-driven标签的配置十分简单,如下所示。
<!--配置基于注解的处理器适配器与处理器映射器-->
<mvc:annotation-driven/>
4、让注解的处理器映射器和适配器找到注解的Handler
为了让注解的处理器映射器和适配器找到注解的Handler,有两种配置方式。
- 在springmvc.xml中声明相关的bean信息即可;
<bean class=