spring HandlerMapping

本文深入探讨了Spring MVC框架中HandlerMapping的工作原理,包括BeanNameUrlHandlerMapping、ControllerClassNameHandlerMapping、SimpleUrlHandlerMapping及DefaultAnnotationHandlerMapping,并详细解释了它们各自的配置和应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当客户端发出Request的时候DispatcherServlet会将Request提交给HandlerMapping, 然后HanlerMapping根据Web Application Context的配置来回传给DispatcherServlet相应的Controller. 

HandlerMapping 

1. org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping 

默认的HanlerMapping 会根据Controller的Bean Name来进行匹配 例如: 
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/> 
<bean name="/welcome.html" class="me.iace.spring.controller.WelcomeController"/> 

当客户端发出http://xxxx/ctx/welcome.html的时候 BeanNameUrlHandlerMapping指向该Controller回传给DispatcherServlet 

2. org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping 

ControllerClassNameHandlerMapping会根据Controller Bean的Class Name来做匹配 例如: 
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/> 
<bean name="/hello" class="me.iace.spring.controller.WelcomeController"/> 

例如WelcomeController 会去掉后面的Controller 客户端发出 /welcome的request 会匹配到该Controller, 需要注意的是 如果welcome的第一个字母'w'为大写的话是错误的, 而且后welcome后面不管有什么都会匹配该WelcomeController 例如 ‘/welcome224sscc’也是可以匹配到该Controller的。 

ControllerClassNameHandlerMapping的相关属性 如下 

<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"> 
<property name="caseSensitive" value="true" /> 
<property name="pathPrefix" value="/haha" /> 
<property name="basePackage" value="me.iace.spring.controller" /> 
</bean> 
caseSensitive: 是否识别大小写 
pathPrefix: url的前缀,在这里的前缀是 '/haha' 
basePackage: 指定匹配哪个package的Controller 

再就是可以同时使用 BeanNameUrlHandlerMapping 和 ControllerClassNameHandlerMapping 例如 
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/> 
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/> 
<bean name="/hello" class="me.iace.spring.controller.WelcomeController"/> 


当客户端发出 '/hello' 和 '/welcome'的时候都会匹配到该WelcomeController 

3. org.springframework.web.servlet.handler.SimpleUrlHandlerMapping 

SimpleUrlHandlerMapping会将在自身Properies里设置的Url映射到相关的Controller, 如下: 

<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
    <property name="mappings"> 
        <props> 
            <prop key="/welcome">welcomeController</prop> 
            <prop key="/hello">helloController</prop> 
        </props> 
    </property> 
</bean> 


<bean id="welcomeController" class="me.iace.spring.controller.WelcomeController" /> 
<bean id="helloController" class="me.iace.spring.controller.WelcomeController" />

 

4.org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping

 

<mvc:annotation-driven /> 是一种简写形式,完全可以手动配置替代这种简写形式,简写形式可以让初学都快速应用默认配置方案。

<mvc:annotation-driven /> 会自动注册 DefaultAnnotationHandlerMapping 与 AnnotationMethodHandlerAdapter 两个bean,是spring MVC为@Controllers分发请求所必须的。
并提供了:数据绑定支持,@NumberFormatannotation支持,@DateTimeFormat支持,@Valid支持,读写XML的支持(JAXB),读写JSON的支持(Jackson)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值