Repository navigation
Archivos JSP
JSP (JavaServer Pages) son páginas web dinámicas que combinan HTML estático con datos que vienen del servidor. Se ejecutan en el servidor y generan HTML que se envía al navegador del cliente.
Características principales:
- Se compilan automáticamente en servlets
- Permiten mostrar datos dinámicos dentro del HTML usando Expression Language (EL) y JSTL, sin escribir código Java directamente en la vista
- Facilitan la separación entre presentación y lógica
- Son parte de la Vista en el patrón MVC
⚠️ Antes de usar JSTL (<c:forEach>,<c:if>, etc.) es necesario agregar la dependencia en elpom.xml. Sin esto, el servidor lanza un error 500 al encontrar las etiquetas JSTL.
Para Tomcat 10+ (Jakarta EE — versión del curso):
<!-- JSTL API -->
<dependency>
<groupId>jakarta.servlet.jsp.jstl</groupId>
<artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
<version>3.0.0</version>
</dependency>
<!-- Implementación de JSTL -->
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>jakarta.servlet.jsp.jstl</artifactId>
<version>3.0.1</version>
</dependency>Para Tomcat 9 (Java EE / javax):
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>💡 Usar la versión que corresponda al Tomcat que se esté utilizando. Mezclar
jakarta.*conjavax.*causa errores de carga de clases.
<%@ directiva atributo="valor" %>Ejemplos:
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="c" uri="jakarta.tags.core" %>¿Para qué sirven?
-
contentType: Define el tipo de contenido y codificación -
taglib: Habilita las etiquetas JSTL (como<c:if>y<c:forEach>) en el JSP
${expresión}EL es la forma moderna y recomendada de mostrar datos en un JSP.
Ejemplos:
${pageContext.request.contextPath} <!-- ruta base de la aplicación -->
${nombre} <!-- atributo "nombre" del request -->
${mensaje} <!-- atributo "mensaje" del request -->💡 Si
${nombre}es null, EL no rompe la página — simplemente no muestra nada. Esto es una ventaja importante frente a la forma antigua con scriptlets.
JSTL (JavaServer Standard Tag Library) aporta etiquetas para condicionales e iteraciones, sin necesitar código Java en el JSP.
<!-- Condicional -->
<c:if test="${not empty mensaje}">
<p>${mensaje}</p>
</c:if>
<!-- Iteración -->
<c:forEach var="item" items="${lista}">
<p>${item}</p>
</c:forEach><%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="c" uri="jakarta.tags.core" %><!-- Hoja de estilos -->
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/styles.css" />
<!-- Enlace -->
<a href="${pageContext.request.contextPath}/productos?action=listar">Ver lista</a>
<!-- Formulario -->
<form action="${pageContext.request.contextPath}/productos" method="post"><c:if test="${not empty mensaje}">
<p class="mensaje">${mensaje}</p>
</c:if><c:if test="${not empty lista}">
<c:forEach var="item" items="${lista}">
<li>${item}</li>
</c:forEach>
</c:if>
<c:if test="${empty lista}">
<p>No hay datos para mostrar.</p>
</c:if><!-- Campo vacío -->
<input type="text" name="nombre" required />
<!-- Campo con valor del servidor -->
<input type="text" name="nombre" value="${nombre}" required />Controlador → request.setAttribute("dato", valor)
↓
JSP → accede al atributo con EL
↓
EL / JSTL → ${dato}, <c:forEach>, <c:if>
↓
HTML generado → enviado al navegador
❌ Olvidar declarar el taglib:
<c:if test="${not empty nombre}"> <!-- Error: c:if no reconocido -->✅ Declarar el taglib al principio del JSP:
<%@ taglib prefix="c" uri="jakarta.tags.core" %>❌ URLs hardcodeadas:
<form action="/productos" method="post"> <!-- Puede romperse según el contexto -->✅ URLs con contextPath:
<form action="${pageContext.request.contextPath}/productos" method="post">💡 Cuando lleguen al proyecto del curso, van a aplicar estos mismos patrones con los objetos del modelo. La estructura es exactamente la misma — cambia el nombre de los atributos y los datos que se muestran.
Para una referencia detallada con el proyecto completo, ver Anexo — Referencia JSP del proyecto.
JSP · JavaServer Pages · Expression Language · EL · ${variable} · JSTL · taglib · c:if · c:forEach · contextPath · contentType · UTF-8 · Vista MVC
← ¿Qué es un archivo JSP? (Scriptlets) · 🏠 Inicio · Comparativa Scriptlets vs EL/JSTL →
- 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
