转自:
SimpleUrlHandlerMapping类的功能简介说明
下文笔者将讲述SimpleUrlHandlerMapping类的功能简介说明,如下所示:
SimpleUrlHandlerMapping的功能:
使用一组URL Pattern到处理器的映射而实现的
它使用配置的映射中的URL Pattern匹配请求中的URL
当匹配成功,则使用匹配URL Pattern映射的Bean作为处理器返回
SimpleUrlHandlerMapping源码
public class SimpleUrlHandlerMapping extends AbstractUrlHandlerMapping {
private final Map urlMap = new HashMap();
// 通过属性配置URL到Bean名的映射
public void setMappings(Properties mappings) {
CollectionUtils.mergePropertiesIntoMap(mappings, this.urlMap);
}
// 配置URL到Bean的映射
public void setUrlMap(Map urlMap) {
this.urlMap.putAll(urlMap);
}
public Map getUrlMap() {
return this.urlMap;
}
@Override
public void initApplicationContext() throws BeansException {
super.initApplicationContext();
// 初始化的时候注册处理器
registerHandlers(this.urlMap);
}
protected void registerHandlers(Map urlMap) throws BeansException {
// 如果配置的处理器映射为空,则警告
if (urlMap.isEmpty()) {
logger.warn("Neither 'urlMap' nor 'mappings' set on SimpleUrlHandlerMapping");
}
else {
// 对于没一个配置的URL到处理器的映射,如果URL不是以斜线(/)开头,则追加斜线开头,则注册处理器
for (Map.Entry 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);
}
}
}
}
SimpleUrlHandlerMapping如何声明呢?
声明方式1:
prop key方式,key是URL模式,属性值是Handler的ID或者名字。
welcomeController welcomeController helloGuestController
声明方式2:等号
/welcome.htm=welcomeController /*/welcome.htm=welcomeController /helloGuest.htm=helloGuestController