2010-09-15 17 views
7

Tengo una clase principal que configura e inicia Jetty. (Eso es práctica habitual de Wicket para probar una aplicación web, pero en realidad no es portillo-específica.)Agregar recursos a Jetty mediante programación

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

Como se puede ver, src/main/webapp se utiliza como root webapp. Sin embargo, tengo algunos recursos que están en target/classes y que luego se copian a la aplicación web. Así que me gustaría agregar directorios virtuales a embarcadero.

me gustaría mapa target/classes/js a /js y target/classes/css a /css

¿Alguien puede ayudar?

Por cierto: Es embarcadero 6.1.4

Respuesta

8

Añadir un WebAppContext para cada directorio virtual:

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

Funciona como un encanto, gracias. –

+0

¿Por qué son necesarios tanto 'WebAppContext.setServer (Server)' como 'Server.addHandler (WebAppContext)'? – NSPKUWCExi2pr8wVoGNk

3

Para completar, aquí está la solución que he estado usando:

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

Pero es no es muy elegante, monta todo en target/classes y usa la aplicación web solo como respaldo.

Cuestiones relacionadas