HandlerMapping是什么,在那个jar包

HandlerMapping在Spring MVC框架的jar包下面,他是处理映射器,为用户发送的请求找到合适的Handler Adapter,它将会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象、多个HandlerInterceptor拦截器)对象,同时通过这种策略模式,很容易添加新的映射策略。SpringMVC在请求到handler处理器的分发这步就是通过HandlerMapping模块解决的,handlerMapping还处理拦截器,同时Spring MVC也提供了一系列HandlerMapping的实现,根据一定的规则选择controller。

HandlerMapping是SpringMVC处理请求过程中的一个重要组件,在SpringMVC启动时对容器中的HandlerMapping进行初始化,初始化的位置在DispatcherServlet的onRefresh()方法中。

HandlerMapping是接口,Spring MVC中有很多的实现类,具体入下图:

HandlerMapping核心类图

AbstractHandlerMapping是HandlerMapping的最顶层抽象实现,在AbstractHandlerMapping中定义了HandlerMapping的整体结构,子类只需要通过默认方法提供初始值或具体的算法即可。

具体类的作用如下:

1. AbstractHandlerMapping 准备上下文环境;提供getHandlerInternal钩子;封装拦截器到HandlerExecutionChain

2. AbstractUrlHandlerMapping 实现注册handler的方法供子类使用;实现getHandlerInternal,根据子类初始化的配置信息,查找handler

3. AbstractDetectingUrlHandlerMapping 扫描应用下的Object,迭代后提供钩子方法determineUrlsForHandler由子类决定如何过滤

4. AbstractControllerUrlHandlerMapping 实现determineUrlsForHandler,添加过滤排除的handler操作(配置文件配置),预留钩子方法buildUrlsForHandler给子类实现;同时判断controller的子类

5. ControllerBeanNameHandlerMapping 根据bean name生成url
    ControllerClassNameHandlerMapping根据class name生成url

HandlerMapping接口定义如下:

public interface HandlerMapping {
    HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception;
}

它根据request返回HandlerExecutionChain