我有一個我希望使用Jetty以編程方式部署的servlet。 servlet使用Spring,它的web.xml指向了你所期望的Spring上下文XML文件。用Jetty以編程方式部署servlet
目前,我只是從碼頭文檔,但我自己的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 [email protected]:8080
我怎麼能設置我的servlet,以便Jetty知道它的web.xml和Spring上下文是哪裏?
任何幫助真的很感謝!
編輯
所以,顯然我並不需要一個web.xml,但我做需要指向碼頭到我的Spring上下文。我試過以下幾種:
context.setInitParameter("contextConfigLocation", "classpath*:**/*Context.xml");
但它不起作用(仍產生相同的例外)。我也嘗試在ServletHolder上設置「contextConfigLocation」無濟於事。
而不是使用testContext.xml,你可以使用'context.setInitParameter(「contextConfigLocation」,AppConfig.class.getName());'' –