这是一个定义请求与处理器对象之间映射关系的接口。
这个类能够被应用程序开发人员实现,但其实这个不是必要的,因为框架本身包含了BeanNameUrlHandlerMapping和SimpleUrlHandlerMapping,DefaultAnnotationHandlerMapping。前面那个是默认的,在application context中没有注册HandlerMapping bean的情况下。
HandlerMapping实现能够支持映射拦截器,但也不是必须的。一个handler总是会被包装在一个HandlerExcutionChain实例当中,并且和一些HandlerInterceptor实例同时存在。
DispatcherServlet会首先按照给定的顺序调用每个HandlerInterceptor的preHandle方法,最后才会调用handler本身,前提是所有的preHandle方法都返回true。
其核心的方法是
HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception;
其返回值HandlerExecutionChain包含了一个handler对象以及一些拦截器。
如果没有发现到匹配的,就返回null,但不会是一个错误。因为DispatcherServlet会查询所有注册好的HandlerMapping 来进行匹配。如果这都没有发现一个匹配的hanler,则跑出一个错误。