Spring 使用Jetty以编程方式部署servlet

Spring 使用Jetty以编程方式部署servlet,spring,servlets,jetty,context.xml,Spring,Servlets,Jetty,Context.xml,我有一个servlet,我希望使用Jetty以编程方式部署它。servlet使用Spring,它的web.xml指向您所期望的Spring上下文xml文件 目前,我正在尝试Jetty文档中的示例代码,但使用的是我自己的servlet: Server server = new Server(8080); ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS); contex

我有一个servlet,我希望使用Jetty以编程方式部署它。servlet使用Spring,它的web.xml指向您所期望的Spring上下文xml文件

目前,我正在尝试Jetty文档中的示例代码,但使用的是我自己的servlet:

Server server = new Server(8080);

ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/");
server.setHandler(context);

context.addServlet(new ServletHolder(new BatchReceiver()),"/br/*");

server.start();
server.join();
这将导致以下异常:

2012-05-24 14:43:20.190:INFO:oejs.Server:jetty-8.1.3.v20120416
2012-05-24 14:43:20.266:WARN:/:unavailable
java.lang.IllegalStateException: No WebApplicationContext found: no ContextLoaderListener registered?
at org.springframework.web.context.support.WebApplicationContextUtils.getRequiredWebApplicationContext(WebApplicationContextUtils.java:84)
at com.spiffymap.sealog.server.servlet.BatchReceiver.init(BatchReceiver.java:126)
at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:492)
at org.eclipse.jetty.servlet.ServletHolder.doStart(ServletHolder.java:312)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:778)
at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:258)
at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:699)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:90)
at org.eclipse.jetty.server.Server.doStart(Server.java:262)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
at com.spiffymap.sealog.server.servlet.TestBatchReceiver.main(TestBatchReceiver.java:26)
2012-05-24 14:43:20.335:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:8080
如何设置servlet,使Jetty知道它的web.xml和Spring上下文在哪里

任何帮助都将不胜感激

编辑

因此,显然我不需要web.xml,但我需要将Jetty指向我的Spring上下文。我尝试过以下方法:

context.setInitParameter("contextConfigLocation", "classpath*:**/*Context.xml");

但它不起作用(仍然产生相同的异常)。我还尝试在ServletHolder上设置“contextConfigLocation”,但没有任何效果。

如果要处理web.xml,需要使用WebappContext,servlet上下文不知道web.xml的任何信息


请参阅:

对于那些感兴趣的人,我的工作如下:

Server server = new Server(8090);

ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/batch");

// Setup Spring context
context.addEventListener(new ContextLoaderListener());
context.setInitParameter("contextConfigLocation", "classpath*:**/testContext.xml");

server.setHandler(context);

// Add servlets
context.addServlet(new ServletHolder(new BatchReceiver()), "/receiver/*");
context.addServlet(new ServletHolder(new BatchSender()), "/sender/*");       

server.start();
server.join();
我错过的关键一步是

context.addEventListener(new ContextLoaderListener());

这将加载Spring上下文。

感谢您的回复。然而,我已经知道如何设置它来使用战争。我的问题是,我需要能够在servlet内部进行调试。如果您设置为使用war,那么您不需要像上面的示例中那样使用servlet上下文……因此我不清楚您在这里实际寻找的是什么,您定义的servlet没有需要了解的web.xml,也许您想要的是如何获取spring上下文并将其从上面推送到您的servlet中。再说一次,我不能使用WAR,因为这意味着我的servlet已编译,并且在运行时无法在其中进行调试。也许你是对的,servlet只需要了解Spring上下文。知道如何指定它吗?您可以使用
context.setInitParameter(“contextConfigLocation”,AppConfig.class.getName()),而不是使用testContext.xml