基于注解的SpringMVC添加其他的Servlet、Filter以及Listener
我们可以在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 }