【SpringMvc】映射器Mapping

本文介绍 Spring MVC 中两种映射器的工作原理:BeanNameUrlHandlerMapping 和 SimpleUrlHandlerMapping。前者通过 bean 的 name 属性值直接映射 URL 请求;后者支持一个 Action 对应多个 URL 请求路径。

映射器,讲对应的请求交给Action


1) org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping 

将自定义的Action所对应的<bean>中name属性作为请求路径,一一对应关系,可以配置多个映射器

<bean name="/hello.action" class="cn.qblank.action.HelloAction"></bean>
<!-- 映射器:BeanNameUrlHandlerMapping表示将bean标签的name属性值当作URL请求 -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>

2) org.springframework.web.servlet.handler.SimpleUrlHandlerMapping

改映射器可以使多个请求路径对应一个Action。一个对应多个请求路径,只需配置一个映射器即可

配置如下:

<bean name="userActionID" class="cn.qblank.action.UserAction"></bean>
<!-- 映射器:BeanNameUrlHandlerMapping表示将bean标签的name属性值当作URL请求 -->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
	<property name="mappings">
		<!-- 配置各个action -->
		<props>
			<prop key="/update.action">userActionID</prop>
			<prop key="/delete.action">userActionID</prop>
			<prop key="/add.action">userActionID</prop>
			<prop key="/find.action">userActionID</prop>
		</props>
	</property>
</bean>










### 如何在 Spring MVC 中更改或自定义请求映射 #### 自定义请求映射的方式 Spring MVC 提供了灵活的机制用于自定义请求映射。这主要通过实现 `HandlerMapping` 接口或者扩展现有的 `HandlerMapping` 实现类完成[^1]。开发者可以根据业务需求调整默认行为,甚至完全替换原有的映射逻辑。 #### 修改现有映射的行为 如果希望修改已有的映射行为而不重新实现整个流程,则可以通过继承标准的 `HandlerMapping` 类(如 `RequestMappingHandlerMapping`),并覆盖其方法来达到目的。例如,可以重写 `getHandlerInternal` 方法来自定义匹配规则: ```java public class CustomRequestMappingHandlerMapping extends RequestMappingHandlerMapping { @Override protected HandlerMethod getHandlerInternal(HttpServletRequest request) throws Exception { // 调用父类获取处理器对象 HandlerMethod handlerMethod = super.getHandlerInternal(request); // 如果需要额外处理逻辑,在这里添加 if (handlerMethod != null && isCustomConditionMet(request)) { // 可以在此处执行特定条件下的操作 System.out.println("Custom condition met!"); } return handlerMethod; } private boolean isCustomConditionMet(HttpServletRequest request) { // 定义自己的判断逻辑 String paramValue = request.getParameter("customParam"); return "true".equalsIgnoreCase(paramValue); } } ``` 上述代码展示了如何创建一个自定义的 `RequestMappingHandlerMapping` 子类,并在其内部增加新的匹配条件。 #### 注册自定义的 `HandlerMapping` 为了使自定义的 `HandlerMapping` 生效,还需要将其注册到 Spring 应用上下文中。通常可以在 Java 配置文件中完成此操作: ```java @Configuration @EnableWebMvc public class WebConfig implements WebMvcConfigurer { @Bean public RequestMappingHandlerMapping requestMappingHandlerMapping() { return new CustomRequestMappingHandlerMapping(); } } ``` 这样就完成了对原有映射逻辑的增强。 #### 使用拦截器改变映射前后的状态 除了直接修改映射本身外,还可以利用拦截器(Interceptor)间接影响最终的结果。拦截器允许我们在请求到达目标控制器之前以及之后执行某些动作[^4]。下面是一个简单的例子展示如何设置全局拦截器: ```java @Component public class LoggingInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值