一、AbstractAnnotationConfigDispatcherServletInitializer类在onStartup已经帮我们注册了spring mvc dispatchservlet,留有部分接口供我们扩展实现创建root容器,springmvc容器,以及mapping 的url

二、例
public class SpringMvcContainerInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected Class<?>[] getRootConfigClasses() { return new Class[] { RootConfig.class }; } @Override protected Class<?>[] getServletConfigClasses() { return new Class[] {ServletConfig.class}; } /** * /*:会拦截所有请求,包括*.jsp /:不会拦截*.jsp */ @Override protected String[] getServletMappings() { return new String[] { "/" }; } }
@ComponentScan(value={"com.suxiaodong"}, excludeFilters={
@Filter(type=FilterType.ANNOTATION, value = {Controller.class})
})
@Configuration
public class RootConfig {
}
@ComponentScan(value={"com.suxiaodong"}, includeFilters = {
@Filter(type=FilterType.ANNOTATION, value = {Controller.class})
},useDefaultFilters = false)
@EnableWebMvc
@Configuration
public class ServletConfig extends WebMvcConfigurerAdapter {
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
registry.jsp("/WEB-INF/", ".jsp");
}
@Override
public void configureDefaultServletHandling(
DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
//添加拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**");
}
}
public class MyInterceptor implements HandlerInterceptor{ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { return true; } //目标方法执行正确以后执行 @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } //页面响应以后执行 @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("afterCompletion"); } }