Files
Java_SpringExample/src/main/java/config/WebInitializer.java
T

178 lines
5.9 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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.
* <p>
* 相当于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<FilterDelegator> 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<FilterDelegator> 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());
}
/**
* 获取过滤器的分发器类型。<br>
* 1、支持异步操作时,默认为:DispatcherType.REQUEST, DispatcherType.FORWARD, DispatcherType.INCLUDE、DispatcherType.ASYNC<br>
* 2、不支持异步操作时,默认为:DispatcherType.REQUEST, DispatcherType.FORWARD, DispatcherType.INCLUDE。
* <p>
*
* 参考:<br>
* AbstractDispatcherServletInitializer.getDispatcherTypes()
*
* @return DispatcherType集合
*/
protected final EnumSet<DispatcherType> getDispatcherTypes() {
EnumSet<DispatcherType> 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<DispatcherType> dispatcherTypes) {
}
/**
* 在ServletContext中添加监听器。
*
* @param servletContext Servlet上下文
*/
protected final void registerListeners(ServletContext servletContext) {
List<Class<? extends EventListener>> listenerClasses = new ArrayList();
// ExcelTempFileListener excelTempFileListener = new ExcelTempFileListener();
// TestHttpSessionListener testHttpSessionListener = new TestHttpSessionListener();
configListenerClasses(listenerClasses);
for (Class<? extends EventListener> listenerClass : listenerClasses) {
servletContext.addListener(listenerClass);
}
/**添加监听器???? --- 2017.08.23----*/
// servletContext.addListener(excelTempFileListener);
// servletContext.addListener(testHttpSessionListener);
}
/**
* 配置监听器。
*
* @param listenerClasses 监听器类
*/
protected void configListenerClasses(List<Class<? extends EventListener>> listenerClasses) {
}
}