Repository navigation
Controlador PersonaControladorServlet2
📦 Proyecto:
mini-crud1(Fase 2) — ⬇️ Descargar ZIP · ☁️ Abrir en Codespace
Vamos a analizar ahora qué cambios debemos hacer para agregar las funciones de editar y eliminar a nuestro CRUD.
-
GET action=agregar → abre
/WEB-INF/vista/persona-form.jsp -
GET action=cargarEditar&codigo=... → abre
/WEB-INF/vista/persona-editar.jspcon datos - POST action=agregar|editar|eliminar → procesa y aplica PRG
package controlador;
import java.io.IOException;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.*;
import modelo.dao.PersonaDAO;
import modelo.vo.PersonaVO;
@WebServlet("/persona")
public class PersonaControladorServlet extends HttpServlet {
private final PersonaDAO dao = new PersonaDAO();
// ======================== GET ========================
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String action = request.getParameter("action");
if (action == null)
action = ""; // evita NPE en switch
switch (action) {
case "agregar": // mostrar formulario de alta (GET)
request.getRequestDispatcher("/WEB-INF/vista/persona-form.jsp")
.forward(request, response);
break;
case "cargarEditar": // mostrar formulario de edición (GET)
cargarEditar(request, response);
break;
case "listar": // listar explícito
listar(request, response);
break;
default: // sin action o desconocida → listar
listar(request, response);
break;
}
}
// ======================== POST ========================
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
String action = request.getParameter("action");
if (action == null) {
response.sendRedirect(request.getContextPath() + "/persona");
return;
}
switch (action) {
case "agregar":
agregar(request, response);
break;
case "editar":
editar(request, response);
break;
case "eliminar":
eliminar(request, response);
break; // eliminar por POST
default:
response.sendRedirect(request.getContextPath() + "/persona");
}
}
// ===================== Acciones privadas =====================
private void agregar(HttpServletRequest request, HttpServletResponse response)
throws IOException {
int codigo = Integer.parseInt(request.getParameter("codigo"));
String nombre = request.getParameter("nombre");
dao.agregar(new PersonaVO(codigo, nombre.trim()));
// PRG → volver a listar
response.sendRedirect(request.getContextPath() + "/persona");
}
private void editar(HttpServletRequest request, HttpServletResponse response)
throws IOException {
int codigo = Integer.parseInt(request.getParameter("codigo"));
String nombre = request.getParameter("nombre");
dao.actualizar(new PersonaVO(codigo, nombre.trim()));
// PRG → volver a listar
response.sendRedirect(request.getContextPath() + "/persona");
}
private void eliminar(HttpServletRequest request, HttpServletResponse response)
throws IOException {
int codigo = Integer.parseInt(request.getParameter("codigo"));
dao.eliminar(codigo);
// PRG → volver a listar
response.sendRedirect(request.getContextPath() + "/persona");
}
private void cargarEditar(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
int codigo = Integer.parseInt(request.getParameter("codigo"));
PersonaVO persona = dao.obtenerXCodigo(codigo);
if (persona != null) {
request.setAttribute("persona", persona);
request.getRequestDispatcher("/WEB-INF/vista/persona-editar.jsp")
.forward(request, response);
} else {
response.sendRedirect(request.getContextPath() + "/persona");
}
}
private void listar(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setAttribute("personas", dao.getLista());
request.getRequestDispatcher("/WEB-INF/vista/persona-lista.jsp")
.forward(request, response);
}
}En el método doGet() aparece el nuevo caso:
case "cargarEditar": // mostrar formulario de edición
cargarEditar(request, response);
break;¿Qué hace?
-
action=cargarEditar&codigo=...→ formulario de edición - Llama al método privado
cargarEditar(...), que busca por código y, si existe, precarga los datos en/WEB-INF/vista/persona-editar.jsp
private void cargarEditar(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
int codigo = Integer.parseInt(request.getParameter("codigo"));
PersonaVO persona = dao.obtenerXCodigo(codigo);
if (persona != null) {
request.setAttribute("persona", persona);
request.getRequestDispatcher("/WEB-INF/vista/persona-editar.jsp")
.forward(request, response);
} else {
response.sendRedirect(request.getContextPath() + "/persona");
}
}¿Qué hace?
- Lee el código desde la URL
- Pide al DAO la persona correspondiente
- Si la encuentra, la inyecta como atributo
personay hace forward al JSP de edición - Si no existe, redirige al listado
En el método doPost() se agregaron los nuevos casos:
switch (action) {
case "agregar":
agregar(request, response);
break;
case "editar":
editar(request, response);
break;
case "eliminar":
eliminar(request, response);
break; // eliminar por POST
default:
response.sendRedirect(request.getContextPath() + "/persona");
}private void editar(HttpServletRequest request, HttpServletResponse response)
throws IOException {
int codigo = Integer.parseInt(request.getParameter("codigo"));
String nombre = request.getParameter("nombre");
dao.actualizar(new PersonaVO(codigo, nombre.trim()));
response.sendRedirect(request.getContextPath() + "/persona"); // PRG → listar
}Flujo:
- Recibe código (normalmente readonly en el formulario de edición) y nombre actualizado
- Llama a
dao.actualizar(...) - Vuelve al listado con PRG
private void eliminar(HttpServletRequest request, HttpServletResponse response)
throws IOException {
int codigo = Integer.parseInt(request.getParameter("codigo"));
dao.eliminar(codigo);
response.sendRedirect(request.getContextPath() + "/persona"); // PRG → listar
}Flujo:
- Recibe el código a eliminar (desde un formulario con
method="post"en la tabla) - Llama a
dao.eliminar(codigo)y redirige al listado
Luego de cada operación POST (agregar, editar, eliminar) se mantiene el mismo patrón:
response.sendRedirect(request.getContextPath() + "/persona"); // PRG → listar¿Por qué?
- Evita el reenvío del formulario si el usuario actualiza la página
- Fuerza a que el navegador haga un GET al listado, lo que deja la UI en un estado consistente
-
GET: Se agregó
cargarEditarpara mostrar formulario con datos precargados -
POST: Se agregaron
editaryeliminarpara procesar las operaciones -
Métodos auxiliares: Nuevos métodos
editar(),eliminar()ycargarEditar() - PRG: Se mantiene el patrón en todas las operaciones POST
Continuemos con VISTA- Editar Persona
PersonaControladorServlet · editar · eliminar · cargarEditar · doGet · doPost · obtenerXCodigo · PRG · sendRedirect · actualizar · CRUD completo · switch
🧠 Autoevaluación — Mini-CRUD con MVC
← PersonaDAO y PersonaVO · 🏠 Inicio · VISTA: Editar Persona →
- Introducción a VS Code
- Primeros pasos en VS Code
- Preparación del entorno Java Web
- ☁️ Cómo usar GitHub Codespace
Tema 1: Manejo básico de Java Web
- Introducción a Maven
- Ciclo de una petición web
- JSP con Scriptlets
- ¿Qué es un archivo JSP?
- Comparativa JSP Scriptlets vs ELJSTL
- ¿Qué es un Servlet?
- Mi primer formulario con Servlet
- HTTP Sessions
Tema 2: Modelo Vista Controlador (MVC)
- ¿Qué es el MVC?
-
Ejemplo básico MVC (MINI-CRUD)
- VISTA-index
- VISTA- Agregar Persona
- VISTA- Listar Personas
- CONTROLADOR- PersonaControladorServlet
- MODELO- DAO/VO
- CONTROLADOR- PersonaControladorServlet2
- VISTA- Editar Persona
- VISTA- Listar Persona
- Validación de unicidad de código
- Validación de campos obligatorios
- Comparativa persona-form.jsp
- Comparativa JSP puro vs MVC
Tema 3: Conexión a Base de Datos
Tema 4: Base de Datos con herencia
