Spring Boot 在使用taglib库的Sping Boot MVC应用程序中出现错误

enyaitl3  于 5个月前  发布在  Spring
关注(0)|答案(2)|浏览(83)

第一篇文章在这里。我试图将Sping Boot 应用程序更新到Java 20 / Tomcat 10.1
它使用第三方存储库。
当我运行应用程序时,我得到以下错误:

Servlet.service() for servlet [jsp] threw exception
java.lang.ClassNotFoundException: javax.servlet.jsp.tagext.BodyTagSupport
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    at java.base/java.lang.ClassLoader.defineClass1(Native Method)
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1013)
    at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
    at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:862)
    at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:760)
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:681)
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:639)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    at java.base/java.lang.Class.forName0(Native Method)
    at java.base/java.lang.Class.forName(Class.java:496)
    at java.base/java.lang.Class.forName(Class.java:475)
    at org.springframework.boot.devtools.restart.classloader.RestartClassLoader.loadClass(RestartClassLoader.java:121)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    at java.base/java.lang.Class.forName0(Native Method)
    at java.base/java.lang.Class.forName(Class.java:496)
    at java.base/java.lang.Class.forName(Class.java:475)
    at org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedWebappClassLoader.loadFromParent(TomcatEmbeddedWebappClassLoader.java:113)
    at org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedWebappClassLoader.doLoadClass(TomcatEmbeddedWebappClassLoader.java:86)
    at org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedWebappClassLoader.loadClass(TomcatEmbeddedWebappClassLoader.java:70)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1165) ...

字符串
你知道我错过了什么吗?谢谢!
POM文件中包括以下内容:

<dependency>
    <groupId>jakarta.servlet.jsp.jstl</groupId>
    <artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
</dependency>

    
<dependency>
  <groupId>org.apache.tomcat.embed</groupId>
  <artifactId>tomcat-embed-jasper</artifactId>
  <scope>provided</scope>
</dependency>

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

lawou6xi

lawou6xi1#

看起来你缺少了一个库。你有没有试着用mvn dependency:tree命令检查你的项目中是否包含了这个库?https://mvnrepository.com/artifact/javax.servlet.jsp/jsp-api/2.0

0ve6wy6x

0ve6wy6x2#

我可以通过使用tomcat迁移工具来解决这个问题。
该工具的链接位于此页面:https://tomcat.apache.org/migration-10.html
该工具更新了所有的命名空间。在通过迁移工具运行第三方API后,生成的jar文件按预期工作。
它就像运行这个命令一样简单:

java -jar jakartaee-migration-*-shaded.jar <source> <destination>

字符串

相关问题