关于SpringMVC中两种映射器不能共存的解决
首先大家都知道SpringMVC有两种映射器:
org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping
和
org.springframework.web.servlet.handler.SimpleUrlHandlerMapping
并且第一种“名字url映射器”是默认使用的。
两种映射器是可以共存的。
但是今天搭建项目的时候发现两种映射器都启用的时候,BeanNameUrlHandlerMapping却失效了,这是为什么呢?
下面是我的xml配置:
<bean id="hello" name="/hello.action" class="servlet.Hello"></bean> <bean id ="yaha" class="servlet.Yaha"></bean> <bean id="update" class="servlet.Update"></bean> <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/update.action">update</prop> <prop key="/yaha.action">yaha</prop> </props> </property> </bean>
运行结果:
访问update.action————正常
访问yaha.action————正常
访问hello.action————404
可以明显看出是“名字url”映射器匹配失败了。
分析:
失效的刚好就是默认的那一个,而平时我们使用默认映射器的时候是经常不会去写这个映射器的<bean>的声明,而今天声明一个映射器,那么所有的映射可能是将全部交给声明的那一个。所以默认的映射器不再调用。
测试:
在xml中加入下面的声明:
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
访问update.action————正常
访问yaha.action————正常
访问hello.action————正常
结论:
当需要两种映射器同时使用的时候,一定不要忘了将默认的 BeanNameUrlHandlerMapping 也声明出来。(即使只使用默认也最好声明出来)