Comenzando con jstl

Instalación

JSTL es parte de la API de Java EE y se incluye en servidores de aplicaciones de Java EE como WildFly, TomEE, GlassFish, pero no en contenedores de servlet barebones como Tomcat y embarcadero. JSTL son los taglibs que importa desde el espacio de nombres http://java.sun.com/jsp/jstl/*. JSTL no debe confundirse con una “biblioteca de etiquetas JSP personalizada” (donde usted define un archivo .tld usted mismo). JSTL tampoco debe confundirse con taglibs de marcos de terceros como JSF, Spring MVC, Struts, Displaytag, etcétera. JSTL tampoco debe confundirse con Expression Language (EL) (que son esas cosas ${}).

  1. Solo cuando su servletcontainer no se envía con JSTL incorporado (por ejemplo, Tomcat y Jetty), simplemente suelte jstl-1.2.jar directamente en la carpeta /WEB-INF/lib de la aplicación web (que está cubierto por el classpath de la aplicación web predeterminada, por lo que en un IDE un poco inteligente no necesita hacer nada más). Para empezar, no jugar con la configuración Build Path del proyecto IDE. Esto está mal.

    In case you’re using Maven, this is the coordinate:

     <dependency>
         <groupId>javax.servlet</groupId>
         <artifactId>jstl</artifactId>
         <version>1.2</version>
     </dependency>
    

    This is by the way the JSTL API bundled with Apache’s JSTL implementation in a single JAR flavor. This does not require the standard.jar (it’s for JSTL 1.1 only). Note that there’s also a jstl:jstl dependency, but it’s exactly the same file, only with a wrong group ID. Further there’s also a javax.servlet.jsp.jstl:jstl dependency, but it is empty.

  2. Declare taglib en el archivo JSP con el URI de TLD correcto. Puede encontrar aquí la documentación de TLD que se aplica tanto a JSTL 1.1 como a JSTL 1.2. Haga clic en el taglib de interés para obtener los ejemplos de declaración. Por ejemplo, JSTL core taglib

     <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    

    If you’re using Facelets or JSPX instead of JSP, it should be declared as XML namespace instead

     <anyxmlelement xmlns:c="http://java.sun.com/jsp/jstl/core">
    

Solo necesita asegurarse de que no tiene duplicados de versiones anteriores de JSTL en el classpath (incluye /lib de JDK/JRE y /lib del servidor) para evitar colisiones. Si tiene control total a nivel de administrador sobre el servidor, también puede colocar el archivo JAR en /lib del servidor en lugar de /WEB-INF/lib de la aplicación web para que se apliquen a todas las aplicaciones web implementadas. Al menos NO extraiga el(los) archivo(s) JAR y sature el classpath con su contenido (los archivos TLD sueltos) y/o declare los taglibs en el web.xml de su aplicación web como sugieren algunos tutoriales en línea deficientes.