2012-05-24 23 views
10

Mam serwlet, który chcę wdrożyć programowo za pomocą Jetty. Serwlet używa Springa, a web.xml wskazuje na plik XML kontekstu Spring, jak można się spodziewać.Wdrażanie serwletu programowo za pomocą Jetty

Obecnie próbuję tylko przykładowy kod z docs Jetty ale z moim apletu:

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(); 

Skutkuje to w następujący wyjątek:

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 

Jak mogę skonfigurować mój aplet tak, aby Jetty wiedział, gdzie jest plik web.xml i kontekst Spring?

Każda pomoc będzie naprawdę doceniona!

EDIT

Więc widocznie ja nie potrzebują web.xml ale zrobić trzeba wskazać Jetty do mojego kontekście wiosennego. Próbowałem coś następujące:

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

Ale to nie działa (nadal produkuje ten sam wyjątek). Próbowałem również ustawienie "contextConfigLocation" na ServletHolder bez rezultatu.

Odpowiedz

15

Dla tych, którzy są zainteresowani, ja ale to działa w następujący sposób:

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(); 

kluczowy etap I brakowało

context.addEventListener(new ContextLoaderListener()); 

, który ładuje kontekst sprężyny.

+0

zamiast używać pliku testContext.xml mogłeś użyć 'context.setInitParameter (" contextConfigLocation ", AppConfig.class.getName());' –

0

jeśli chcesz przetworzyć web.xml trzeba użyć WebappContext, kontekst serwletów nie wiedzą nic o web.xml na

patrz: 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

Dzięki za odpowiedź. Jednak już wiem, jak skonfigurować go, aby użyć WAR. Mój problem polega na tym, że muszę mieć możliwość debugowania wewnątrz serwletu. – DeadPassive

+0

jeśli używasz wojny, nie musisz używać kontekstu serwletu, tak jak w powyższym przykładzie ... więc nie jest dla mnie jasne, czego tak naprawdę szukasz tutaj, serwlet, jak zdefiniowałeś _has_ no web.xml, o którym trzeba wiedzieć, być może tym, czego szukasz, jest uzyskanie kontekstu sprężynowego i przeniesienie go do serwletu z góry. –

+0

Znowu nie mogę użyć WAR, ponieważ oznaczałoby to skompilowanie mojego serwletu i nie mogę debugować w nim podczas działania. Może masz rację, a serwlet musi tylko wiedzieć o kontekście Wiosny. Masz pomysł, jak to określić? – DeadPassive

Powiązane problemy