首页 > 解决方案 > 如何通过 defaultHandler 属性将默认映射策略(BeanNameUrlHandlerMapping)更改为 SimpleUrlHandlerMapping?

问题描述

BeanNameUrlHandlerMapping是默认映射策略,如果在 ApplicationContext 中没有定义其他映射策略,则使用它。我的问题很简单:

我们如何通过 defaultHandler 属性将此默认映射策略更改为 SimpleUrlHandlerMapping?

我们可以用下面的这个配置来改变它吗:

<bean id="simpleHander" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="mappings">
        <value>
            /student/test=testController
        </value>
    </property>
    <property name="defaultHandler" ref="simpleHandler">
</bean>

<bean id="testController" class="com.test.controller.TestController"/>

标签: javaspringspring-mvc

解决方案


Web 应用程序可以定义任意数量的 DispatcherServlet。每个 servlet 将在其自己的命名空间中运行,使用映射、处理程序等加载其自己的应用程序上下文。只有由 ContextLoaderListener 加载的根应用程序上下文(如果有)将被共享。

调度程序 servlet 只能配置HandlerMapping的一种实现。
来自弹簧文档

DispatcherServlet 可以使用任何 HandlerMapping 实现(预先构建或作为应用程序的一部分提供)来控制请求到处理程序对象的路由。默认为 BeanNameUrlHandlerMapping 和 RequestMappingHandlerMapping。HandlerMapping 对象可以在 servlet 的应用程序上下文中定义为 bean,实现 HandlerMapping 接口,覆盖默认的 HandlerMapping(如果存在)。可以为 HandlerMappings 指定任何 bean 名称(它们按类型进行测试)。

1.如何配置SimpleUrlHandlerMapping

配置 SimpleUrlHandlerMapping 意味着将调度程序 servlet 配置为使用 SimpleUrlHandlerMapping 作为 HandlerMapping。它可以在您的调度程序 servlet 配置 xml 文件中完成。因此,首先将您的调度程序 servlet 配置为使用 xml 文件进行初始化。
在你的 web.xml

<servlet>
    <servlet-name>simpleUrlHandlerDispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/simpleUrlHandlerMapping.xml</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>simpleUrlHandlerDispatcherServlet</servlet-name>
    <url-pattern>*.simple</url-pattern>
</servlet-mapping>

在你的 simpleUrlHandlerMapping.xml

<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="mappings">
        <props>
            <prop key="/hello.simple">simpleHello</prop>
            <prop key="/hi.simple">simpleHi</prop>
        </props>
    </property>
</bean>

<bean name="simpleHello" class="com.pvn.HelloController" />
<bean name="simpleHi" class="com.pvn.HiController" />

2. 在 SimpleUrlHandlerMapping 中为映射属性注入值的替代方法

作为mappings财产需要java.util.Properties我们可以使用以下任何一种

<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="mappings">
        <props>
            <prop key="/hello.simple">simpleHello</prop>
            <prop key="/hi.simple">simpleHi</prop>
        </props>
    </property>
</bean>
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="mappings">
        <value>
            /hello.simple=simpleHello 
            /hi.simple=simpleHi
        </value>
    </property>
</bean>
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="mappings">
        <util:properties  location="classpath:url-mappings.properties">
        </util:properties>
    </property>
</bean>

对于最后一种方法,您需要在类路径中创建属性文件,如下所示 在此处输入图像描述

而且您还需要为您的 xml 添加 XSD 才能使用<util:properties>标签。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:util="http://www.springframework.org/schema/util"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.0.xsd
        http://www.springframework.org/schema/util 
        http://www.springframework.org/schema/util/spring-util.xsd">

推荐阅读