1. 程式人生 > >SpringMVC靜態資源處理

SpringMVC靜態資源處理

class DefaultServletHandlerBeanDefinitionParser implements BeanDefinitionParser {

@Override
public BeanDefinition parse(Element element, ParserContext parserContext) {
      Object source = parserContext.extractSource(element);
//獲取指定的預設 Servlet 名稱
String defaultServletName = element.getAttribute("default-servlet-name");
//這裡定義DefaultServletHttpRequestHandler BeanDefinition,之後將註冊這個BeanDefinition到應用上下文
RootBeanDefinition defaultServletHandlerDef = new RootBeanDefinition(DefaultServletHttpRequestHandler.class);
defaultServletHandlerDef.setSource(source);
defaultServletHandlerDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
      if (StringUtils.hasText(defaultServletName)) {
         defaultServletHandlerDef.getPropertyValues().add("defaultServletName", defaultServletName);
}
      String defaultServletHandlerName = parserContext.getReaderContext().generateBeanName(defaultServletHandlerDef);
parserContext.getRegistry().registerBeanDefinition(defaultServletHandlerName, defaultServletHandlerDef);
parserContext.registerComponent(new BeanComponentDefinition(defaultServletHandlerDef, defaultServletHandlerName));
     //這裡構建一個urlMap 以便於SimpleUrlHandlerMapping使用,完成請求到Handler的對映
Map<String, String> urlMap = new ManagedMap<String, String>();
urlMap.put("/**", defaultServletHandlerName);
     //這裡定義SimpleUrlHandlerMapping BeanDefinition,之後將註冊這個BeanDefinition到應用上下文,用於將請求匹配"/**"靜態資源的路徑對映到DefaultServletHttpRequestHandler,使用預設的Servlet進行處理 
RootBeanDefinition handlerMappingDef = new RootBeanDefinition(SimpleUrlHandlerMapping.class);
handlerMappingDef.setSource(source);
handlerMappingDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
handlerMappingDef.getPropertyValues().add("urlMap", urlMap);

String handlerMappingBeanName = parserContext.getReaderContext().generateBeanName(handlerMappingDef);
parserContext.getRegistry().registerBeanDefinition(handlerMappingBeanName, handlerMappingDef);
parserContext.registerComponent(new BeanComponentDefinition(handlerMappingDef, handlerMappingBeanName));

// Ensure BeanNameUrlHandlerMapping (SPR-8289) and default HandlerAdapters are not "turned off"
MvcNamespaceUtils.registerDefaultComponents(parserContext, source);

      return null;
}

}