package config; import filter.FilterDelegator; import filter.WelcomeHandlingFilter; import org.springframework.util.StringUtils; import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; import javax.servlet.*; import java.util.ArrayList; import java.util.EnumSet; import java.util.EventListener; import java.util.List; /** * Created by com on 2017/7/25. *

* 相当于web.xml的加载配置 */ /*** * FilterRegistration.Dynamic welcomePagFilter = container.addFilter("WelcomePagFilter", new WelcomePagFilter()); * welcomePagFilter.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), true, "/*"); * 上述是配置过滤器作用的请求. * 这里已经包装起来了 */ public class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override public void onStartup(ServletContext servletContext) throws ServletException { super.onStartup(servletContext); /**配置和监听器*/ registerServletFilters(servletContext); registerListeners(servletContext); // QuartzListener quartzListener = new QuartzListener(); // servletContext.addListener(quartzListener.getClass()); } /** * 配置ContextComponentLoader */ @Override protected Class[] getRootConfigClasses() { // return new Class[]{ContextComponentLoder.class}; return new Class[]{}; } /** * 配置DispatcherServlet */ @Override protected Class[] getServletConfigClasses() { return new Class[]{MvcComponentLoader.class}; } /**将DispatcherServlet映射到指定路径 配置ServletMappings*/ @Override protected String[] getServletMappings() { return new String[]{"/"}; } /** * 在ServletContext中添加过滤器,并把过滤器应用于DispatcherServlet。 * * @param servletContext Servlet上下文 */ protected void registerServletFilters(ServletContext servletContext) { List list = new ArrayList<>(); /**添加基本的过滤器配置,包括欢迎页和编码格式*/ configServletFilters(list); for (FilterDelegator filterDelegator : list) { if (StringUtils.hasText(filterDelegator.getFilterName())) { registerServletFilter(servletContext, filterDelegator.getFilter(), filterDelegator.getFilterName()); } else { registerServletFilter(servletContext, filterDelegator.getFilter()); } } } /** * 配置DispatcherServlet的过滤器。 * 添加基本的过滤器配置 * * @param servletFilters DispatcherServlet的过滤器 */ protected void configServletFilters(List servletFilters) { /** * 配置编码格式和欢迎页面 */ // servletFilters.add(new filter(new CharacterEncodingFilter("UTF-8"))); servletFilters.add(new FilterDelegator(new WelcomeHandlingFilter())); } /** * 在ServletContext中添加过滤器,并把过滤器应用于DispatcherServlet。 * * @param servletContext Servlet上下文 * @param filter 过滤器 * @param filterName 过滤器名称 */ protected final void registerServletFilter(ServletContext servletContext, Filter filter, String filterName) { FilterRegistration.Dynamic registration = servletContext.addFilter(filterName, filter); if (registration == null) { throw new IllegalStateException("Duplicate Filter registration for '" + filterName + "'. Check to ensure the Filter is only " + "configured once."); } registration.setAsyncSupported(isAsyncSupported()); registration.addMappingForServletNames(getDispatcherTypes(), false, getServletName()); } /** * 获取过滤器的分发器类型。
* 1、支持异步操作时,默认为:DispatcherType.REQUEST, DispatcherType.FORWARD, DispatcherType.INCLUDE、DispatcherType.ASYNC;
* 2、不支持异步操作时,默认为:DispatcherType.REQUEST, DispatcherType.FORWARD, DispatcherType.INCLUDE。 *

* * 参考:
* AbstractDispatcherServletInitializer.getDispatcherTypes() * * @return DispatcherType集合 */ protected final EnumSet getDispatcherTypes() { EnumSet dispatcherTypes = EnumSet.of(DispatcherType.REQUEST, DispatcherType.FORWARD, DispatcherType.INCLUDE); if (isAsyncSupported()) { dispatcherTypes.add(DispatcherType.ASYNC); } configDispatcherTypes(dispatcherTypes); return dispatcherTypes; } /** * 配置过滤器的分发器类型。 * * @param dispatcherTypes 过滤器的分发器类型 */ protected void configDispatcherTypes(EnumSet dispatcherTypes) { } /** * 在ServletContext中添加监听器。 * * @param servletContext Servlet上下文 */ protected final void registerListeners(ServletContext servletContext) { List> listenerClasses = new ArrayList(); // ExcelTempFileListener excelTempFileListener = new ExcelTempFileListener(); // TestHttpSessionListener testHttpSessionListener = new TestHttpSessionListener(); configListenerClasses(listenerClasses); for (Class listenerClass : listenerClasses) { servletContext.addListener(listenerClass); } /**添加监听器???? --- 2017.08.23----*/ // servletContext.addListener(excelTempFileListener); // servletContext.addListener(testHttpSessionListener); } /** * 配置监听器。 * * @param listenerClasses 监听器类 */ protected void configListenerClasses(List> listenerClasses) { } }