SpringMVC使用mvc:annotation-driven自动注册标签

1、处理器映射器(HandlerMapping)和处理器适配器(HandlerAdapter)

处理器映射器(HandlerMapping)其作用是根据请求的URL路径,通过注解或者XML配置,寻找匹配的处理器(Handler)信息。处理器适配器(HandlerAdapter)其作用是根据映射器找到的处理器(Handler)信息,按照特定规则执行相关的处理器(Handler)。对于用户的请求,处理器映射器和处理器适配器为前端控制器(DispatcherServlet)与处理器(Handler)的交互搭建了重要的桥梁。

处理器映射器和处理器适配器有两种配置方式:一种是基于XML的资源配置,也即非注解的配置方式;另外一种是基于Annotation注解的配置。

1.1 非注解的处理器映射器和适配器(基于XML的资源配置)

第一种配置方式为非注解的处理器映射器和适配器,声明相关的bean及实现即可,配置如下:

<!-- 处理器映射器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>

<!-- 处理器适配器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>

1.2 注解的注解的处理器映射器和适配器(基于Annotation注解的配置)

第二种配置方式,使用<mvc:annotation-driven>自动注册标签。在实际开发中,为了提高开发效率,使用最多的就是基于<mvc:annotation-driven>标签的配置,如下所示:

<!-- 开启SpringMVC注解模式(设置注解映射器、注解适配器) -->
<mvc:annotation-driven></mvc:annotation-driven>
 
<!-- 使用扫描配置,对某一个包下的所有类进行扫描,找出所有使用@Controller注解的Handler控制器类 -->
<context:component-scan base-package="com.pjb.mvc.controller"></context:component-scan>

 

2、<mvc:annotation-driven>自动注册标签

<mvc:annotation-driven></mvc:annotation-driven>

使用<mvc:annotation-driven>标签来配置。<mvc:annotation-driven>标签是一种简写模式,使用默认配置替代了一般的手动配置。<mvc:annotation-driven>标签会自动注册处理器映射器和处理器适配器,Spring3.1之前默认自动注册的处理器映射器和处理器适配器分别为:DefaultAnnotaionHandlerMapping、AnnotaionMethodHandlerAdapter,它们位于SpringMVC的核心jar包的org.springframework.web.servlet.mvc.annotation包下。在Spring3.1之后,DefaultAnnotaionHandlerMapping、AnnotaionMethodHandlerAdapter已经被列为过期的映射器和适配器。SpringMVC添加了新的基于注解的处理器映射器和处理器适配器,分别为RequestMappingHandlerMapping和RequestMappingHandlerAdapter,它们同样位于SpringMVC的核心jar包的org.springframework.web.servlet.mvc.annotation包下。

<context:component-scan>扫描标签

为了让注解的处理器映射器和处理器适配器找到注解的Handler,有两种配置方式。

第一种方式:在SpringMVC的核心配置文件(spirng-mvc.xml)中,声明相关bean信息。

<bean class="com.pjb.mvc.controller.UserController"></bean>

第二种方式:使用扫描配置,对某一个包下的所有类进行扫描,找出所有使用@Controller注解的Handler控制器类。

<context:component-scan base-package="com.pjb.mvc.controller"></context:component-scan>

 

3、SpringMVC框架中的默认配置文件

在开发基于SpringMVC框架的项目时,当不再SpringMVC核心配置文件(spring-mvc.xml)中设置处理器映射器、适配器和视图解析器,程序可以照常运行。原因是在SpringMVC的依赖jar包中含有一个默认的配置文件 DispatcherServlet.properties,当在核心配置文件中没有配置处理器映射器、适配器和视图解析器时,会默认使用 DispatcherServlet.properties 的配置。

在SpringMVC依赖jar包中可以找到该默认的配置文件:

该文件的具体内容如下:

# Default implementation classes for DispatcherServlet's strategy interfaces.
# Used as fallback when no matching beans are found in the DispatcherServlet context.
# Not meant to be customized by application developers.
 
org.springframework.web.servlet.LocaleResolver=org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver
 
org.springframework.web.servlet.ThemeResolver=org.springframework.web.servlet.theme.FixedThemeResolver
 
org.springframework.web.servlet.HandlerMapping=org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,\
	org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping
 
org.springframework.web.servlet.HandlerAdapter=org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,\
	org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,\
	org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter
 
org.springframework.web.servlet.HandlerExceptionResolver=org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver,\
	org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver,\
	org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver
 
org.springframework.web.servlet.RequestToViewNameTranslator=org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator
 
org.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolver
 
org.springframework.web.servlet.FlashMapManager=org.springframework.web.servlet.support.SessionFlashMapManager

可以看到,在该配置文件中配置了一些默认的处理器映射器和处理器适配器,如:BeanNameUrlHandlerMapping 和 HttpRequestHandlerAdapter。当然,如果在SpringMVC核心配置文件(spring-mvc.xml)中配置了处理器映射器和处理器适配器,会以核心配置文件中的配置为准。在默认配置文件中,还可以看到一些基于注解类型的映射器和适配器,如:RequestMappingHandlerMapping、RequestMappingHandlerAdapter等。

当我们在项目中使用<mvc:annotation-driven>标签自动注册处理器映射器和处理器适配器:

<!-- 开启SpringMVC注解模式(设置注解映射器、注解适配器) -->
<mvc:annotation-driven></mvc:annotation-driven>

SpringMVC默认注册的处理器映射器和处理器适配器就是RequestMappingHandlerMapping 和 RequestMappingHandlerAdapter。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pan_junbiao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值