Spring mvc 底拖+;Spring WebApplicationInitializer-双重初始化
我正在迁移一个旧的web应用程序。它是用旧的Spring mvc 底拖+;Spring WebApplicationInitializer-双重初始化,spring-mvc,servlets,undertow,wildfly-10,Spring Mvc,Servlets,Undertow,Wildfly 10,我正在迁移一个旧的web应用程序。它是用旧的web.xml-风格编写的,现在我们希望以编程方式构建servlet 这是一个SpringMVC应用程序,作为WAR模块部署在Wildfly 10.0.0.Final下的EAR中 我编写了Spring的WebApplicationInitializer(目前仍在使用SpringXMLConfig,一步一步地进行-下一步将迁移到JavaConfig)。尽管我被困在这里是因为servlet被初始化了两次,第二次初始化失败是由于过滤器的名称冲突-NullPo
web.xml
-风格编写的,现在我们希望以编程方式构建servlet
这是一个SpringMVC应用程序,作为WAR模块部署在Wildfly 10.0.0.Final下的EAR中
我编写了Spring的WebApplicationInitializer
(目前仍在使用SpringXMLConfig,一步一步地进行-下一步将迁移到JavaConfig)。尽管我被困在这里是因为servlet被初始化了两次,第二次初始化失败是由于过滤器的名称冲突-NullPointerException
在过滤器创建之后
这是我的初始化器:
public class MyWebApplicationInitializer implements WebApplicationInitializer {
private static final Logger log = LoggerFactory.getLogger(MyWebApplicationInitializer.class);
/**
* @see org.springframework.web.WebApplicationInitializer#onStartup(javax.servlet.ServletContext)
*/
@Override
public void onStartup(ServletContext container) throws ServletException {
log.debug("******* Initializing Web App *******");
XmlWebApplicationContext rootContext = new XmlWebApplicationContext();
rootContext.setConfigLocation("classpath:META-INF/spring/application-context.xml");
XmlWebApplicationContext webContext = new XmlWebApplicationContext();
webContext.setConfigLocation("classpath:META-INF/spring/mvc-context.xml");
container.addListener(new ContextLoaderListener(rootContext));
ServletRegistration.Dynamic dispatcher = container.addServlet("dispatcher", new DispatcherServlet(webContext));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/");
container.addFilter("log4jEnhancementFilter", Log4jEnhancementFilter.class);
log.info("******* Web App correctly initialized *******");
}
}
下面是一段日志:
[ServerService Thread Pool -- 74]:[INFO] @ 2016-04-19 07:19:27,725: io.undertow.servlet.spec.ServletContextImpl.log:313: Spring WebApplicationInitializers detected on classpath: [com.xyz.web.servlet.MyWebApplicationInitializer@6356dd91]
[ServerService Thread Pool -- 74]:[DEBUG] @ 2016-04-19 07:19:27,725: com.xyz.web.servlet.MyWebApplicationInitializer.onStartup:44: ******* Initializing Web App *******
...
[ServerService Thread Pool -- 74]:[INFO] @ 2016-04-19 07:19:27,796: com.xyz.web.servlet.MyWebApplicationInitializer.onStartup:59: ******* Web App correctly initialized *******
...
[ServerService Thread Pool -- 74]:[INFO] @ 2016-04-19 07:19:27,797: io.undertow.servlet.spec.ServletContextImpl.log:313: Spring WebApplicationInitializers detected on classpath: [com.xyz.web.servlet.MyWebApplicationInitializer@427d3c64]
[ServerService Thread Pool -- 74]:[DEBUG] @ 2016-04-19 07:19:27,797: com.xyz.web.servlet.MyWebApplicationInitializer.onStartup:44: ******* Initializing Web App *******
07:19:27,800 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 74) MSC000001: Failed to start service jboss.undertow.deployment.default-server.default-host./www: org.jboss.msc.service.StartException in service jboss.undertow.deployment.default-server.default-host./www: java.lang.RuntimeException: java.lang.NullPointerException
at org.wildfly.extension.undertow.deployment.UndertowDeploymentService$1.run(UndertowDeploymentService.java:85)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
at org.jboss.threads.JBossThread.run(JBossThread.java:320)
Caused by: java.lang.RuntimeException: java.lang.NullPointerException
at io.undertow.servlet.core.DeploymentManagerImpl.deploy(DeploymentManagerImpl.java:231)
at org.wildfly.extension.undertow.deployment.UndertowDeploymentService.startContext(UndertowDeploymentService.java:100)
at org.wildfly.extension.undertow.deployment.UndertowDeploymentService$1.run(UndertowDeploymentService.java:82)
... 6 more
Caused by: java.lang.NullPointerException
at com.xyz.web.servlet.MyWebApplicationInitializer.onStartup(MyWebApplicationInitializer.java:54)
at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:175)
at io.undertow.servlet.core.DeploymentManagerImpl.deploy(DeploymentManagerImpl.java:184)
... 8 more
正如您所看到的,有一个双重servlet的初始化;第一个成功,第二个失败是由于NPE
我做错了什么?我如何修复它?我刚刚修复了我的两次启动服务,使用add metadata complete=“true”to web.xml(web app tag),引用