用来记录一些原创性的总结
以往我们在使用SpringMVC的时候都需要在web.xml中定义一个DispatcherServlet。基于Servlet3编程时我们也可以通过程序来注册DispatcherServlet,Servlet3的ServletContainerInitializer允许我们在容器启动的时候通过程序注册一些Servlet对象,Spring提供了一个实现,叫SpringServletContainerInitializer,同时对外开放了一个WebApplicationInitializer接口,如果需要通过程序来注册DispatcherServlet,我们只需自定义一个WebApplicationInitializer实现类,在其onStartup方法体中注册即可。容器启动的时候会自动调用其onStartup方法。
在下面的代码中我们自定义了一个WebApplicationInitializer实现类,并通过程序注册了DispatcherServlet。Spring也提供了WebApplicationInitializer的一个抽象实现,AbstractDispatcherServletInitializer,通过继承该抽象类,我们可以通过重写其中的方法的方式处理我们关心的某部分内容,比如可以通过重写getServletMappings方法指定servlet的映射路径;通过重写getServletFilters方法指定DispatcherServlet需要应用的Filter;也可以通过重写customizeRegistration自定义一些配置。
public class MyWebApplicationInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
XmlWebApplicationContext appContext = new XmlWebApplicationContext();
appContext.setConfigLocation("/WEB-INF/applicationContext-mvc.xml");
ServletRegistration.Dynamic registration = servletContext.addServlet("dispatcher", new
DispatcherServlet(appContext));
registration.setLoadOnStartup(1);
registration.setAsyncSupported(true);
registration.addMapping("/springmvc/*");
}
}
也可以选择直接继承AbstractDispatcherServletInitializer,然后实现其中的抽象方法。
(注:本文是基于Spring4.1.0所写)