浅谈BeanNameUrlHandlerMapping

        spring为我们提供了多种处理器映射的支持,比如org.springframework.web.servlet.handler.SimpleUrlHandlerMapping、

org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping、org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping,等等。

 

      我用SimpleUrlHandlerMapping和DefaultAnnotationHandlerMapping比较多,其它的基本没用过。

 

最近在项目中使用了BeanNameUrlHandlerMapping,发现有这样一个现象:

 

     如果没有明确声明任何处理器映射,spring会默认使用BeanNameUrlHandlerMapping,但如果明确声明了其它的处理器映射,则需要将BeanNameUrlHandlerMapping明确声明出来,而且在每个包含被映射的bean的配置文件中都要加入BeanNameUrlHandlerMapping,否则会抛异常:

WARN - No mapping found for HTTP request with URI [/BOSS_SUPPORT/service/httpService] in DispatcherServlet with name 'backend'
2010-01-08 11:14:57 [backend]:253 ERROR - Servlet.service() for servlet backend threw exception
java.io.IOException: Did not receive successful HTTP response: status code = 404, status message = [Not Found]

 

从异常看,报告没有找到相应的映射地址,这个现象很是奇怪,也许是我没有搞清楚,不过在网上也没有找到相关的说明,希望高手指点。

 

相关配置文件如下:

主配置文件a.xml:

 

<!-- 定义注解URL映射处理器 -->
 <bean id="urlMapping"
  class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
  <property name="interceptors" ref="interceptors" />
  <property name="order" value="1"></property>
 </bean>
 

 <bean id="beanNameUrlHandlingMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
  <property name="interceptors" ref="interceptors" />
  <property name="order" value="2"></property>
 </bean>

 

包含映射的一个配置文件b.xml:

<bean id="httpService" name="/httpService" class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">
  <property name="service">
   <ref bean="ucService" />
  </property>
  <property name="serviceInterface" value="com.netqin.baike.service.UcService"/>
 </bean>

 

以上两个文件都在服务器启动时加载,虽然a.xml中已经声明了BeanNameUrlHandlerMapping,但如果b.xml中没有声明BeanNameUrlHandlerMapping,系统就会抛异常。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值