after migrating to spring 6.0.11 and tomcat 10.1.13, we started getting problems with jstl and jsp. According to the Jakarta Standard Tag Library 3.0 documentation, Ive changed the taglib uri in all .jsp files from <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> to <%@ taglib prefix="c" uri="jakarta.tags.core" %>. After debugging, I saw that the map in the TldCache class was not filled in, which is why TagLibraryInfoImpl receives tldResourcePath as null. All the necessary libs are installed
implementation 'jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api:3.0.0'
implementation 'org.glassfish.web:jakarta.servlet.jsp.jstl:3.0.1'
implementation 'org.mortbay.jasper:apache-jsp:10.1.7'
implementation("org.apache.tomcat:tomcat-jsp-api:10.1.13")
compileOnly "jakarta.servlet:jakarta.servlet-api:6.0.0"
what could be the problem?
org.apache.jasper.JasperException: Could not find taglib [c] for URI: [jakarta.tags.core]
in org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:54)
in org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:294)
in org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:81)
in org.apache.jasper.compiler.TagLibraryInfoImpl.<init>(TagLibraryInfoImpl.java:176)
in org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:429)
in org.apache.jasper.compiler.Parser.parseDirective(Parser.java:487)
in org.apache.jasper.compiler.Parser.parseElements(Parser.java:1444)
in org.apache.jasper.compiler.Parser.parse(Parser.java:138)
in org.apache.jasper.compiler.ParserController.doParse(ParserController.java:245)
in org.apache.jasper.compiler.ParserController.parse(ParserController.java:106)
in org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:211)
in org.apache.jasper.compiler.Compiler.compile(Compiler.java:396)
in org.apache.jasper.compiler.Compiler.compile(Compiler.java:372)
in org.apache.jasper.compiler.Compiler.compile(Compiler.java:356)
in org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:603)
in org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:396)
in org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:380)
in org.apache.jasper.servlet.JspServlet.service(JspServlet.java:328)
in jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)
in org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:205)
in org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
in org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
in org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)
in org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
in org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:110)
in org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)
in org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
I tried also add aditional dependecies, like
compileOnly 'jakarta.servlet.jsp:jakarta.servlet.jsp-api:3.1.1'
implementation 'org.mortbay.jasper:taglibs-standard:10.0.2'
compileOnly 'jakarta.platform:jakarta.jakartaee-api:10.0.0'
but it also didnt help. with tomcat 9 and java EE it was easy, simple add
implementation "jstl:jstl:1.2"
implementation("org.apache.tomcat:tomcat-jsp-api:9.0.33")
and we got path to differents tags and all works.
I also have custom tags:
<taglib 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-jsptaglibrary_3_1.xsd"
version="3.1">
...
and with custom tags any problem, I don't understand how apache-jsp should resolve path for tags jakarta.tags.*
I found the problem. I have context.xml with JarScanFilter and I used for scanning old jar naming. after changing to
tldScan="jakarta.servlet.jsp.jstl*.jar all worksold naming for tld jar scan