Skip to content

Archivos JSP

Elizabeth Izquierdo edited this page Sep 1, 2026 · 7 revisions

¿Qué son los 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

Dependencia JSTL en pom.xml

⚠️ Antes de usar JSTL (<c:forEach>, <c:if>, etc.) es necesario agregar la dependencia en el pom.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.* con javax.* causa errores de carga de clases.


Sintaxis básica de JSP

1. Directivas JSP

<%@ 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

2. Expression Language (EL) — mostrar valores

${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.

3. JSTL Core — lógica de presentación

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>

Patrones comunes

1. Configuración inicial (común en todos los JSP)

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="c" uri="jakarta.tags.core" %>

2. URLs con contextPath

<!-- 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">

3. Mostrar un mensaje del servidor

<c:if test="${not empty mensaje}">
    <p class="mensaje">${mensaje}</p>
</c:if>

4. Mostrar una lista de datos

<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>

5. Campo de formulario precargado

<!-- Campo vacío -->
<input type="text" name="nombre" required />
 
<!-- Campo con valor del servidor -->
<input type="text" name="nombre" value="${nombre}" required />

Flujo de datos en JSP

Controlador → request.setAttribute("dato", valor)
    ↓
JSP → accede al atributo con EL
    ↓
EL / JSTL → ${dato}, <c:forEach>, <c:if>
    ↓
HTML generado → enviado al navegador

Errores comunes

❌ 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.


📋 Palabras clave

JSP · JavaServer Pages · Expression Language · EL · ${variable} · JSTL · taglib · c:if · c:forEach · contextPath · contentType · UTF-8 · Vista MVC


🧠 Autoevaluación — JSP


← ¿Qué es un archivo JSP? (Scriptlets) · 🏠 Inicio · Comparativa Scriptlets vs EL/JSTL →

Clone this wiki locally