springmvc九大组件之HandlerMapping

来源:互联网 发布:巨人网络传真 编辑:程序博客网 时间:2024/05/16 08:26

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进行了注册。

原创粉丝点击