Comparativa JSP Scriptlets vs EL JSTL - eliizquierdo/material_programacion_avanzada2026 GitHub Wiki
scriptlets vs el jstl · MD
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.
| 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í |
| Scriptlet | EL | |
|---|---|---|
| Código | <%= request.getAttribute("nombre") %> |
${nombre} |
| Si el atributo es null |
NullPointerException (o muestra null) |
No muestra nada (sin error) |
| Scriptlet | EL | |
|---|---|---|
| Código | <%= request.getContextPath() %> |
${pageContext.request.contextPath} |
| Setup necesario | Ninguno (o guardar en variable) | Ninguno |
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.
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>Con scriptlets:
<input type="text" name="nombre" value="<%= request.getAttribute("nombre") %>" />Con EL:
<input type="text" name="nombre" value="${nombre}" />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.
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.
| 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 |
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? →
