zoukankan      html  css  js  c++  java
  • 关于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 也声明出来。(即使只使用默认也最好声明出来)

  • 相关阅读:
    Error Domain=com.google.greenhouse Code=-102
    给分类(Category)添加属性
    Eclipse 4.4(luna) 安装Veloeclipse 2.0.8时报错的问题
    MAVEN常用命令
    Redis之七种武器
    Redis系统性介绍
    Nginx、LVS及HAProxy负载均衡软件的优缺点详解
    Redis介绍以及安装(Linux)
    MYSQL + MHA +keepalive + VIP安装配置(三)--keepalived安装配置
    MYSQL + MHA +keepalive + VIP安装配置(二)--MHA的配置
  • 原文地址:https://www.cnblogs.com/Xieyang-blog/p/9066597.html
Copyright © 2011-2022 走看看