Servlets y JSP: tutorial Jakarta EE 10 y Java 21

Las páginas JSP permiten escribir HTML con fragmentos de Java incrustados. Tomcat las compila automáticamente a Servlets la primera vez que se solicitan.

Sintaxis básica de JSP

<%-- Esto es un comentario JSP (no aparece en el HTML generado) --%>

<%-- Directiva de página --%>
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ page import="java.util.List, java.time.LocalDate" %>

<!DOCTYPE html>
<html>
<head><title>Mi JSP</title></head>
<body>

<%-- Expresión: imprime el valor directamente --%>
<p>Fecha: <%= LocalDate.now() %></p>

<%-- Scriptlet: bloque de código Java --%>
<%
    String usuario = (String) session.getAttribute("usuario");
    if (usuario == null) {
        response.sendRedirect("login.jsp");
        return;
    }
%>

<p>Bienvenido, <%= usuario %></p>

<%-- Declaración: define métodos o variables de instancia del Servlet generado --%>
<%!
    private String formatear(String s) { return s.toUpperCase(); }
%>

</body>
</html>

Objetos implícitos de JSP

Dentro de una página JSP tienes disponibles sin declararlos:

  • requestHttpServletRequest
  • responseHttpServletResponse
  • sessionHttpSession
  • applicationServletContext
  • outJspWriter (el PrintWriter de la respuesta)
  • pageContext — acceso a todos los ámbitos
  • configServletConfig

JSTL: adiós a los scriptlets

La forma moderna de escribir JSP evita los scriptlets y usa JSTL (Jakarta Standard Tag Library) en su lugar:

<%@ taglib prefix="c" uri="jakarta.tags.core" %>
<%@ taglib prefix="fmt" uri="jakarta.tags.fmt" %>

<c:if test="${not empty usuario}">
    <p>Bienvenido, <c:out value="${usuario}"/></p>
</c:if>

<c:choose>
    <c:when test="${pedido.estado == 'ENVIADO'}">
        <span class="badge green">Enviado</span>
    </c:when>
    <c:otherwise>
        <span class="badge yellow">Pendiente</span>
    </c:otherwise>
</c:choose>

<c:forEach items="${productos}" var="p" varStatus="st">
    <tr>
        <td>${st.index + 1}</td>
        <td><c:out value="${p.nombre}"/></td>
        <td><fmt:formatNumber value="${p.precio}" type="currency" currencySymbol="€"/></td>
    </tr>
</c:forEach>

<c:url value="/productos" var="urlProductos">
    <c:param name="pagina" value="${pagActual + 1}"/>
</c:url>
<a href="${urlProductos}">Siguiente →</a>

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR