HandlerMapping

本文深入探讨了Spring MVC框架中HandlerMapping的工作原理,包括BeanNameUrlHandlerMapping、ControllerClassNameHandlerMapping和SimpleUrlHandlerMapping的功能及配置方式。

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

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

[color=red][b][size=large]HandlerMapping[/size][/b][/color]

[b]1. org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping[/b]

默认的HanlerMapping 会根据Controller的Bean Name来进行匹配 例如:

<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>

<bean name="[b]/welcome.html[/b]" class="me.iace.spring.controller.WelcomeController"/>

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

[b]2. org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping[/b]

ControllerClassNameHandlerMapping会根据Controller Bean的Class Name来做匹配 例如:

<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>

<bean name="/hello" class="me.iace.spring.controller.[b][color=red]Welcome[/color]Controller[/b]"/>

例如WelcomeController 会去掉后面的Controller 客户端发出 /welcome的request 会匹配到该Controller, 需要注意的是 如果welcome的第一个字母'w'为大写的话是错误的, 而且后welcome后面不管有什么都会匹配该WelcomeController 例如 ‘/welcome[color=red]224sscc[/color]’也是可以匹配到该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="[b]org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping[/b]"/>

<bean class="[b]org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping[/b]"/>

<bean name="[color=red]/hello[/color]" class="me.iace.spring.controller.[color=red]WelcomeC[/color]ontroller"/>

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


[b]3. org.springframework.web.servlet.handler.SimpleUrlHandlerMapping[/b]

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


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

<bean id="[color=red]welcomeController[/color]" class="me.iace.spring.controller.WelcomeController" />

<bean id="[color=red]helloController[/color]" class="me.iace.spring.controller.WelcomeController" />
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值