jsp servlets jstl

jsp - ¿Cómo instalar JSTL? El uri absoluto: http://java.sun.com/jstl/core no se puede resolver



servlets (13)

org.apache.jasper.JasperException: el uri absoluto: http://java.sun.com/jstl/core no se puede resolver ni en web.xml ni en los archivos jar implementados con esta aplicación

Ese URI es para JSTL 1.0, pero en realidad estás usando JSTL 1.2 que usa URI con una ruta /jsp adicional (porque JSTL, quien inventó las expresiones EL, fue desde la versión 1.1 integrada como parte de JSP para compartir / reutilizar el EL lógica en JSP simple también).

Por lo tanto, arregle el URI taglib en consecuencia:

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

Además, su POM también especifica la implementación JSTL 1.1 de Apache a través de taglibs:standard . Esto es innecesario e incluso peligroso cuando ya tienes JSTL 1.2 API + impl incluido a través de javax.servlet:jstl . Solo la siguiente dependencia debería hacerlo para tener JSTL en su aplicación web dirigida a Tomcat (¡ no configure el <scope> como provided que Tomcat no lo proporcione en la caja!):

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

Los usuarios que no son Maven pueden lograr lo mismo al jstl-1.2.jar archivo jstl-1.2.jar en la carpeta /WEB-INF/lib del proyecto de la aplicación web (¡ no arrojen standard.jar o cualquier archivo .tld suelto allí!).

También debe asegurarse de que su web.xml se declare conforme al menos al Servlet 2.4 y, por lo tanto, no como Servlet 2.3 o anterior. De lo contrario, las expresiones EL dentro de las etiquetas JSTL a su vez no funcionarían. Elija la versión más alta que coincida con su contenedor de destino y asegúrese de que no tiene un <!DOCTYPE> en ningún lugar de su web.xml . Aquí hay un ejemplo compatible de Servlet 3.0 (Tomcat 7):

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <!-- Config here. --> </web-app>

Ver también:

  • Documentación JSTL core taglib (para los URI taglib correctos)
  • Página de información de etiquetas JSTL (para enlaces de descarga JSTL y ejemplos web.xml )

No sé lo que hice incorrectamente, pero no puedo incluir JSTL. Tengo jstl-1.2.jar, pero desafortunadamente recibo una excepción:

org.apache.jasper.JasperException: The absolute uri: http://java.sun.com/jstl/core cannot be resolved in either web.xml or the jar files deployed with this application at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:51) at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:409) at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:116) at org.apache.jasper.compiler.TagLibraryInfoImpl.generateTLDLocation(TagLibraryInfoImpl.java:315) at org.apache.jasper.compiler.TagLibraryInfoImpl.<init>(TagLibraryInfoImpl.java:148) at org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:429) at org.apache.jasper.compiler.Parser.parseDirective(Parser.java:492) at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1439) at org.apache.jasper.compiler.Parser.parse(Parser.java:137) at org.apache.jasper.compiler.ParserController.doParse(ParserController.java:255) at org.apache.jasper.compiler.ParserController.parse(ParserController.java:103) at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:170) at org.apache.jasper.compiler.Compiler.compile(Compiler.java:332) at org.apache.jasper.compiler.Compiler.compile(Compiler.java:312) at org.apache.jasper.compiler.Compiler.compile(Compiler.java:299) at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:586) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454) at java.lang.Thread.run(Thread.java:619)

Yo tengo:

  • pom.xml

    <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>taglibs</groupId> <artifactId>standard</artifactId> <version>1.1.2</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency>

  • web.xml

    <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">

  • index.jsp

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


  1. Descargar jstl-1.2.jar
  2. Agregue esta directiva a su página: <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

  3. Pegue el archivo JAR en su carpeta WEB-INF / lib. Esto debería funcionar. (Funcionó para mí.)


@BalusC tiene toda la razón, pero si aún te encuentras con esta excepción, significa que algo has hecho mal. La información más importante que encontrará se encuentra en la página SO JSTL Tag Info .

Básicamente, este es un resumen de lo que debe hacer para enfrentar esta excepción.

  1. Compruebe la versión del servlet en web.xml: <web-app version="2.5">

  2. Compruebe si la versión JSTL es compatible con esta versión de servlet: la versión de Servlet 2.5 utiliza JSTL 1.2 o la versión 2.4 de Servlet utiliza JSTL 1.1

  3. Su contenedor de servlets debe tener la biblioteca adecuada, o debe incluirlo manualmente en su aplicación. Por ejemplo: JSTL 1.2 requiere jstl-1.2.jar

Qué hacer con Tomcat 5 o 6:

Debe incluir jar (s) apropiados en su directorio WEB-INF / lib (solo funcionará para su aplicación) o para tomcat / lib (funcionará globalmente para todas las aplicaciones).

Lo último es un taglib en sus archivos jsp. Para JSTL 1.2 uno correcto es este:

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


Acaba de solucionar un problema similar en Eclipse con:

rightclick on project->Properties->Deployment Assembly->add Maven Dependencies

algo lo echó antes, mientras editaba mi pom.xml

Tenía todos los archivos jar necesarios, taglib uri y web.xml estaba bien


Encontré otro motivo para este tipo de error: en mi caso, alguien configuró catalina.properties estableciendo la propiedad tomcat.util.scan.StandardJarScanFilter.jarsToSkip en * para evitar el registro de mensajes de advertencia, omitiendo así el escaneo necesario por parte de Tomcat. Cambiar esto al valor predeterminado de Tomcat y agregar una lista apropiada de jar para omitir (sin incluir jstl-1.2 o spring-webmvc) resolvió el problema.


Había desactivado por completo las herramientas MAVEN y Spring. Y tuve que agregar los siguientes jar para hacer que mi entorno funcione correctamente.

  • spring-aop-4.0.3.RELEASE.jar
  • spring-beans-4.0.3.RELEASE.jar (difícil de encontrar esta corrección, otras org.springframework <3.versions> simplemente no funcionó.
  • spring-context-4.0.3.RELEASE.jar
  • spring-core-4.0.3.RELEASE.jar
  • spring-expression-4.0.3.RELEASE.jar
  • spring-web-4.0.3.RELEASE.jar
  • spring-webmvc-4.0.3.RELEASE.jar
  • jstl-1.2.jar

Lo peor de todo fue jstl-api-1.2.jar y javax-servlet.jsp.jst-api-1.2.1.jar . Simplemente no funcionó.

`jstl-1.2.jar funcionó bien.


Mencioné que la dependencia de Maven en pom.xml es incorrecta. Debería ser

<dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency>


Se resolvió un problema similar en IBM RAD 7.5 seleccionando:

  1. Propiedades de proyectos
  2. Project Facets
  3. Casilla de verificación JSTL

Si lo has intentado todo pero no ayudó, deberías reiniciar el servidor. En mi caso, me olvidé de reiniciar Tomcat, luego de agregar javax.servlet.jsp.jstl-1.2.1.jar al directorio lib .


Simple, agregue el jstl-1.2.jar en la carpeta tomcat/lib .

De esa forma, tus dependencias se reparan de nuevo.


Solo quería agregar la solución que encontré para este problema. No estoy seguro de por qué esto funcionó. Tenía la versión correcta de jstl (1.2) y también la versión correcta de servlet-api (2.5)

<dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency>

También tenía la dirección correcta en mi página como se sugiere en este hilo, que es

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

Lo que me solucionó este problema fue eliminar la etiqueta scope de mi archivo xml en la dependencia de pom for my jstl 1.2. Una vez más, no estoy seguro de por qué lo solucionó, pero en caso de que alguien esté haciendo la primavera con el tutorial de JPA e Hibernate en pluralsight y tenga su configuración pom de esta manera, intente eliminar la etiqueta de alcance y vea si eso lo soluciona. Como dije, funcionó para mí.


Todas las respuestas en esta pregunta me ayudaron pero pensé que agregaría algo de información adicional para la posteridad.

Resultó que tenía una dependencia de prueba en gwt-test-utils que traía el paquete gwt-dev . Lamentablemente, gwt-dev contiene una copia completa de Jetty, JSP, JSTL, etc. que estaba por delante de los paquetes adecuados en el classpath. Así que, aunque tenía dependencias adecuadas en el JSTL 1.2, gwt-dev versión 1.0 interna a gwt-dev . Queja.

La solución para mí fue no ejecutar con alcance de prueba, así que no recojo el gwt-test-utils en tiempo de ejecución. Eliminar el paquete gwt-dev del classpath de alguna otra manera también habría solucionado el problema.


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

también compruebe los javax.servlet.jsp.jstl-1.2.1.jar dependencia que ha agregado javax.servlet.jar y javax.servlet.jsp.jstl-1.2.1.jar o no en su carpeta WEB-INF / lib. En mi caso, estos dos resolvieron el problema.