浅谈BeanNameUrlHandlerMapping

来源:互联网 发布:mysql开启二进制日志 编辑:程序博客网 时间:2024/06/04 18:43

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,系统就会抛异常。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hanqunfeng/archive/2010/01/08/5156511.aspx

原创粉丝点击