Tomcat(Servlet3.0规范的web容器)启动时,会查找ServletContainerInitializer接口实现类,这个实现类SpringServletContainerInitializer由Spring提供,然后Spring提供的实现类会加载WebApplicationInitializer这个接口的所有实现类通过*onStartup(ServletContext servletContext)*这个方法
WebApplicationInitializer这个接口的实现类结构图
自定义实现类主要方法的作用
customizeRegistration(Dynamic registration)
//定制注册对DispatcherServlet进行额外的配置
//先加载springmvc中StandardServletMultipartResolver再执行customizeRegistration
@Override
protected void customizeRegistration(Dynamic registration) {
//定义了Http服务上传文件存储位置、最大文件大小、最大请求的长度,只要上传文件就会经过这里
MultipartConfigElement multipartConfigElement =
//MultipartConfigElement(java.lang.String location, long maxFileSize, long maxRequestSize, int fileSizeThreshold)
new MultipartConfigElement("c:/test/temp",1024*1024*2,1024*1024*4,2);
registration.setMultipartConfig(multipartConfigElement);
super.customizeRegistration(registration);
}
== onStartup(ServletContext servletContext)==
// 服务器启动时
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
// 添加过滤器
// 1.创建过滤器
CharacterEncodingFilter filter = new CharacterEncodingFilter();
// 2.设置字符编码集
filter.setEncoding("utf-8");
// 3.添加至SerfvletContext
servletContext.addFilter("CharacterEncodingFilter", filter) // 添加过滤器
.addMappingForUrlPatterns(
EnumSet.of(DispatcherType.REQUEST),
false,
"*.do"); // 设置Mapping映射
// 添加监听器
servletContext.addListener(CommonDataListener.class);
// 注意:必须调用父类的onStartup()方法
super.onStartup(servletContext);
}
getRootConfigClasses()
// 加载Spring容器:Root WebApplicationContext(Spring)
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[] { AppRootConfig.class };
}
getServletConfigClasses()
// 加载Spring容器:Serlvet WebApplicationContext(Spring MVC)
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[] { SpringMvcConfig.class };
}
== getServletMappings()==
// 设置DispatcherServlet映射路径为处理所有请求
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}