我們可以在AbstractAnnotationConfigDispatcherServletInitializer的實現類中重寫onStartup(ServletContext servletContext)方法添加其他的Servlet、Filter以及Listener
1 public class SpringWebAppInit extends AbstractAnnotationConfigDispatcherServletInitializer { 2 //Spring容器 3 @Override 4 protected Class<?>[] getRootConfigClasses() { 5 return new Class[]{RootConfig.class}; 6 } 7 8 //SpringMVC容器 9 @Override 10 protected Class<?>[] getServletConfigClasses() { 11 return new Class[]{WebConfig.class}; 12 } 13 14 //DispatcherServlet映射關系 15 @Override 16 protected String[] getServletMappings() { 17 return new String[]{"/"}; 18 } 19 20 @Override 21 public void onStartup(ServletContext servletContext) throws ServletException { 22 super.onStartup(servletContext); 23 ServletRegistration.Dynamic userServlet = servletContext.addServlet("UserServlet", UserServlet.class); 24 userServlet.addMapping("/user"); 25 } 26 }
也可以寫一個WebApplicationInitializer接口的實現類,通過重寫onStartup(ServletContext servletContext)方法添加其他的Servlet、Filter以及Listener
1 /** 2 * 實現WebApplicationInitializer接口注冊Servlet,也可以用來注冊DispatcherServlet 3 */ 4 public class MyServletInit implements WebApplicationInitializer { 5 @Override 6 public void onStartup(ServletContext servletContext) throws ServletException { 7 ServletRegistration.Dynamic userServlet = servletContext.addServlet("UserServlet", UserServlet.class); 8 userServlet.addMapping("/user"); 9 userServlet.setLoadOnStartup(0); 10 } 11 }
如果你只是注冊Filter,並且該Filter只會映射到DispatcherServlet上的話,那么只需要重寫AbstractAnnotationConfigDispatcherServletInitializer的getServletFilters()方法。在這個方法中沒有必要聲明它的映射路徑,因為getServletFilters()方法返回的所有Filter都會映射到DispatcherServlet上
1 @Override 2 protected Filter[] getServletFilters() { 3 return new Filter[]{new MyFilter()}; 4 }