springmvc九大组件之HandlerMapping

本文详细介绍了Spring MVC框架中HandlerMapping的作用及其实现原理。它通过用户的请求找到对应的处理器,并利用SimpleUrlHandlerMapping组件实现URL到处理器的映射。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HandlerMapping的主要作用就是通过用户的请求找到对该请求相应的处理器。打开HandlerMapping的源代码我们可以看见,HandlerMapping只有一个方法:HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception。HandlerExecutionChain 中封装了Handler和interceptors。通常springmvc会维护一个Map,key值就是对应的请求,而value就是HandlerExecutionChain。springMVC内部的SimpleUrlHandlerMapping也确实是这样来实现的。在内部维护了一个Map。private final Map<String, Object> urlMap = new LinkedHashMap<String, Object>(),由于Handler可以是任意类型或者方法,因此value使用了Object。

SimpleUrlHandlerMapping的主要方法有以下几个:

public void setMappings(Properties mappings);将mappings加入urlMap。

public void setUrlMap(Map<String, ?> urlMap);设置UrlMap。

public Map<String, ?> getUrlMap();获取urlMap

public void initApplicationContext();用来初始化工作,在初始化时调用了registerHandlers方法。

protected void registerHandlers(Map<String, Object> urlMap);被initApplicationContext调用,在方法中主要对urlMap进行了一个循环遍历。代码如下:

for (Map.Entry<String, Object> entry : urlMap.entrySet()) {
String url = entry.getKey();
Object handler = entry.getValue();
// Prepend with slash if not already present.
if (!url.startsWith("/")) {
url = "/" + url;
}
// Remove whitespace from handler bean name.
if (handler instanceof String) {
handler = ((String) handler).trim();
}
registerHandler(url, handler);
}

首先取出每一个url和对应的handler,然后调用了registerHandler方法。在registerHandler方法中,对url和handler进行了注册。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值