2016-05-08 4 views
1

Я создаю веб-приложение с Spring MVC и ZK framework. У меня есть проект root (jar) со всей базовой конфигурацией spring и zk и проект веб-приложения (war), вызывающий инициализатор.WebApplicationInitializer называется дважды

Это мой Initializer в моем корневом проекте

public class DefaultInitializer implements WebApplicationInitializer { 

    private Class<?> config; 

    public void onStartup(ServletContext container) throws ServletException { 
     init(); 

     // Create the 'root' Spring application context 
     AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext(); 
     rootContext.register(config); 

     // Manage the lifecycle of the root application context 
     container.addListener(new ContextLoaderListener(rootContext)); 
     container.addListener(new RequestContextListener()); 
     container.addListener(new HttpSessionListener()); 

     // Register and map the dispatcher servlet 
     ServletRegistration.Dynamic dispatcher = container.addServlet(
       "mvc", new DispatcherServlet(rootContext)); 
     dispatcher.setLoadOnStartup(1); 
     dispatcher.addMapping("/"); 

     ServletRegistration.Dynamic zkDispatcher = container.addServlet(
       "zkLoader", new DHtmlLayoutServlet()); 
     zkDispatcher.setLoadOnStartup(2); 
     zkDispatcher.setInitParameter("update-uri", "/zkau"); 
     zkDispatcher.addMapping("*.zul"); 
     zkDispatcher.addMapping("*.zhtml"); 
     zkDispatcher.addMapping("/zk/*"); 

     ServletRegistration.Dynamic zkUpdater = container.addServlet(
       "auEngine", new DHtmlUpdateServlet()); 
     zkUpdater.setLoadOnStartup(3); 
     zkUpdater.addMapping("/zkau/*"); 

    } 

    protected void setConfig(Class<?> config) { 
     this.config = config; 
    } 

    protected void init() { 
     setConfig(BaseConfig.class); 
    } 

} 

Так что в моем WebAPP проекте я только должен сделать

public class Initializer extends DefaultInitializer { 

    @Override 
    public void init() { 
     setConfig(WebConfig.class); 
    } 

} 

где WebConfig является конфиг ComponentScan и EnableWebMvc Java.

Проблема заключается в том, что я запускаю свой сервер с помощью веб-приложения. OnStartup вызывается дважды, а затем он генерирует исключение NullPointerException.

У меня есть только один web.xml, и я регистрирую только один DispatcherServlet, и в моем поместье импортируется только один источник spring-web.jar.

Я использую Spring 4, Java 1.8 и Tomcat v.8

Может кто-нибудь дать мне подсказку, что происходит?

Спасибо,

J.

+0

У кого-нибудь есть подсказка? – jpadilladev

ответ

1

Проблема заключалась в определении класса DefaultInitializer.

DefaultInitializer должен быть аннотация, поэтому, когда Initializer расширяет DefaultInitializer, создается только один экземпляр, реализующий WebApplicationInitializer.

Смежные вопросы