Ejemplo de proyecto basico con MVC - eliizquierdo/material_programacion_avanzada2026 GitHub Wiki
Introducción
El resultado final de este proyecto es visualizar un formulario en el navegador web que permita ingresar datos de personas, guardarlos en una lista (en memoria RAM) y mostrar la lista en una tabla, de la que se pueda editar y eliminar registros.
Para ello se utilizarán JSP para la vista y Servlets para el controlador.
Qué vamos a lograr (vista general y MVC)
Modelo (M)
Vamos a utilizar PersonaVO y PersonaDAO para representar datos y operaciones en memoria. Mantendremos un contrato simple (agregar, getLista) que nos permitirá migrar a JDBC más adelante sin cambiar vistas ni controlador.
Vista (V)
Vamos a diseñar tres JSP dentro de webapp/:
index.jsp(inicio y navegación)WEB-INF/vista/persona-form.jsp(formulario de alta)WEB-INF/vista/persona-lista.jsp(listado)
Usaremos baseURL para construir rutas robustas y vamos a limitar la lógica en las vistas a impresión de datos y enlaces.
Controlador (C)
Vamos a centralizar la navegación en el Servlet PersonaControladorServlet, anotado con @WebServlet("/persona"). Este controlador recibirá el parámetro action y decidirá el flujo:
action=form→ forward aWEB-INF/vista/persona-form.jspaction=listaro sin action → obtiene datos del DAO y hace forward aWEB-INF/vista/persona-lista.jspaction=agregar(POST) → crea PersonaVO, llama aPersonaDAO.agregar(...)y aplicará PRG consendRedirecthacia/personapara mostrar el listado actualizado
Creación de la Estructura del Proyecto
PASO 1: Crear el Proyecto
Creamos el proyecto como ya hemos visto anteriormente usando VS Code.
PASO 2: Completar la estructura y crear carpetas, packages y archivos
La estructura básica de un proyecto Maven creada con maven-archetype-webapp incluye:
- Un archivo
pom.xmlválido - La estructura de carpetas básica
mi-proyecto/
├── pom.xml
├── src/
│ └── main/
│ └── webapp/
│ ├── index.jsp
│ └── WEB-INF/
│ └── web.xml
└── target/ (generado al compilar)
Para convertirlo en un proyecto con patrón MVC se agrega:
EJEMPLO-MVC/
├── pom.xml
├── src/
│ └── main/
│ ├── java/ ← NUEVO: código Java
│ │ ├── controlador/
│ │ │ └── PersonaControladorServlet.java
│ │ └── modelo/
│ │ ├── dao/
│ │ │ └── PersonaDAO.java
│ │ └── vo/
│ │ └── PersonaVO.java
│ └── webapp/
│ ├── index.jsp
│ ├── css/ ← NUEVO: estilos
│ │ └── styles.css
│ └── WEB-INF/
│ ├── web.xml
│ └── vista/ ← NUEVO: JSP de la vista
│ ├── persona-form.jsp
│ └── persona-lista.jsp
└── target/ (generado por Maven, no modificar)
Estructura de carpetas a agregar:
- Carpeta
javadentro de la carpetamainexistente- Para ello hacer clic derecho sobre
mainy elegir la opción New Folder del menú contextual
- Para ello hacer clic derecho sobre
- En la carpeta
javaagregar las carpetas:modelo.vomodelo.daocontrolador
- En la carpeta
webappagregar las carpetas:css(opcional si agrega estilos)WEB-INF/vista
💡 Nota: Algunas de estas carpetas serán luego packages, pero eso se hace desde el código declarándose como tal.
No crear un Main.java, ya no se usará. En lugar de eso, se crearán Servlets o JSPs.
PASO 3: Estructura del Proyecto MVC
Una vez creadas las carpetas y packages, agregar las clases de Java y los archivos JSP y CSS.
Estructura final del proyecto:
Archivos del Proyecto
1. PersonaVO.java (Value Object)
Clase que representa la entidad Persona con sus atributos código y nombre.
2. PersonaDAO.java (Data Access Object)
Clase que maneja las operaciones CRUD en memoria para las personas:
agregar(PersonaVO p): Agrega una persona a la listagetLista(): Retorna la lista completa de personaseliminar(int codigo): Elimina una persona por códigoactualizar(PersonaVO p): Actualiza una persona existenteobtenerXCodigo(int cod): Obtiene una persona por código
3. PersonaControladorServlet.java
Servlet principal que maneja las peticiones HTTP:
- GET: Maneja la visualización de formularios y listados
- POST: Procesa el envío de datos del formulario
4. persona-form.jsp
JSP que contiene el formulario para agregar nuevas personas con campos para código y nombre.
5. persona-lista.jsp
JSP que muestra la tabla con todas las personas registradas, incluyendo botones para editar y eliminar (actualmente deshabilitados).
6. styles.css
Archivo de estilos CSS que proporciona el diseño visual para:
- Formularios con layout en grid
- Tablas responsivas
- Botones con diferentes variantes (primario, secundario, editar, eliminar)
- Contenedores y tipografías
Características del Proyecto
- Patrón MVC bien definido
- Responsive design con CSS Grid y Flexbox
- Gestión de rutas robusta con
baseURL - Patrón PRG (Post-Redirect-Get) para evitar reenvíos accidentales
- Validación de formularios
- Estilos consistentes y profesionales
- Preparado para migrar a base de datos JDBC sin cambios en vista ni controlador
Continuamos por la página de inicio VISTA-index
📋 Palabras clave
MVC · PersonaVO · PersonaDAO · PersonaControladorServlet · JSP · CRUD · ArrayList · baseURL · patrón PRG · formulario · lista de personas · estructura de proyecto
🧠 Autoevaluación — Mini-CRUD con MVC