Entradas

Instalando Jetty fuera del IDE: una guía desde la documentación oficial

Mirando la documentación del sitio oficial de Jetty me encontré con esto: Jetty no está pensado para trabajar directamente con JSPs dentro de un IDE como NetBeans. Eso me obligó a salir de la comodidad del entorno y aprender a configurarlo desde cero, como un contenedor web independiente. En esta entrada compartiré los pasos que seguí para instalar Jetty de forma manual, fuera del IDE. Si estás buscando una alternativa liviana a Tomcat, esta guía puede ayudarte a comenzar. Paso 1: Descarga Jetty desde la página oficial Ve a https://eclipse.dev/jetty/download y descarga la versión estable más reciente. En mi caso, bajé el archivo ZIP correspondiente a Jetty 12. Paso 2: Descomprime y estructura Una vez descomprimido, verás una estructura como esta: jetty-home/ ├── bin/ ├── etc/ ├── lib/ ├── modules/ └── start.jar Paso 3: Crea el directorio de la aplicación (jetty-base) Jetty utiliza una estructura llamada jetty-base para alojar tu aplicación. Puedes crearla así: ...

❌ La debilidad de Jetty en entornos de desarrollo con JSP y NetBeans

Publicado por Esteban Guenul – julio 2025 Nota del autor: esta entrada está basada en una experiencia real mientras desarrollaba con JSPs en Jetty y NetBeans. El problema me obligó a reconsiderar mi flujo de trabajo. En el desarrollo web con Java, muchas veces se prefiere Jetty por su ligereza, velocidad de arranque y flexibilidad modular. Sin embargo, cuando se trabaja con JSPs y un IDE como NetBeans , es importante conocer una de sus principales debilidades: Jetty no ofrece un soporte directo y fluido para JSP en entornos de desarrollo integrados como sí lo hace Tomcat . 🔍 ¿Qué problema presenta Jetty con JSP? Cuando intentamos trabajar con páginas JSP directamente desde NetBeans usando Jetty como contenedor embebido o como servidor de ejecución, nos encontramos con: ❌ Falta de compilación automática de JSPs ❌ Sin integración IDE para visualizar cambios en tiempo real ❌ Errores de clase faltante o ClassNotFoundException al renderizar JSP ❌ Necesidad de configura...

🔧 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 se...

🛡️ Implementando un Filtro de Autenticación en una Aplicación Web Java

En el desarrollo de aplicaciones web seguras, es esencial contar con mecanismos que restrinjan el acceso a ciertas rutas si el usuario no está autenticado. Una forma eficaz de lograrlo es mediante filtros ( Filter ) en Java EE o Jakarta EE. En este artículo veremos cómo implementar un filtro de autenticación sencillo y cómo integrarlo tanto en un despliegue tradicional como en un entorno embebido con Jetty. 💡 Ejemplo práctico: AuthFilter.java package com.egga.appventas.filters; import jakarta.servlet.Filter; import jakarta.servlet.FilterChain; import jakarta.servlet.FilterConfig; import jakarta.servlet.ServletException; import jakarta.servlet.ServletRequest; import jakarta.servlet.ServletResponse; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; public class AuthFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { // Inicializació...

🛠 Plantilla Maven Java 21 con Jetty, JasperReports, Gson y más

Si estás desarrollando una aplicación Java moderna basada en servlets y necesitas una configuración completa con soporte para PDF, reportes, HTML dinámico y más, esta plantilla Maven te puede ahorrar mucho tiempo. La he usado para varios proyectos y está pensada para correr en Jetty o Tomcat sin depender de Spring Boot. Incluye integración con: Java 21 Servidor Jetty 11 (compatible con Jakarta EE 10) JasperReports Gson para JSON Thymeleaf para vistas HTML MySQL Connector iTextPDF para generar PDFs Log4j 2 para logging Soporte para carga de archivos Y más... 📦 Estructura del pom.xml Aquí te dejo el pom.xml completo listo para usar. Solo necesitas cambiar el mainClass en el plugin exec-maven-plugin y en el maven-assembly-plugin si tu clase principal tiene otro nombre. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="htt...

HTML para el usuario, REST solo cuando hace falta

En tiempos donde todo parece girar en torno a las API REST, es fácil caer en el exceso: cargar todos los datos de un formulario HTML mediante múltiples fetch() , aunque el mismo backend podría entregarlos de una sola vez. Esta entrada no pretende demonizar REST ni JavaScript, sino promover un uso consciente: mantener el HTML limpio y funcional, y recurrir a fetch o APIs REST solo cuando realmente se necesita. Principio guía: simple por defecto, dinámico cuando sea necesario ¿Qué se puede renderizar directo en HTML? Listas estáticas o semi-estáticas: países, categorías, bancos, etc. Datos que ya vienen desde el servidor y no dependen de la interacción del usuario. ¿Cuándo usar fetch tiene sentido? Selects encadenados: región → ciudad → comuna. Formularios que requieren datos según otra selección. Interacción dinámica que mejora la UX (como autocompletar). Ejemplo híbrido: lo mejor de ambos mundos <select ...

Interfaces en Java: Abstracción y Bases de Datos

¿Qué es una interfaz en Java y por qué es tan importante? Cuando comienzas a desarrollar en Java, rápidamente te topas con el concepto de interfaces . Puede sonar abstracto (y lo es), pero entender bien qué son y cómo usarlas marca una gran diferencia en cómo estructuras tu código. ¿Qué es una interfaz? Una interfaz en Java es un contrato: define un conjunto de métodos que una clase debe implementar. No dice cómo deben funcionar esos métodos, solo que deben existir. En otras palabras, una interfaz define el comportamiento esperado de una clase, sin preocuparse de la implementación. ¿Por qué usar interfaces? Desacoplamiento: separas la definición de comportamiento de la implementación concreta. Flexibilidad: puedes cambiar la implementación sin afectar el resto del sistema. Testeo más fácil: puedes usar objetos simulados (mocks) para pruebas. Polimorfismo: puedes tratar objetos diferentes como si fueran del mismo tipo (la interfaz). Ejemplo simple public ...