java - 如何通过 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"/>
解决方案
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">
推荐阅读
- java - Mono之间如何正确交互?
- javascript - 在 React Native 中使用 forEach 显示 API 结果
- javascript - 为什么在用户离开语音频道时尝试编辑用户时会收到 DiscordAPIError?
- camera - 有人能告诉我为什么当我的游戏中的相机移动时一切都会振动吗?
- docker - Docker build 与 Docker run 的行为不同
- listbox - 如何使用 pywinauto 选中/取消选中 ListBox 中的项目?
- roblox - 单击按钮更改表单的颜色
- django - 无法从 settings.py 的 INSTALLED_APPS 列表导入应用程序
- css - 如何在一个 sapui5 项目中设计不同的消息 Toast?
- c# - 图片框的高度向下延伸