使用Jetty以编程方式部署servlet [英] Deploying a servlet programmatically with Jetty

查看:360
本文介绍了使用Jetty以编程方式部署servlet的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个servlet,希望使用Jetty以编程方式进行部署. Servlet使用Spring,并且web.xml指向了您期望的Spring上下文XML文件.

I've got a servlet that I wish to deploy programmatically using Jetty. The servlet uses Spring and it's web.xml points to the Spring context XML file as you'd expect.

此刻,我只是尝试使用Jetty文档中的示例代码,但要使用我自己的servlet:

At the moment, I'm just trying the example code from the Jetty docs but with my own 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上下文在哪里?

How can I set up my servlet so that Jetty knows where it's web.xml and Spring context are?

任何帮助将不胜感激!

编辑

因此,显然我不需要web.xml,但我要做需要将Jetty指向我的Spring上下文.我已经尝试过类似以下的内容:

So, apparently I don't need a web.xml but I do need to point Jetty to my Spring context. I've tried something like the following:

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

但是它不起作用(仍然会产生相同的异常).我还尝试将ServletHolder上的"contextConfigLocation"设置为无效.

But it doesn't work (still produces the same exception). I've also tried setting the "contextConfigLocation" on the ServletHolder to no avail.

推荐答案

对于那些有兴趣的人,我可以按照以下步骤进行操作:

For those who are interested, I got this to work as follows:

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上下文.

which loads the Spring context.

这篇关于使用Jetty以编程方式部署servlet的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆