Can not find the tag library descriptor for “http://java.sun.com/jsp/jstl/core”

JavaEclipseTomcatJstl

Java 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:

enter image description here

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:

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:

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:

  1. standard-1.1.2.jar
  2. 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 :-

  1. Download jstl-1.1.2.jar and standard-1.1.2.jar
  2. 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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser962206View Question on Stackoverflow
Solution 1 - JavaBalusCView Answer on Stackoverflow
Solution 2 - JavaNenad BulatovićView Answer on Stackoverflow
Solution 3 - JavanfechnerView Answer on Stackoverflow
Solution 4 - JavaEA0906View Answer on Stackoverflow
Solution 5 - Javashikha singhView Answer on Stackoverflow
Solution 6 - JavaAnshul SoodView Answer on Stackoverflow
Solution 7 - JavaTomas AntosView Answer on Stackoverflow
Solution 8 - JavaPrince SinghView Answer on Stackoverflow
Solution 9 - JavaYu Tian TobyView Answer on Stackoverflow
Solution 10 - JavaGautamView Answer on Stackoverflow
Solution 11 - Javauser1788142View Answer on Stackoverflow
Solution 12 - JavaSarat ChandraView Answer on Stackoverflow
Solution 13 - JavaDev MView Answer on Stackoverflow
Solution 14 - JavaSanjeev KumarView Answer on Stackoverflow
Solution 15 - JavakarkanisView Answer on Stackoverflow
Solution 16 - JavaIndranil MullickView Answer on Stackoverflow
Solution 17 - JavaNephView Answer on Stackoverflow