gpt4 book ai didi

java - WebApplicationInitializer 调用了两次

转载 作者:行者123 更新时间:2023-11-28 22:17:58 25 4
gpt4 key购买 nike

我正在使用 Spring MVC 和 ZK 框架创建一个网络应用程序。我有一个包含 spring 和 zk 的所有基本配置的根项目 (jar),以及一个调用初始化程序的 Web 应用程序项目 (war)。

这是我根项目中的初始化器

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,在我的pom中只有一个spring-web.jar被导入。

我正在使用 Spring 4、Java 1.8 和 Tomcat v.8

谁能告诉我发生了什么事?

谢谢,

J.

最佳答案

问题出在类 DefaultInitializer 的定义中。

DefaultInitializer 应该是抽象的,因此当 Initializer 扩展 DefaultInitializer 时,只会创建一个实现 WebApplicationInitializer 的实例。

关于java - WebApplicationInitializer 调用了两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37099288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com