2010-09-15 24 views
7

J'ai une classe principale qui configure et déclenche Jetty. (C'est une pratique courante de Wicket pour tester une webapp, mais il est vraiment pas spécifique portillons.)Ajouter des ressources à Jetty par programmation

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

Comme vous pouvez le voir, src/main/webapp est utilisé en tant que root webapp. Cependant, j'ai des ressources qui sont dans target/classes et qui sont copiées dans la webapp plus tard. Donc, je voudrais ajouter des répertoires virtuels à la jetée.

Je voudrais carte target/classes/js à /js et target/classes/css-/css

Quelqu'un peut-il aider?

BTW: il est jetée 6.1.4

Répondre

8

Ajouter un WebAppContext pour chaque répertoire virtuel:

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

Fonctionne comme un charme, merci. –

+0

Pourquoi les deux 'WebAppContext.setServer (Server)' et 'Server.addHandler (WebAppContext)' sont-ils nécessaires? – NSPKUWCExi2pr8wVoGNk

3

Pour être complet, voici la solution que j'utilise:

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

Mais il est pas très élégant, il monte tout dans la cible/classes et utilise la webapp uniquement comme solution de repli.