HandlerMapping的工作就是為每個請求找到合適的請求找到一個處理器handler,其實現機制簡單來說就是維持了一個url到Controller關系的Map結構,其提供的實際功能也是根據request請求來獲取具體執行的包含Controller信息的HandlerAdapter。
HandlerMapping接口及實現類如下:

HandlerMapping%20接口:接口中主要定義了一個getHandler方法,返回一個HandlerExecutionChain對象sprotected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception {      HandlerExecutionChain mappedHandler = null;       ........      mappedHandler = getHandler(processedRequest);      ........              }  getHandler方法的操作就是選擇HandlerMapping,調用getHandler(request)方法獲得HandlerExecutionChain[java] view%20plain copy print?
protected HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception {          for (HandlerMapping hm : this.handlerMappings) {              if (logger.isTraceEnabled()) {                  logger.trace(                          "Testing handler map [" + hm + "] in DispatcherServlet with name '" + getServletName() + "'");              }              HandlerExecutionChain handler = hm.getHandler(request);              if (handler != null) {                  return handler;              }          }          return null;      }  接口HandlerMapping定義的方法很簡單就是一個getHandler方法,采用
/**  *handlerMapping的工作就是為了請求找到合適的處理器handler  *最常用的兩個handlerMapping:BeanNameURLHandlerMapping:查找spring容器中和請求的url同名的bena  *SimpleUrlHandlerMapping:配置請求url和handler的映射關系  */  public interface HandlerMapping {              String PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE = HandlerMapping.class.getName() + ".pathWithinHandlerMapping";        String BEST_MATCHING_PATTERN_ATTRIBUTE = HandlerMapping.class.getName() + ".bestMatchingPattern";        String INTROSPECT_TYPE_LEVEL_MAPPING = HandlerMapping.class.getName() + ".introspectTypeLevelMapping";        String URI_TEMPLATE_VARIABLES_ATTRIBUTE = HandlerMapping.class.getName() + ".uriTemplateVariables";        String MATRIX_VARIABLES_ATTRIBUTE = HandlerMapping.class.getName() + ".matrixVariables";        String PRODUCIBLE_MEDIA_TYPES_ATTRIBUTE = HandlerMapping.class.getName() + ".producibleMediaTypes";        //獲得HandlerExecutionChain      HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception;    }  
總結:我們簡單的介紹了一下HandlerMapping及其實現類,簡單來說HandlerMapping的實現機制就是根據request來獲得HandlerExecutionChain,其實就是獲取真正要執行的Controller或者某個具體的方法。HandlerMapping接口提供的唯一的方法就是HandlerExecutionChain getHandler(HttpServletRequest request)
新聞熱點
疑難解答