我使用WebAppContext
作为嵌入式码头中的处理程序:
Server server = setupServerOfTwoConnectors();
server.setHandler(webAppContext());
server.start();
而webAppContext()
是:
private static WebAppContext webAppContext() {
WebAppContext context = new WebAppContext();
context.setContextPath("/foo");
context.setWar("bar.war");
return context;
}
我在这里错过了吗?
码头版本为9.2.10.v20150310
这是启动时的例外情况:
2015-06-05 10:57:45,015 [main] ERROR - [ContextLoader:331] Context initialization failed
java.lang.IllegalArgumentException: Resource must not be null
at org.springframework.util.Assert.notNull(Assert.java:112)
at org.springframework.core.io.support.EncodedResource.<init>(EncodedResource.java:66)
at org.springframework.core.io.support.PropertiesLoaderSupport.loadProperties(PropertiesLoaderSupport.java:175)
at org.springframework.core.io.support.PropertiesLoaderSupport.mergeProperties(PropertiesLoaderSupport.java:156)
at org.springframework.beans.factory.config.PropertyResourceConfigurer.postProcessBeanFactory(PropertyResourceConfigurer.java:80)
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:265)
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:162)
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:606)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:462)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)
at org.eclipse.jetty.server.handler.ContextHandler.callContextInitialized(ContextHandler.java:800)
at org.eclipse.jetty.servlet.ServletContextHandler.callContextInitialized(ServletContextHandler.java:444)
at org.eclipse.jetty.server.handler.ContextHandler.startContext(ContextHandler.java:791)
at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:294)
at org.eclipse.jetty.webapp.WebAppContext.startWebapp(WebAppContext.java:1349)
at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1342)
at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:741)
at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:505)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)
at org.eclipse.jetty.server.Server.start(Server.java:387)
at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61)
at org.eclipse.jetty.server.Server.doStart(Server.java:354)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
at my.code.JettySanityTest.setupJetty(JettySanityTest.java:56)
答案 0 :(得分:0)
在不知道你的战争文件需要什么样的Jetty配置的情况下,我只是在这个答案的黑暗中捅了一下。 (相应调整)
您想要为该网络应用声明一些配置行为。
例如:
context.setConfigurations(new Configuration[]
{
new AnnotationConfiguration(),
new WebInfConfiguration(),
new WebXmlConfiguration(),
new MetaInfConfiguration(),
new FragmentConfiguration(),
new EnvConfiguration(),
new PlusConfiguration(),
new JettyWebXmlConfiguration()
});
请注意,这些顺序很重要,其中任何一个都可以视为可选。
AnnotationConfiguration
- 根据字节码中的注释配置webapp WebInfConfiguration
(默认启用) - 根据WEB-INF
目录(主要的webapp和libs)中的信息配置webapp WebXmlConfiguration
(默认情况下已启用) - 根据WEB-INF/web.xml
中的信息配置webapp元数据(仅限主网址)MetaInfConfiguration
(默认启用) - 根据META-INF
目录(主要的webapp和libs)中的信息配置webapp FragmentConfiguration
(默认启用) - 根据lib片段中的信息配置webapp元数据EnvConfiguration
- 为webapp设置JNDI env PlusConfiguration
- 根据上述配置中元数据收集的信息建立/绑定JNDI变量JettyWebXmlConfiguration
(默认情况下已启用) - 使用主要网络应用程序配置webapp WEB-INF/jetty-web.xml
(使用Jetty的IoC XML语言)