175

I don't know what I've done incorrectly, but I can't include JSTL. I have jstl-1.2.jar, but unfortunately I get exception:

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)

I have:

  • 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>
    
Reinderien
  • 11,755
  • 5
  • 49
  • 77
lukastymo
  • 26,145
  • 14
  • 53
  • 66

21 Answers21

279

In your specific case,

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

that URI is for JSTL 1.0, but you're actually using JSTL 1.2 which uses URIs with an additional /jsp path. This URI change is because JSTL, who invented EL expressions, was since version 1.1 integrated as part of JSP 2.0 (released way back in 2001!) in order to share/reuse the EL logic in plain JSP too. See also Difference between JSP EL, JSF EL and Unified EL.

So, fix the taglib URI accordingly based on JSTL 1.2 documentation:

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

Further you need to make absolutely sure that you do not throw multiple different versioned JSTL JAR files together into the runtime classpath or versions which don't match the expected version by the target runtime (the server). Otherwise you risk seeing other errors like below:

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

java.lang.NoClassDefFoundError: javax/servlet/jsp/tagext/TagLibraryValidator

java.lang.NoClassDefFoundError: jakarta/servlet/jsp/tagext/TagLibraryValidator

This is a pretty common mistake among Tomcat users. The problem with Tomcat is that it does not offer JSTL out the box and thus you have to manually install it. This is not necessary in normal Jakarta EE servers. See also What exactly is Java EE? and How to properly configure Jakarta EE libraries in Maven pom.xml for Tomcat?

In your specific case, your pom.xml basically tells you that you have jstl-1.2.jar and standard-1.1.2.jar together. This is wrong. You're basically mixing JSTL 1.2 API+impl from Oracle (GlassFish) with JSTL 1.1 impl from Apache. You should remove duplicate JSTL implementations and stick to only one JSTL implementation and the API version must match the impl version and the API version must be supported by the target runtime.

Installing JSTL on Tomcat 10.1.x

In case you're already on Tomcat 10.1.x (the second Jakartified version, with jakarta.* package instead of javax.* package, but the first version with the updated jakarta.tags.* namespace URNs instead of http://java.sun.com/jsp/jstl/* namespace URLs), use JSTL 3.0 via these dependency using the default Maven scope of compile (because Tomcat doesn't provide it out the box!):

<dependency>
    <groupId>org.glassfish.web</groupId>
    <artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
    <version>3.0.0</version>
</dependency>
<dependency>
    <groupId>org.glassfish.web</groupId>
    <artifactId>jakarta.servlet.jsp.jstl</artifactId>
    <version>3.0.1</version>
</dependency>

Note that the API dependency is since this version not transitively included via the impl dependency, so you do need to explicitly declare it.

Non-Maven users can achieve the same by dropping the following two physical files in /WEB-INF/lib folder of the web application project (do absolutely not drop standard*.jar or any loose .tld files in there! remove them if necessary).

As said, the namespace URIs have been changed to become URNs instead of URLs. JSTL core is since JSTL version 3.0 available via an easier to remember namespace URI in URN format:

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

See also JSTL 3.0 documentation.

In case you actually wanted to use the JSTL impl of Apache instead of EE4J then you need to know that they don't have a 3.0 let alone 2.0. The currently latest released version of Apache's JSTL impl is 1.2.3 and it is not anymore actively maintained since Feb 2015. The JSTL impl from EE4J (formerly Oracle / Sun) is currently (Jul 2023) your only choice.

Installing JSTL on Tomcat 10.0.x

In case you're on Tomcat 10.0.x (the first Jakartified version, with jakarta.* package instead of javax.* package), use JSTL 2.0 via this sole dependency using the default Maven scope of compile (because Tomcat doesn't provide it out the box!):

<dependency>
    <groupId>org.glassfish.web</groupId>
    <artifactId>jakarta.servlet.jsp.jstl</artifactId>
    <version>2.0.0</version>
</dependency>

Note that the API dependency is already transitively included via this impl dependency, so you do not need to explicitly declare it.

Non-Maven users can achieve the same by dropping the following two physical files in /WEB-INF/lib folder of the web application project (do absolutely not drop standard*.jar or any loose .tld files in there! remove them if necessary).

Installing JSTL on Tomcat 9-

In case you're not on Tomcat 10 yet, but still on Tomcat 9 or older, use JSTL 1.2 via this sole dependency (this is compatible with Tomcat 9 / 8 / 7 / 6 / 5 but not older) using the default Maven scope of compile (because Tomcat doesn't provide it out the box!):

<dependency>
    <groupId>org.glassfish.web</groupId>
    <artifactId>jakarta.servlet.jsp.jstl</artifactId>
    <version>1.2.6</version>
</dependency>

Note that the API dependency is already transitively included via this impl dependency, so you do not need to explicitly declare it.

Non-Maven users can achieve the same by dropping the following two physical files in /WEB-INF/lib folder of the web application project (do absolutely not drop standard*.jar or any loose .tld files in there! remove them if necessary).

Installing JSTL on normal JEE server

In case you're actually using a normal Jakarta EE server such as WildFly, Payara, TomEE, GlassFish, WebSphere, OpenLiberty, WebLogic, etc instead of a barebones servletcontainer such as Tomcat, Jetty, Undertow, etc, then you do not need to explicitly install JSTL at all. Normal Jakarta EE servers already provide JSTL out the box. In other words, you don't need to add JSTL to pom.xml nor to drop any JAR/TLD files in webapp. Solely the provided scoped Jakarta EE coordinate is sufficient:

<dependency>
    <groupId>jakarta.platform</groupId>
    <artifactId>jakarta.jakartaee-api</artifactId>
    <version><!-- 10.0.0, 9.1.0, 9.0.0, 8.0.0, etc depending on your server --></version>
    <scope>provided</scope>
</dependency>

Make sure web.xml version is right

Further 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 as that would otherwise still trigger Servlet 2.3 modus. Here's a Servlet 6.0 (Tomcat 10.1.x) compatible example:

<?xml version="1.0" encoding="UTF-8"?>
<web-app 
    xmlns="https://jakarta.ee/xml/ns/jakartaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"
    version="6.0">

    <!-- Config here. -->

</web-app>

And here's a Servlet 5.0 (Tomcat 10.0.x) compatible example:

<?xml version="1.0" encoding="UTF-8"?>
<web-app 
    xmlns="https://jakarta.ee/xml/ns/jakartaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
    version="5.0">

    <!-- Config here. -->

</web-app>

And here's a Servlet 4.0 (Tomcat 9) compatible example:

<?xml version="1.0" encoding="UTF-8"?>
<web-app
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
    version="4.0">

    <!-- Config here. -->

</web-app>

See also:

BalusC
  • 1,082,665
  • 372
  • 3,610
  • 3,555
  • I've changed to /jsp and: org.apache.jasper.JasperException: The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml .... – lukastymo Feb 08 '11 at 00:28
  • 4
    I really like the JSTL wiki page that you put together. However, since this question is the top hit from Google for the particular error message, I'm taking the liberty to edit it and note that the "non-jsp" URI is from JSTL 1.0. – kdgregory Mar 08 '12 at 15:31
  • @TheJeed: there are more links available in JSTL wiki page. – BalusC Apr 05 '13 at 10:57
  • @BalusC Please help me here: http://stackoverflow.com/questions/28474448/the-absolute-uri-http-java-sun-com-jsp-jstl-core-cannot-be-resolved-in-either –  Feb 12 '15 at 10:53
  • 1
    if you're using Gradle, add this dependency: `compile('javax.servlet:jstl:1.2')` – benscabbia Feb 22 '16 at 09:08
  • 1
    @BalusC in `Intelij IDEA` after doing what you have mentioned the code got working fine, but lines `http://java.sun.com/jsp/jstl/core` and `` are indicated in red and editor shows cannot resolve error on them. How to fix it? is there any other place that I need to add above libs in `IDEA` – Kasun Siyambalapitiya May 18 '17 at 03:37
  • @BalusC I do not see that jakarta.servlet.jsp.jstl implies that jakarta.servlet.jsp.jstl-api is declared. I have to declare jakarta.servlet.jsp.jstl-api seperately. – ericj Jul 28 '23 at 19:52
  • Right, they changed it in 3.0.0. I'll fix the answer. – BalusC Jul 29 '23 at 12:01
  • @BalusC, many thanks! I think the groupId for jakarta.servlet.jsp.jstl-api is jakarta.servlet.jsp.jstl (as seen in the POM: https://central.sonatype.com/artifact/org.glassfish.web/jakarta.servlet.jsp.jstl/3.0.1) – zakmck Jul 31 '23 at 21:22
36

@BalusC is completely right, but If you still encounter this exception, it means that something you have done wrong. The most important information you will find is on the SO JSTL Tag Info page.

Basically this is a summary of what you need to do to deal with this exception.

  1. Check the servlet version in web.xml: <web-app version="2.5">

  2. Check if JSTL version is supported for this servlet version: Servlet version 2.5 uses JSTL 1.2 or Servlet version 2.4 uses JSTL 1.1

  3. Your servlet container must have the appropriate library, or you must include it manually in your application. For example: JSTL 1.2 requires jstl-1.2.jar

What to do with Tomcat 5 or 6:

You need to include appropriate jar(s) into your WEB-INF/lib directory (it will work only for your application) or to the tomcat/lib (will work globally for all applications).

The last thing is a taglib in your jsp files. For JSTL 1.2 correct one is this:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
Stephen P
  • 14,422
  • 2
  • 43
  • 67
lukastymo
  • 26,145
  • 14
  • 53
  • 66
  • 3
    I've noticed that this question is quite popular (many viewers). So this is why I had decided to write short tutorial how to deal with this problem – lukastymo Oct 05 '11 at 20:15
19

I found another reason for this type of error: in my case, someone set the conf/catalina.properties setting tomcat.util.scan.StandardJarScanFilter.jarsToSkip property to * to avoid log warning messages, thereby skipping the necessary scan by Tomcat. Changing this back to the Tomcat default and adding an appropriate list of jars to skip (not including jstl-1.2 or spring-webmvc) solved the problem.

Gary Sheppard
  • 4,764
  • 3
  • 25
  • 35
resnbl
  • 191
  • 2
  • 4
  • Yes!. Me too. Someone (=myself) at some point put `tomcat.util.scan.StandardJarScanFilter.jarsToSkip=*` into `catalina.properties` file in a (misunderstood?) attempt to speed up Tomcat start up time. Arghh! – peterh Sep 11 '16 at 16:19
  • I use the following script to create a jarsToSkip list which avoids TLDs and web-fragment jars: https://pastebin.com/3Bfm1u6K – ikaerom Jul 17 '18 at 19:25
  • 2
    If you don't want to change your `jarsToSkip` setting, below it there is a `jarsToScan` setting that overrides anything in `jarsToSkip`. We ended up adding `taglibs*.jar` to our `jarsToScan` as our taglibs were `taglibs-standard-impl-1.2.5.jar` and `taglibs-standard-spec-1.2.5.jar`. – jabe Jan 22 '19 at 19:33
  • 2
    This is the answer that worked for me. In `conf/catalina.properties`, I changed `tomcat.util.scan.StandardJarScanFilter.jarsToSkip=*.jar` to `tomcat.util.scan.StandardJarScanFilter.jarsToScan=jstl*.jar` and that fixed it. – Gary Sheppard Mar 04 '19 at 14:48
  • Similar to this, jar scanning might have been disabled in META-INF/context.xml with . – scharette Nov 30 '21 at 18:02
16
  1. Download jstl-1.2.jar
  2. Add this directive to your page: <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

  3. Paste the JAR file in your WEB-INF/lib folder. This should work. (It worked for me.)

Bhaskara Arani
  • 1,556
  • 1
  • 26
  • 44
Prashant Ghimire
  • 4,890
  • 3
  • 35
  • 46
15
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" %>

also please check for the dependency jars that you have added javax.servlet.jar and javax.servlet.jsp.jstl-1.2.1.jar or not in your WEB-INF/lib folder. In my case these two solved the issue.

Gray
  • 115,027
  • 24
  • 293
  • 354
KKA
  • 161
  • 1
  • 6
13

Add the jstl-1.2.jar into the tomcat/lib folder.

With this, your dependency error will be fixed again.

Hadi Rasouli
  • 1,871
  • 3
  • 27
  • 43
5

I just wanted to add the fix I found for this issue. I'm not sure why this worked. I had the correct version of jstl (1.2) and also the correct version of 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>

I also had the correct address in my page as suggested in this thread, which is

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

What fixed this issue for me was removing the scope tag from my xml file in the pom for my jstl 1.2 dependency. Again not sure why that fixed it but just in case someone is doing the spring with JPA and Hibernate tutorial on pluralsight and has their pom setup this way, try removing the scope tag and see if that fixes it. Like I said it worked for me.

Meyer
  • 1,662
  • 7
  • 21
  • 20
gnattyp
  • 94
  • 1
  • 4
  • Any idea how to use your fix above with embedded Jetty 9? Did what you suggest but still get PWC6188 under embedded Jetty. Thx for posting! – Stefan Aug 25 '22 at 09:12
5

An answer for the year 2021

The question is still very popular, but all the answers are seriously outdated. All Java EE components were split off into various Jakarta projects and JSTL is no different. So here are the correct Maven dependencies as of today:

<dependency>
    <groupId>jakarta.servlet.jsp.jstl</groupId>
    <artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
    <version>1.2.7</version>
</dependency>
<dependency>
    <groupId>org.glassfish.web</groupId>
    <artifactId>jakarta.servlet.jsp.jstl</artifactId>
    <version>1.2.6</version>
</dependency>

Yes, the versions and groupIds do not match, but that's a quirk of the project's current state.

JohnEye
  • 6,436
  • 4
  • 41
  • 67
  • yes, but this does not solve my problem but close, with tomcat10, you need two libs * taglibs-standard-impl-1.2.5-migrated-0.0.1.jar * taglibs-standard-spec-1.2.5-migrated-0.0.1.jar this lib can be retrieved from tomcat10 sample webapps also dont scan taglibs-standard* as tld files is in there, this can be disable in context.xml in the webapp META-CONF lib – Jasonw Jul 29 '20 at 07:07
  • Anybody got any idea how to this in Jetty? Getting the PWC6188 but I'm using embedded Jetty and none of the fixes here work. My POM keeps expanding but I'm still stuck with exactly the same PWC6188 this question is for. – Stefan Aug 25 '22 at 09:08
3

I have mentioned that the Maven dependency in the pom.xml is wrong. It should be

    <dependency>
        <groupId>jstl</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
LoBo
  • 212
  • 1
  • 2
  • 9
  • Interesting, when I search for jstl in maven I find myself in: http://mvnrepository.com/artifact/javax.servlet.jsp.jstl/jstl/1.2 How did you find this dependency? – Koray Tugay Mar 05 '16 at 20:25
3

The most possible solutions for 2022

1 - Missing Libarires: download the library jstl/1.2 and Java Servlet API » 4.0.1

2 - Add these libraries to your project and also into the tomcat/lib folder.

3 - Add: <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> first line of the page.

4 - if you are using maven add the following into pom.xml file :

<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>
Abd Abughazaleh
  • 4,615
  • 3
  • 44
  • 53
  • Added these but still have PWC6188 - "The absolute uri: http://java.sun.com/jsp/jstl/fmt cannot be resolved in either web.xml or the jar files deployed with this application" error but with Jetty 9 embedded specifically... any idea how to make it work in Jetty? – Stefan Aug 25 '22 at 09:44
2

Just had similar problem in Eclipse fixed with:

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

something kicked it out before, while I was editing my pom.xml

I had all needed jar files, taglib uri and web.xml was ok

w3Charlie
  • 85
  • 1
  • 3
  • 17
2

I had disabled MAVEN and Spring tools completely. And I had to add the following jar's for making my environment work right.

  • spring-aop-4.0.3.RELEASE.jar
  • spring-beans-4.0.3.RELEASE.jar (tough to find this fix, other org.springframework<3.versions> just did not work.
  • 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

The worst of all was jstl-api-1.2.jar and javax-servlet.jsp.jst-api-1.2.1.jar. They just did not work.

jstl-1.2.jar worked well.

Reinderien
  • 11,755
  • 5
  • 49
  • 77
Siddharth
  • 9,349
  • 16
  • 86
  • 148
  • 1
    +1 After hitting my head against the wall for hours, using `jstl-1.2` instead of `jstl-1.2.1` worked for me as well, and I have no idea why. – avojak Mar 13 '18 at 21:00
2

If you use Spring boot, consider to remove server.tomcat.additional-tld-skip-patterns=*.jar from Application.properties if there is any

Askar
  • 544
  • 1
  • 6
  • 17
0

All of the answers in this question helped me but I thought I'd add some additional information for posterity.

It turned out that I had a test dependency on gwt-test-utils which brought in the gwt-dev package. Unfortunately gwt-dev contains a full copy of Jetty, JSP, JSTL, etc. which was ahead of the proper packages on the classpath. So even though I had proper dependencies on the JSTL 1.2 it would loading the 1.0 version internal to gwt-dev. Grumble.

The solution for me was to not run with test scope so I don't pick up the gwt-test-utils package at runtime. Removing the gwt-dev package from the classpath in some other manner would also have fixed the problem.

Gray
  • 115,027
  • 24
  • 293
  • 354
-1

This workedfor me

    <groupId>jstl</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
Claudiu Guiman
  • 837
  • 5
  • 18
-1

I had the same issue , I am using eclipse, just in case others experience the same issue:
In eclipse double click the tomcat server,
stop the server
untick the "server modules without publishing"
start the server.

enter image description here

JavaSheriff
  • 7,074
  • 20
  • 89
  • 159
-1

Resolved same problem in Netbeans 12.3 and Tomcat 9.0:

1.Write in pom.xml:

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

2.Add jstl-1.2.jar in project.

3.Install manually artifact(Choose jstl-1.2.jar - downloaded from the Internet )

Lenny
  • 1
  • 2
-1

If using Tomcat 10:

Download

jakarta.servlet.jsp.jstl-2.0.0.jar

jakarta.servlet.jsp.jstl-api-2.0.0.jar

Place in /WEB-INF/lib folder.

Don't forget to restart Tomcat!

zony
  • 19
  • 4
-1

2023 version Nothing else worked for me except adding the below to pom.xml: PS: I do realize that version 2.0.0 of jakarta.servlet.jsp.jstl contains some vulnerability, please use caution.

<!-- https://mvnrepository.com/artifact/jakarta.servlet.jsp.jstl/jakarta.servlet.jsp.jstl-api -->
        <dependency>
            <groupId>jakarta.servlet.jsp.jstl</groupId>
            <artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
            <version>2.0.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.glassfish.web/jakarta.servlet.jsp.jstl -->
        <dependency>
            <groupId>org.glassfish.web</groupId>
            <artifactId>jakarta.servlet.jsp.jstl</artifactId>
            <version>2.0.0</version>
        </dependency>
Aakash Bansal
  • 707
  • 5
  • 12
-1

In case you have your dependencies as symliks under
Java Resources/Libraries/Maven Dependencies folder then;
Right-click Project >> properties >> Dependency Assembly >> Add >> Double click on (Maven Dependencies)

7guyo
  • 3,047
  • 1
  • 30
  • 31
-2

Resolved similar problem in IBM RAD 7.5 by selecting:

  1. Projects properties
  2. Project Facets
  3. JSTL check-box
hrbrmstr
  • 77,368
  • 11
  • 139
  • 205