复习一下。
Servlet 3.0 :
web.xml是非常重要的一个配置,无论是servlet、filter、listener都需要在web.xml里面配置下。
但是在servlet3.0里,这个配置得到了简化。可以通过java配置(注解等)省去web.xml配置。
具体servlet3.0的规范这里就不讨论了,说下其中一个非常重要的类。javax.servlet.ServletContainerInitializer
这个类会在web容器启动阶段被回调,可以在onStartup方法里做一些servlet、filter、listener的注册等操作。
Springboot 实现:
Spring在META-INF/services下配置了这个类,让整个web容器启动后可以找到并启动这个类 : SpringServletContainerInitializer
@HandlesTypes(WebApplicationInitializer.class)
public class SpringServletContainerInitializer implements ServletContainerInitializer {
@Override
public void onStartup(Set<Class<?>> webAppInitializerClasses, ServletContext servletContext)
throws ServletException {
List<WebApplicationInitializer> initializers = new LinkedList<WebApplicationInitializer>();
//....
initializers.add((WebApplicationInitializer) waiClass.newInstance());
//....
AnnotationAwareOrderComparator.sort(initializers);
for (WebApplicationInitializer initializer : initializers) {
initializer.onStartup(servletContext);
}
}
}
使用Springboot的时候,都会继承一个类SpringBootServletInitializer,在这个类的onStartup方法中,启动了整个Spring容器。