基于注解的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     }

猜你喜欢

转载自www.cnblogs.com/fanqisoft/p/10260648.html
今日推荐