Can not find the tag library descriptor for “http://java.sun.com/jsp/jstl/core”
JavaEclipseTomcatJstlJava Problem Overview
I have included this at the very top of my JSP page:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
I already placed the JSTL JAR file in the WEB-INF/lib
directory. But still, the JSP can't resolve the taglib. I get the below error:
> Can not find the tag library descriptor for “http://java.sun.com/jsp/jstl/core”
I am using Eclipse Juno and the project structure is shown below:
Java Solutions
Solution 1 - Java
> Can not find the tag library descriptor for “http://java.sun.com/jsp/jstl/core”
Based on one of your previous questions you're using Tomcat 7. In that case you need JSTL 1.2. However, you've there a jstl.jar
file while JSTL 1.2 has clearly the version number included like so jstl-1.2.jar
. The sole filename jstl.jar
is typical for JSTL 1.0 and 1.1. This version requires a standard.jar
along in /WEB-INF/lib
which contains the necessary TLD files. However, in your particular case the standard.jar
is clearly missing in /WEB-INF/lib
and that's exactly the reason why the taglib URI couldn't be resolved.
To solve this you must remove the wrong JAR file, download jstl-1.2.jar and drop it in its entirety in /WEB-INF/lib
. That's all. You do not need to extract it nor to fiddle in project's Build Path.
Don't forget to remove that loose c.tld
file too. It absolutely doesn't belong there. This is indeed instructed in some poor tutorials or answers elsewhere in the Internet. This is a myth caused by a major misunderstanding and misconfiguration. There is never a need to have a loose JSTL TLD file in the classpath, also not in previous JSTL versions.
In case you're using Maven, use the below coordinate:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
You should also make sure that your web.xml
is declared conform at least Servlet 2.4 and thus not as Servlet 2.3 or older. Otherwise EL expressions inside JSTL tags would in turn fail to work. Pick the highest version matching your target container and make sure that you don't have a <!DOCTYPE>
anywhere in your web.xml
. Here's a Servlet 3.0 (Tomcat 7) compatible example:
<?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>
###See also:
-
Our JSTL wiki page (you can reach there by hovering the mouse on [tag:jstl] and clicking info link)
Solution 2 - Java
I had same problem and despite having jstl
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
I had to add 'standard' as well:
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
Also, as mentioned in previous post:
- for version 1.0 use: http://java.sun.com/jstl/core
- for 1.1 (and later) use: http://java.sun.com/jsp/jstl/core
Solution 3 - Java
The URI depends on the version of JSTL you are using. For Version 1.0 use:
http://java.sun.com/jstl/core
and for 1.1 (and later), you need to use:
http://java.sun.com/jsp/jstl/core
Solution 4 - Java
If you are using maven your pom's <dependencies>
tag should look like:
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>javax.servlet.jsp.jstl-api</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
</dependencies>
It works for me.
Solution 5 - Java
Downloading jstl-1.2.jar instead of jstl.jar solves the problem
Solution 6 - Java
Make sure that both the below jars are present in the build path:
- standard-1.1.2.jar
- jstl-api-1.2.jar
Maven Dependencies are:
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>$1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency
Solution 7 - Java
This works as well:
<dependency>
<scope>compile</scope>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
so used jstl 1.2 instead of standard.jar together with jstl-api 1.2
Solution 8 - Java
To resolve the issue in jsp we have to use the dependency below in the pom file. If you dont use maven then download the dependency jar and add it to your WEB-INF directory.
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
<scope>compile</scope>
</dependency>
Solution 9 - Java
I found sometimes even with the right dependencies, Eclipse can still raise the error. Below are the methods I used to make Eclipse update:
Method 1 : Copy paste jsp.
error happens for jsp in deeper layer
I also find a strange situation that when the same jsp is deeper in my directory, its taglibs cannot be found. However, when it is under /webapp/ it has no issue.
I tried maven clean, maven build, project clean, all cannot resolve the problem.
I resolved it by deleting the jsp with error can copy the correct jsp from outer folder to inner folder again. Then the taglibs can be recognized.
jsp error resolved after copy paste jsp in outer folder
Therefore, I think it could be a bug by Eclipse itself.
My dependencies are like
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
Method 2 : change version of jstl and change back
try change version of jstl, then maven clean and maven update, then change back the version and maven clean again.
Solution 10 - Java
you need to configure this in web.xml as well.Please refer below code.
<taglib>
<taglib-uri>http://java.sun.com/jsp/jstl/core</taglib-uri>
<taglib-location>/WEB-INF/lib/c.tld</taglib-location>
</taglib>
Please let me know if you still face any issue.
Solution 11 - Java
Well, I have read this post and seems it is not good enough to fix this issue.
Spring based application on the tomcat 8 will not work.
Here is the solution
Step 1 ⇒ Add the following dependency in your pom.xml
<!-- JSTL Support -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
Step 2 ⇒ Add All following two statement in your JSP page, ensure that you are using isELIgnored="false" attribute in <%@ page %> tag
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" isELIgnored="false" pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
Step 3 ⇒ Remove all the other configuration that you have done till now in web.xml or anywhere else :)
Step 4 ⇒ Clean the Tomcat and restart Tomcat.
Side Note ⇒ Actually, JSTL will work with only 3.x Servlet specifications on Tomcat 8.
[http://www.kriblog.com/j2ee/jsp/jstl-with-spring-4-on-tomcat-8.html]
Solution 12 - Java
To make it work:
Add jstl and standard jar files to your library.
Hope it helps.. :)
Solution 13 - Java
add the maven dependencies:
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
<scope>compile</scope>
</dependency>
Solution 14 - Java
Simply download javax.servlet.jsp.jstl.jar and add to your build path and WEB-INF/lib
if you simply developing dynamic web application.
When you develop dynamic web application using maven then add javax.servlet.jsp.jstl dependency in pom file.
Thanks
nirmalrajsanjeev
Solution 15 - Java
What worked for me (I use Java 8 and Tomcat 9 in Eclipse 2019):
pom.xml
<!-- jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>javax.servlet.jsp.jstl-api</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
.jsp file
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
Solution 16 - Java
This is a very common error while working on JSTL.
To solve this error simply :-
- Download jstl-1.1.2.jar and standard-1.1.2.jar
- And then just paste them in lib folder under WEB-INF of your Dynamic Web App project.
You will find the error has gone now!
Hope this helps.
Solution 17 - Java
I got the same error message (Eclipse Enterprise 2020-06, Tomcat 8.5, dynamic web project), even after I downloaded version 1.2.5 of the jst library (here), dropped it into the "WEB-INF/lib" folder and added <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
to the very top of the jsp file.
Using version 1.2 (here) instead fixed it.