HandlerMapping类定义了request与handler之间映射关系。查找request对应的handler是SpringMVC DispatcherServlet处理request的第一步。经过分析request的url和消息头headers查找对应的handler对象handlerExecutionChain ,而后DispatcherServlet会执行handlerExecutionChain 中包含的处理器方法handler method和一系列前置和后置的方法拦截器handler Interceptor。java
public interface HandlerMapping { HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception; }
RequestMappingHandlerMapping-根据@Controller注解的类中的类级别和方法级别的@RequestMapping注解来建立定义了request和handler method之间映射关系的RequestMappingInfo实例。基本用法以下:app
@Controller public class WelcomeController { @RequestMapping("/welcome") protected ModelAndView someMethod() throws Exception { System.out.println("Inside WelcomeController"); ModelAndView model = new ModelAndView("welcome"); model.addObject("message", "JavaInterviewPoint"); return model; } }
BeanNameUrlHandlerMapping-从URL到以斜杠/开头的bean名称的映射的HandlerMapping接口的实现类,与Struts中URL映射到action名称的方式相似。其特色是,每次只能注册一个url与bean的映射关系,若是将多个url映射到一个bean上,须要屡次注册。基本用法以下:ide
//用法1,直接在@Controller注解上定义别名,注册映射/welcome->WelcomeController @Controller("/welcome") public class WelcomeController extends AbstractController { @Override protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView model = new ModelAndView("welcome"); model.addObject("message", "JavaInterviewPoint"); return model; } } //用法2,在@Configuration注解类中定义指定别名的Bean,注册映射/welcome一、/welcome2->WelcomeController @Configuration public class BeanNameUrlHandlerMappingConfig { @Bean BeanNameUrlHandlerMapping beanNameUrlHandlerMapping() { return new BeanNameUrlHandlerMapping(); } @Bean({"/welcome1","/welcome2"}) public WelcomeController welcome() { return new WelcomeController(); } }
SimpleUrlHandlerMapping-从URL到request处理程序bean的映射的HandlerMapping接口的实现类。支持映射到bean实例以及映射到bean名称。url
SimpleUrlHandlerMapping与BeanNameUrlHandlerMapping相似,都是基于url和bean映射关系,可是SimpleUrlHandlerMapping更灵活。其setUrlMap方法支持一次注册多个Url映射关系。spa
//注册映射/welcome一、/welcome2->WelcomeController @Configuration public class UrlHandlerMappingConfig { @Bean SimpleUrlHandlerMapping simpleUrlHandlerMapping() { Map<String, Object> urlMap = new LinkedHashMap<String, Object>(); urlMap.put("welcome1","welcomeController"); urlMap.put("welcome2","welcomeController"); SimpleUrlHandlerMapping handlerMapping=new SimpleUrlHandlerMapping(); handlerMapping.setUrlMap(urlMap); return handlerMapping; } @Bean WelcomeController welcomeController(){ return new WelcomeController(); } }