2010-09-15 22 views
7

Ho una classe principale che configura e attiva Jetty. (Che è una pratica standard da Wicket per testare una webapp, ma in realtà non è specifico per wicket.)Aggiungere risorse a Jetty a livello di programmazione

final Server server = new Server(); 
//skipped socketconnector initialization 

final WebAppContext bb = new WebAppContext(); 
bb.setServer(server); 
bb.setContextPath("/"); 
bb.setWar("src/main/webapp"); 
server.addHandler(bb); 
server.start(); 

Come si può vedere, src/main/webapp viene utilizzato come radice webapp. Tuttavia, ho alcune risorse che sono in target/classi e che vengono copiate in webapp in seguito. Quindi vorrei aggiungere directory virtuali al molo.

vorrei mappare target/classes/js a /js e target/classes/css-/css

Qualcuno può aiutarmi?

BTW: E 'molo 6.1.4

risposta

8

Aggiungi un WebAppContext per ogni directory virtuale:

final Server server = new Server(); 
//skipped socketconnector initialization 

final WebAppContext js = new WebAppContext(); 
js.setServer(server); 
js.setContextPath("/js"); 
js.setWar("target/classes/js"); // or whatever the correct path is in your case 
server.addHandler(js); 

// css the same way 

final WebAppContext bb = new WebAppContext(); 
bb.setServer(server); 
bb.setContextPath("/"); 
bb.setWar("src/main/webapp"); 
server.addHandler(bb); 

server.start(); 
+0

Funziona come un incanto, grazie. –

+0

Perché sono necessari 'WebAppContext.setServer (Server)' e 'Server.addHandler (WebAppContext)'? – NSPKUWCExi2pr8wVoGNk

3

Per completezza, ecco la soluzione che ho usato:

final Server server = new Server(); 
//skipped socketconnector initialization 

final WebAppContext bb = new WebAppContext(); 
bb.setServer(server); 
bb.setContextPath("/"); 
bb.setWar("src/main/webapp"); 
final URL url = new File("target/classes").getAbsoluteFile().toURI().toURL(); 
final Resource resource = new FileResource(url); 
final ResourceHandler handler = new ResourceHandler(); 
handler.setBaseResource(resource); 
server.addHandler(handler); 
server.addHandler(bb); 
server.start(); 

Ma è non molto elegante, monta tutto in target/classi e usa la webapp solo come fallback.

Problemi correlati