Volver a la Guía

Simuladores Interactivos

Simulador de Flujo MVC

Observa cómo viaja una petición HTTP a través de las capas

Vista (JSP)

Muestra datos al usuario

<c:forEach items="${productos}">

Controlador (Servlet)

Coordina el flujo

@WebServlet("/productos")

Modelo (DAO)

Accede a datos

ProductoDAO.insertar()
👤 Usuario
📄 Vista
⚙️ Servlet
🗄️ DAO
💾 BD
// Payload HTTP
[00:00:00] INFO Simulador listo. Presiona "Simular Petición".

Simulador CRUD Interactivo

Practica Crear, Leer, Actualizar y Eliminar productos

0 seleccionados

Nuevo Producto

El código es obligatorio
El nombre debe tener al menos 3 caracteres
El precio debe ser mayor a 0
El stock no puede ser negativo
Código Nombre Categoría Precio Stock Acciones
[00:00:00] INFO CRUD simulado — Datos en memoria con categorías y búsqueda.

Simulador de Inyección SQL

Aprende cómo prevenir ataques con PreparedStatement

Intenta diferentes entradas y observa la diferencia entre código vulnerable y PreparedStatement seguro.

👥 usuarios

id, nombre, email, password

5

registros

📦 productos

id, codigo, nombre, precio

12

registros

📋 pedidos

id, usuario_id, total, fecha

28

registros

Código Vulnerable

Ingresa un valor y presiona Ejecutar

Código Seguro (PreparedStatement)

Ingresa un valor y presiona Ejecutar
// PreparedStatement: bind de parámetros

Ataques para probar

  • 1 OR 1=1 — Devuelve TODOS los usuarios
  • 1 UNION SELECT * FROM productos — Fuga de datos
  • 1; DROP TABLE usuarios-- — Elimina tabla completa
  • ' OR '1'='1 — Bypass de autenticación
  • admin'-- — Comentario SQL para bypass
  • 1 AND 1=1 — Blind SQL injection

Ciclo de Vida del Servlet

Visualiza las fases: Constructor → init() → service() → destroy()

Servlet inactivo Peticiones: 0

1. Constructor

Se crea la instancia del Servlet

2. init()

Inicialización (una sola vez)

3. service()

Atiende cada petición

4. destroy()

Limpieza al apagar

// El código del Servlet aparecerá aquí

Simulador de Peticiones HTTP

Peticiones atendidas en service(): 0
Thread Pool del Contenedor (Tomcat)
T1 T2 T3 T4 T5
Cola:
1x
[00:00:00] INFO Presiona "Iniciar Ciclo" para ver el ciclo de vida.

JDBC vs ORM (JPA/Hibernate)

Compara el enfoque tradicional con el enfoque ORM

~45
Líneas JDPC (CRUD completo)
~12
Líneas JPA (CRUD completo)
JDBC Boilerplate
45 líneas
JPA Código
12 líneas

JDBC — CRUD completo

JPA — CRUD completo

JDBC Puro

  • ✓ Control total del SQL
  • ✓ Sin dependencias extra
  • ✓ Optimizable al máximo
  • ✗ Mucho código boilerplate
  • ✗ Lento de desarrollar
  • ✗ Errores SQL en runtime

JPA/Hibernate

  • ✓ 70% menos código
  • ✓ SQL generado automático
  • ✓ Errores en compilación
  • ✗ Dependencia Hibernate
  • ✗ Curva de aprendizaje
  • ✗ N+1 queries problem

Analogía Flask: JDBC ≈ db.engine.execute("INSERT...") | JPA ≈ db.session.add(objeto) (SQLAlchemy ORM)

Ciclo de Petición: Servlet → JSP

Animación del flujo completo de una petición HTTP en el patrón MVC.

CRUD Security: SQL Injection vs PreparedStatement

Compara código vulnerable con PreparedStatement seguro.

JSTL Expression Builder

Genera expresiones JSTL interactivamente.

Session Management Simulator

Simula el ciclo de vida de una sesión HTTP.