Eliminando código Java en JSP: 3 potentes enfoques de JSP 2

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Adiós, código espagueti: cómo eliminar Java de JSP de una vez por todas

\n\n

Si alguna vez ha abierto un archivo JSP antiguo y ha visto una mezcla de HTML, <% %> scriptlets y lógica en Java, conoce esa sensación. La mezcla de presentación y lógica de negocio convierte el mantenimiento del proyecto en un infierno. La pregunta "How can I avoid Java code in JSP files, using JSP 2?" en Stack Overflow ha acumulado miles de visitas, y con razón.

\n\n

La buena noticia: JSP 2 (Java Server Pages versión 2) nos dio las herramientas para olvidarnos para siempre de los scriptlets. En este artículo mostraré tres enfoques reales que convertirán sus JSP en plantillas limpias y legibles. Sin rodeos, solo código y práctica.

\n\n

¿Por qué los scriptlets son malos? La mirada del desarrollador

\n\n

Los scriptlets (esos <% ... %>) violan el principio principal de MVC: separación de lógica y presentación. Aquí hay tres razones por las que debe deshacerse de ellos:

\n\n
    \n
  • Dificultad de mantenimiento. Cuando hay consultas SQL y operadores condicionales en el JSP, el diseñador no puede modificar el maquetado de forma segura.
  • \n
  • Pruebas difíciles. La lógica dentro del JSP no se puede probar con unit tests.
  • \n
  • Mala legibilidad. El código se convierte en "espagueti", donde Java se mezcla con HTML.
  • \n
\n\n

JSP 2 ofrece alternativas elegantes. Analicémoslas con un ejemplo real: mostrar una lista de usuarios desde la base de datos.

\n\n

Enfoque 1: Expression Language (EL) — su nuevo amigo

\n\n

Expression Language (EL) permite acceder a objetos Java directamente en JSP sin una sola línea de código Java. La sintaxis ${...} es intuitiva.

\n\n

Antes (con código Java):

\n\n
<% \n    User user = (User) request.getAttribute("user"); \n    out.println("Hola, " + user.getName());\n%>
\n\n

Después (con EL):

\n\n
<p>Hola, ${user.name}</p>
\n\n

EL llama automáticamente a los getters. Si user.getName() devuelve una cadena, se insertará en el HTML. Si el objeto es null, EL simplemente no mostrará nada (sin NullPointerException).

\n\n

Dónde usarlo: para mostrar datos del ámbito request, session, application o parámetros de solicitud.

\n\n

Enfoque 2: JSTL (JSP Standard Tag Library) — bucles y condiciones sin Java

\n\n

JSTL es un conjunto de tags listos para usar que cubren el 90% de las tareas típicas: bucles, condiciones, formato, trabajo con URL. Para usarlo, solo necesita agregar la dependencia en pom.xml (Maven) o descargar el JAR.

\n\n

Ejemplo: mostrar una lista de usuarios en una tabla.

\n\n

Antes (scriptlets):

\n\n
<table>\n    <%\n        List<User> users = (List<User>) request.getAttribute("users");\n        for (User u : users) {\n    %>\n        <tr><td><%= u.getName() %></td><td><%= u.getEmail() %></td></tr>\n    <%\n        }\n    %>\n</table>
\n\n

Después (JSTL + EL):

\n\n
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>\n<table>\n    <c:forEach var="u" items="${users}">\n        <tr>\n            <td>${u.name}</td>\n            <td>${u.email}</td>\n        </tr>\n    </c:forEach>\n</table>
\n\n

Observe: ¡ni una sola línea de Java! El tag <c:forEach> funciona como un bucle foreach, y ${u.name} es una expresión EL. El código se ha vuelto legible y seguro.

\n\n

Otros tags útiles de JSTL:

\n
    \n
  • <c:if test="${condition}"> — salida condicional
  • \n
  • <c:choose> — análogo a switch
  • \n
  • <c:set var="x" value="..." /> — creación de variables
  • \n
  • <fmt:formatDate> — formato de fechas
  • \n
\n\n

Enfoque 3: Custom Tags (tags personalizados

Blogs

Book Recommendations