2012-05-24 3 views
10

Jettyを使用してプログラムでデプロイするサーブレットがあります。サーブレットはSpringを使用し、web.xmlはSpringのコンテキストXMLファイルを指しています。現時点でJettyでプログラムでサーブレットをデプロイする

、私はちょうど桟橋のドキュメントからではなく、私自身のサーブレットとサンプルコードをしようとしている:

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 

どのようにすることができますJettyがweb.xmlとSpringコンテキストの場所を知るようにサーブレットを設定しますか?

本当にありがとうございます。

EDITだから、明らかに私は、web.xmlを必要としませんが、私はは私の春のコンテキストに桟橋をポイントする必要があります。私は次のようなものを試しました:

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

しかし、それは動作しません(同じ例外が発生します)。また、ServletHolderの "contextConfigLocation"を無駄に設定しようとしました。あなたはWebappContextを使用する必要があるのweb.xmlを処理したい場合は

答えて

15

、I私が行方不明になった

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コンテキストをロードします。

+0

を使用する代わりに、 'context.setInitParameter(" contextConfigLocation "、AppConfig.class.getName());' –

0

、サーブレットコンテキストは、については何も知らないのweb.xmlの

参照:興味がある人のためにhttp://git.eclipse.org/c/jetty/org.eclipse.jetty.project.git/tree/example-jetty-embedded/src/main/java/org/eclipse/jetty/embedded/OneWebApp.java

+0

返信いただきありがとうございます。しかし、私はすでにWARを使用するように設定する方法を知っています。私の問題は、サーブレットの内部でデバッグできる必要があるということです。 – DeadPassive

+0

もしあなたが戦争を使用するように設定されているなら、上記の例のようにサーブレットのコンテキストを使う必要はありません...あなたが実際に探しているもの、あなたが定義したサーブレット_has_noあなたが探しているのは、Springのコンテキストを取得し、上からサーブレットにプッシュする方法です。 –

+0

再度、私のサーブレットがコンパイルされていることになるので、私はWARを使用できません実行中はデバッグできません。たぶんあなたは正しいと思うし、サーブレットはSpringコンテキストについて知る必要があります。どのように私はそれを指定することができますか? – DeadPassive

関連する問題