Comparativa JSP Scriptlets vs EL JSTL - eliizquierdo/material_programacion_avanzada2026 GitHub Wiki

scriptlets vs el jstl · MD

Comparativa: Scriptlets vs Expression Language + JSTL

Esta página compara las dos formas de escribir JSP: la forma tradicional con scriptlets y la forma moderna con EL y JSTL. El objetivo es entender qué cambia, y por qué el enfoque actual es preferido.


Tabla comparativa general

Scriptlets EL + JSTL
Época de uso JSP 1.x (años 2000) JSP 2.x en adelante (actual)
Lenguaje en el JSP Java embebido en HTML Solo etiquetas y expresiones ${}
Legibilidad Baja cuando hay lógica Alta — se parece más a HTML puro
Requiere importar clases Sí (<%@ page import="..." %>) No
Null safety Manual (hay que validar) Automática (${null} no rompe la página)
Recomendado hoy No Sí

Comparativa por caso de uso

Mostrar un valor simple

Scriptlet EL
Código <%= request.getAttribute("nombre") %> ${nombre}
Si el atributo es null NullPointerException (o muestra null) No muestra nada (sin error)

Obtener la ruta base de la aplicación

Scriptlet EL
Código <%= request.getContextPath() %> ${pageContext.request.contextPath}
Setup necesario Ninguno (o guardar en variable) Ninguno

Mostrar una lista de datos

Con scriptlets:

<%
List<String> lista = (List<String>) request.getAttribute("nombres");
if (lista != null && !lista.isEmpty()) {
    for (String nombre : lista) {
%>
    <tr>
        <td><%= nombre %></td>
    </tr>
<%
    }
} else {
%>
    <tr><td>No hay datos</td></tr>
<% } %>

Con EL + JSTL:

<c:if test="${not empty nombres}">
    <c:forEach var="nombre" items="${nombres}">
        <tr>
            <td>${nombre}</td>
        </tr>
    </c:forEach>
</c:if>
<c:if test="${empty nombres}">
    <tr><td>No hay datos</td></tr>
</c:if>

Diferencia clave: en la versión con EL/JSTL no hay ni una línea de Java. La lógica de iteración y condición está en etiquetas que se pueden leer sin conocer Java.


Condicional simple

Con scriptlets:

<% if (request.getAttribute("mensaje") != null) { %>
    <p><%= request.getAttribute("mensaje") %></p>
<% } %>

Con JSTL:

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

Campo de formulario precargado

Con scriptlets:

<input type="text" name="nombre" value="<%= request.getAttribute("nombre") %>" />

Con EL:

<input type="text" name="nombre" value="${nombre}" />

¿Por qué la diferencia importa?

Los dos enfoques producen el mismo HTML final en el navegador. La diferencia está en cómo se escribe y mantiene el JSP:

Scriptlets mezclan Java con HTML, lo que genera archivos difíciles de leer cuando la lógica crece. Además, el código Java en el JSP no se puede probar de forma aislada y requiere que quien edita la vista entienda Java.

EL + JSTL mantiene el JSP cerca del HTML. La vista se puede leer, modificar y depurar sin tocar código Java. La lógica de negocio permanece en el controlador, y el JSP solo se ocupa de mostrar datos.


¿Qué encontrar en código existente?

En proyectos antiguos, en tutoriales de internet y en ejemplos de libros anteriores al año 2010 es habitual encontrar scriptlets. También aparecen en documentación no actualizada de algunos frameworks. Si se trabaja con ese código, lo recomendable es reescribirlo con EL/JSTL antes que mantenerlo con scriptlets.

💡 Cuando lleguen al proyecto del curso, van a ver estos mismos patrones aplicados con los objetos del modelo (VO y DAO). La lógica es idéntica — solo cambia el nombre de los atributos y los tipos de datos.


Resumen rápido

Situación Usar
Proyecto nuevo EL + JSTL
Código legado a mantener Reescribir a EL + JSTL si es posible
Encontrar ejemplos en internet con <%= %> Saber leerlos, pero no copiarlos directamente

📋 Palabras clave

JSP · scriptlet · <% %> · <%= %> · Expression Language · EL · ${variable} · JSTL · c:if · c:forEach · comparativa · código legado · buenas prácticas · Vista MVC


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

⚠️ **GitHub.com Fallback** ⚠️