Estoy intentando configurar un servicio web simple para mi aplicación incrustando Jetty. Me gustaría tener dos servicios web diferentes disponibles, un servidor HTTP simple que solo sirve contenido estático (que finalmente será una aplicación GWT) y un servlet personalizado que puede escupir los mensajes de estado JSON para la aplicación.¿Cómo configuro recursos estáticos y servicios personalizados con Jetty integrado?
Mi estructura de carpetas de distribución se ve algo como esto:
+ dist/
- MyApp.jar
+ lib/
+ html/
- index.html
Y esto es lo que tengo hasta ahora para la configuración del servidor incorporado. Obtengo correctamente mi salida de prueba de mi servlet personalizado al visitar http://localhost/data/
, pero parece que no puedo conseguir que DefaultServlet encuentre mi archivo index.html.
public Webserver(int port) {
server = new Server(port);
ServletContextHandler context = new ServletContextHandler();
context.setResourceBase("./html/");
server.setHandler(context);
JsonDataApiServlet dataServlet = new JsonDataApiServlet();
DefaultServlet staticServlet = new DefaultServlet();
context.addServlet(new ServletHolder(dataServlet), "/data/*");
context.addServlet(new ServletHolder(staticServlet), "/*");
}
Parece que esta sería una tarea común para las personas que integran Jetty en las cosas ... ¿estoy incluso en el camino correcto?
Editar
Resulta que este problema se debía a una falta de comprensión de la forma en que se calculan las rutas relativas en el interior del embarcadero. Estaba ejecutando esto desde una carpeta encima de la carpeta dist, usando java -jar dist\MyApp.jar
, y Jetty estaba buscando dist\..\html
en lugar de la dist\html
correcta. Ejecutar el jar desde el interior de la carpeta dist corrige el problema. Voy a responder cómo lo hice funcionar sin tener que ejecutar desde el directorio dist.
_ Parece que no puedo obtener DefaultServlet para encontrar mi archivo index.html_ Entonces, ¿qué comportamiento ves cuando visitas "/index.html". ¿Qué salida de registro produce Jetty? – Tim
Gracias Tim, ese comentario me llevó en la dirección correcta. – Collin