Observa cómo viaja una petición HTTP a través de las capas
Muestra datos al usuario
<c:forEach items="${productos}">
Coordina el flujo
@WebServlet("/productos")
Accede a datos
ProductoDAO.insertar()
Practica Crear, Leer, Actualizar y Eliminar productos
| Código | Nombre | Categoría | Precio | Stock | Acciones |
|---|
Aprende cómo prevenir ataques con PreparedStatement
Intenta diferentes entradas y observa la diferencia entre código vulnerable y PreparedStatement seguro.
id, nombre, email, password
registros
id, codigo, nombre, precio
registros
id, usuario_id, total, fecha
registros
1 OR 1=1 — Devuelve TODOS los usuarios1 UNION SELECT * FROM productos — Fuga de datos1; DROP TABLE usuarios-- — Elimina tabla completa' OR '1'='1 — Bypass de autenticaciónadmin'-- — Comentario SQL para bypass1 AND 1=1 — Blind SQL injectionVisualiza las fases: Constructor → init() → service() → destroy()
Se crea la instancia del Servlet
Inicialización (una sola vez)
Atiende cada petición
Limpieza al apagar
Compara el enfoque tradicional con el enfoque ORM
Analogía Flask:
JDBC ≈ db.engine.execute("INSERT...") |
JPA ≈ db.session.add(objeto) (SQLAlchemy ORM)
Animación del flujo completo de una petición HTTP en el patrón MVC.
Compara código vulnerable con PreparedStatement seguro.
Genera expresiones JSTL interactivamente.
Simula el ciclo de vida de una sesión HTTP.