java.lang.NoClassDefFoundError: jakarta/servlet/jsp/jstl/core/LoopTag in Tomcat 10
java.lang.NoClassDefFoundError: jakarta/servlet/jsp/jstl/core/LoopTag in Tomcat 10
我刚刚迁移到 Tomcat 10。将 javax.servlet 包的所有引用更改为 jakarta.servlet 后,我仍然无法将我的应用程序迁移到 运行。
我已经从 Here 下载了 JSTL 2.0 class 库并将它们添加到 class 路径。
我将 NetBeans 与 Ant 一起使用。
这是我的 class 个库:
这是我添加的 JSTL jar 文件:
它抛出以下异常:
Type Exception Report
Message java.lang.NoClassDefFoundError: jakarta/servlet/jsp/jstl/core/LoopTag
Description The server encountered an unexpected condition that prevented it from fulfilling the request.
Exception
jakarta.servlet.ServletException: java.lang.NoClassDefFoundError: jakarta/servlet/jsp/jstl/core/LoopTag
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:332)
jakarta.servlet.http.HttpServlet.service(HttpServlet.java:770)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
com.xyneex.post.PostFilter.doFilter(PostFilter.java:163)
Root Cause
java.lang.NoClassDefFoundError: jakarta/servlet/jsp/jstl/core/LoopTag
java.base/java.lang.ClassLoader.defineClass1(Native Method)
java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1010)
java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2470)
org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:866)
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1370)
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1224)
org.apache.jasper.compiler.Parser.parseCustomTag(Parser.java:1232)
org.apache.jasper.compiler.Parser.parseElements(Parser.java:1464)
org.apache.jasper.compiler.Parser.parse(Parser.java:138)
org.apache.jasper.compiler.ParserController.doParse(ParserController.java:244)
org.apache.jasper.compiler.ParserController.parse(ParserController.java:105)
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:207)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:392)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:368)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:352)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:603)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:400)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:379)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:327)
jakarta.servlet.http.HttpServlet.service(HttpServlet.java:770)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
com.xyneex.post.PostFilter.doFilter(PostFilter.java:163)
Root Cause
java.lang.ClassNotFoundException: jakarta.servlet.jsp.jstl.core.LoopTag
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1401)
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1224)
java.base/java.lang.ClassLoader.defineClass1(Native Method)
java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1010)
java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2470)
org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:866)
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1370)
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1224)
org.apache.jasper.compiler.Parser.parseCustomTag(Parser.java:1232)
org.apache.jasper.compiler.Parser.parseElements(Parser.java:1464)
org.apache.jasper.compiler.Parser.parse(Parser.java:138)
org.apache.jasper.compiler.ParserController.doParse(ParserController.java:244)
org.apache.jasper.compiler.ParserController.parse(ParserController.java:105)
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:207)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:392)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:368)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:352)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:603)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:400)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:379)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:327)
jakarta.servlet.http.HttpServlet.service(HttpServlet.java:770)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
com.xyneex.post.PostFilter.doFilter(PostFilter.java:163)
Note The full stack trace of the root cause is available in the server logs.
我的JSP/HTML代码:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:set var="home" value="active" scope="request" />
<!DOCTYPE html>
<html>
<head>
<title>Xyneex Technologies | Home </title>
<jsp:include page="WEB-INF/fragments/head.jsp" />
<style>
...
我在 Whosebug 中看到过类似的问题,但他们在谈论 Tomcat 7.
我正在使用 Tomcat 10 和 JDK 16。
请问这个问题的解决方案是什么?
编辑:
根据建议,This Question and Answer 与我的问题不同。由于答案地址是 JSTL URI,我已经检查并确认我使用的是正确的 URI。我坚信问题与我的 JSTL 库中不正确的 JSTL jar 文件有关,我无法确定要使用哪些文件。
编辑 2:
经过数小时的挖掘,我找到了我在回答中提供的解决方案。
感谢您的建议。
编辑 3:
BalusC 的 This Answer 似乎解决了 Tomcat 10 的问题。请确保在阅读答案时,向下滚动到 Tomcat 10 部分。肯定是第一次看漏了,因为我以为他只讲URI
感谢 Piotr P. Karwasz 为我指出。
您可以将 JSTL1.2 库添加到您的应用程序中,如下所示,将 jstl-impl.jar 和 jstl-api.jar 添加到应用程序中
指定JSTL核心库的taglib指令:
<%taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
link下载文件
http://www.java2s.com/Code/Jar/j/Downloadjstlapi12jar.htm
http://www.java2s.com/Code/Jar/j/Downloadjstlimpl12jar.htm
不要忘记将两个 jar 文件添加到 META-INF/lib,即使没有您在应用程序中放入的所有这些文件,它也能正常工作
终于找到解决办法了!
我能够下载所需的 jar 文件here
对于那些可能遇到同样问题的人:
请注意:添加 jar 文件时,不要包含 jakarta.servlet-api-5.0.0.jar 文件。
Tomcat 10 已经有一个具有相同 类 的类似 jar 文件,这又引起了另一个麻烦。
我创建了一个新库并将其命名为 JSTL 2.0
下面是我添加到类路径中的 jar 文件的屏幕截图。
这对我来说很好用!
我刚刚迁移到 Tomcat 10。将 javax.servlet 包的所有引用更改为 jakarta.servlet 后,我仍然无法将我的应用程序迁移到 运行。
我已经从 Here 下载了 JSTL 2.0 class 库并将它们添加到 class 路径。 我将 NetBeans 与 Ant 一起使用。 这是我的 class 个库:
这是我添加的 JSTL jar 文件:
它抛出以下异常:
Type Exception Report
Message java.lang.NoClassDefFoundError: jakarta/servlet/jsp/jstl/core/LoopTag
Description The server encountered an unexpected condition that prevented it from fulfilling the request.
Exception
jakarta.servlet.ServletException: java.lang.NoClassDefFoundError: jakarta/servlet/jsp/jstl/core/LoopTag
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:332)
jakarta.servlet.http.HttpServlet.service(HttpServlet.java:770)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
com.xyneex.post.PostFilter.doFilter(PostFilter.java:163)
Root Cause
java.lang.NoClassDefFoundError: jakarta/servlet/jsp/jstl/core/LoopTag
java.base/java.lang.ClassLoader.defineClass1(Native Method)
java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1010)
java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2470)
org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:866)
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1370)
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1224)
org.apache.jasper.compiler.Parser.parseCustomTag(Parser.java:1232)
org.apache.jasper.compiler.Parser.parseElements(Parser.java:1464)
org.apache.jasper.compiler.Parser.parse(Parser.java:138)
org.apache.jasper.compiler.ParserController.doParse(ParserController.java:244)
org.apache.jasper.compiler.ParserController.parse(ParserController.java:105)
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:207)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:392)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:368)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:352)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:603)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:400)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:379)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:327)
jakarta.servlet.http.HttpServlet.service(HttpServlet.java:770)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
com.xyneex.post.PostFilter.doFilter(PostFilter.java:163)
Root Cause
java.lang.ClassNotFoundException: jakarta.servlet.jsp.jstl.core.LoopTag
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1401)
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1224)
java.base/java.lang.ClassLoader.defineClass1(Native Method)
java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1010)
java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2470)
org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:866)
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1370)
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1224)
org.apache.jasper.compiler.Parser.parseCustomTag(Parser.java:1232)
org.apache.jasper.compiler.Parser.parseElements(Parser.java:1464)
org.apache.jasper.compiler.Parser.parse(Parser.java:138)
org.apache.jasper.compiler.ParserController.doParse(ParserController.java:244)
org.apache.jasper.compiler.ParserController.parse(ParserController.java:105)
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:207)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:392)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:368)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:352)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:603)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:400)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:379)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:327)
jakarta.servlet.http.HttpServlet.service(HttpServlet.java:770)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
com.xyneex.post.PostFilter.doFilter(PostFilter.java:163)
Note The full stack trace of the root cause is available in the server logs.
我的JSP/HTML代码:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:set var="home" value="active" scope="request" />
<!DOCTYPE html>
<html>
<head>
<title>Xyneex Technologies | Home </title>
<jsp:include page="WEB-INF/fragments/head.jsp" />
<style>
...
我在 Whosebug 中看到过类似的问题,但他们在谈论 Tomcat 7.
我正在使用 Tomcat 10 和 JDK 16。
请问这个问题的解决方案是什么?
编辑:
根据建议,This Question and Answer 与我的问题不同。由于答案地址是 JSTL URI,我已经检查并确认我使用的是正确的 URI。我坚信问题与我的 JSTL 库中不正确的 JSTL jar 文件有关,我无法确定要使用哪些文件。
编辑 2:
经过数小时的挖掘,我找到了我在回答中提供的解决方案。 感谢您的建议。
编辑 3:
BalusC 的This Answer 似乎解决了 Tomcat 10 的问题。请确保在阅读答案时,向下滚动到 Tomcat 10 部分。肯定是第一次看漏了,因为我以为他只讲URI
感谢 Piotr P. Karwasz 为我指出。
您可以将 JSTL1.2 库添加到您的应用程序中,如下所示,将 jstl-impl.jar 和 jstl-api.jar 添加到应用程序中
指定JSTL核心库的taglib指令:
<%taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
link下载文件
http://www.java2s.com/Code/Jar/j/Downloadjstlapi12jar.htm http://www.java2s.com/Code/Jar/j/Downloadjstlimpl12jar.htm
不要忘记将两个 jar 文件添加到 META-INF/lib,即使没有您在应用程序中放入的所有这些文件,它也能正常工作
终于找到解决办法了!
我能够下载所需的 jar 文件here
对于那些可能遇到同样问题的人: 请注意:添加 jar 文件时,不要包含 jakarta.servlet-api-5.0.0.jar 文件。 Tomcat 10 已经有一个具有相同 类 的类似 jar 文件,这又引起了另一个麻烦。 我创建了一个新库并将其命名为 JSTL 2.0
下面是我添加到类路径中的 jar 文件的屏幕截图。
这对我来说很好用!