馃敡 La clase principal de un proyecto web Java con Jetty embebido

En esta entrada vamos a revisar una clase clave en el desarrollo de aplicaciones web modernas en Java: la clase principal que arranca un servidor Jetty embebido. En lugar de desplegar un .war en un servidor externo, esta estrategia permite ejecutar toda la aplicaci贸n desde un 煤nico main() en un jar, ideal para microservicios, sistemas de ventas ligeros o herramientas internas.

Vamos a ver c贸mo est谩 construida la clase Appventas, que forma el n煤cleo de un proyecto web embebido con servlets, filtros y recursos est谩ticos.


馃殌 ¿Qu茅 hace esta clase?

La clase Appventas cumple una funci贸n central:

  • Levanta un servidor Jetty en el puerto 8080.
  • Configura el contexto web /AppVentas.
  • Sirve recursos est谩ticos (CSS, JS).
  • Aplica un filtro de autenticaci贸n en rutas protegidas.
  • Declara y registra todos los servlets del sistema manualmente.

馃П Estructura general


public class Appventas {
    public static void main(String[] args) throws Exception {
        Server server = new Server(8080);
        WebAppContext context = new WebAppContext();
        context.setContextPath("/AppVentas");

        String resourceBase = Appventas.class.getClassLoader().getResource("static").toExternalForm();
        context.setResourceBase(resourceBase);
        context.setInitParameter("org.eclipse.jetty.servlet.Default.dirAllowed", "false");
        context.setParentLoaderPriority(true);

        context.addServlet(DefaultServlet.class, "/css/*");
        context.addServlet(DefaultServlet.class, "/scripts/*");

        context.addFilter(new FilterHolder(new AuthFilter()), "/secured/*", null);

        context.addServlet(new ServletHolder(new LoginServlet()), "/login");
        context.addServlet(new ServletHolder(new IndexServlet()), "/index");
        context.addServlet(new ServletHolder(new RootRedirectServlet()), "/");

        context.addServlet(new ServletHolder(new ListarEmpresa()), "/secured/listarempresa");
        context.addServlet(new ServletHolder(new SeleccionEmpresa()), "/secured/seleccionempresa");
        context.addServlet(new ServletHolder(new Boleta()), "/secured/boleta");
        context.addServlet(new ServletHolder(new PosMovil()), "/secured/posmovil");
        context.addServlet(new ServletHolder(new ConsultaStock()), "/secured/consultastock");

        context.addServlet(new ServletHolder(new ProductoServlet()), "/secured/producto");
        context.addServlet(new ServletHolder(new SeleccionProducto()), "/secured/seleccionarProducto");
        context.addServlet(new ServletHolder(new ListProducto()), "/secured/listarProducto");
        context.addServlet(new ServletHolder(new BuscaProductoCod()), "/secured/buscaproductocod");
        context.addServlet(new ServletHolder(new BuscaProductoNom()), "/secured/buscaproductonom");

        context.addServlet(new ServletHolder(new ListCliProv()), "/secured/listcliprov");
        context.addServlet(new ServletHolder(new SelectCliProv()), "/secured/selectcliprov");

        server.setHandler(context);
        server.start();
        server.join();
    }
}

馃搶 Puntos destacados

  • WebAppContext: se configura el contextPath en /AppVentas.
  • Recursos est谩ticos: se obtienen desde /static en el classpath y se exponen en /css y /scripts.
  • Servlets expl铆citos: todos los endpoints est谩n claramente definidos en el c贸digo.
  • Filtro de autenticaci贸n: solo afecta rutas /secured/*.
  • Separaci贸n l贸gica: los servlets est谩n organizados por funci贸n: productos, POS, login, etc.

⚙️ ¿C贸mo se ejecuta?

Compila y ejecuta el .jar directamente:


java -cp target/AppVentas.jar com.egga.appventas.Appventas

Y abre en el navegador:


http://localhost:8080/AppVentas

馃Л Conclusi贸n

La clase Appventas es el n煤cleo de una arquitectura embebida simple y poderosa. Jetty permite montar toda una aplicaci贸n web Java sin contenedor externo, y este dise帽o deja todo el ciclo de vida del servidor en manos del desarrollador. Es ideal cuando se busca portabilidad, control total y despliegue sencillo.

¿Quieres extender esto con HTTPS, logs, o una API REST? Jetty lo permite con facilidad.

Comentarios

Entradas populares de este blog

Configurando Servlets y JSP en Jetty

Firma de un Documento XML con Certificado Digital en Java para Uso Tributario en Chile

RESOLUCION SET BASICO DE FACTURA ELECTR脫NICA SII