SimpleUrlHandlerMapping类详解 - HandlerMapping系列七
SimpleUrlHandlerMapping通过配置一套URL Pattern到处理器的映射而实现的。它使用配置的映射中的URL Pattern匹配请求中的URL,如果匹配成功,则使用匹配URL Pattern映射的Bean作为处理器返回。
SimpleUrlHandlerMapping源码
public class SimpleUrlHandlerMapping extends AbstractUrlHandlerMapping { private final MapurlMap = 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是Spring MVC中适用性最强的Handler Mapping类,允许明确指定URL模式和Handler的映射关系。
SimpleUrlHandlerMapping两种声明方式
prop key方式,key是URL模式,属性值是Handler的ID或者名字。
<beans ...> <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/welcome.htm">welcomeController</prop> <prop key="/*/welcome.htm">welcomeController</prop> <prop key="/helloGuest.htm">helloGuestController</prop> </props> </property> </bean> <bean id="welcomeController" class="com.mkyong.common.controller.WelcomeController" /> <bean id="helloGuestController" class="com.mkyong.common.controller.HelloGuestController" /> </beans>
value方式,等号左边是URL模式,右边是Handler的ID或者名字。
<beans ...> <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <value> /welcome.htm=welcomeController /*/welcome.htm=welcomeController /helloGuest.htm=helloGuestController </value> </property> </bean> <bean id="welcomeController" class="com.mkyong.common.controller.WelcomeController" /> <bean id="helloGuestController" class="com.mkyong.common.controller.HelloGuestController" /> </beans>
版权声明:本文为JAVASCHOOL原创文章,未经本站允许不得转载。