java.lang.ClassNotFoundException:javax.servlet.jsp.tagext.BodyTagSupport

问题描述 投票:0回答:1

我的 JSP 文件中有以下标记代码,这些代码包含在顶部的所有 JSP 文件中:

<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%> 
 
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>

<%@ taglib uri="http://displaytag.sf.net" prefix="display"%>

<%@ taglib uri="http://www.springframework.org/tags" prefix="spring"%>
<%@ taglib uri="http://www.springframework.org/security/tags"
    prefix="sec"%>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@ taglib uri="http://www.springmodules.org/tags/commons-validator"
    prefix="v"%>
<html:xhtml />
<c:set var="ctx" value="${pageContext.request.contextPath}" />

自从我最近从 Spring 5.X 迁移到 Spring 6 以来,我已根据此处列出的 3.0 雅加达规范将上述内容更改为以下内容:

<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%> 

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

<%@ taglib uri="http://displaytag.sf.net" prefix="display"%>

<%@ taglib uri="http://www.springframework.org/tags" prefix="spring"%>
<%@ taglib uri="http://www.springframework.org/security/tags"
    prefix="sec"%>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@ taglib uri="http://www.springmodules.org/tags/commons-validator"
    prefix="v"%>
<html:xhtml />

<c:set var="ctx" value="${pageContext.request.contextPath}" />

但是,我在访问 JSP 页面时仍然不断收到以下错误。

[INFO] SEVERE: Servlet.service() for servlet [myapp] in context with path [/myapp] threw exception [java.lang.NoClassDefFoundError: javax/servlet/jsp/tagext/BodyTagSupport] with root cause
[INFO] java.lang.ClassNotFoundException: javax.servlet.jsp.tagext.BodyTagSupport

以下是我的 pom.xml 中的一些相关内容:

    <dependency>
        <groupId>jakarta.servlet.jsp.jstl</groupId>
        <artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
        <version>3.0.0</version>
    </dependency>
    <dependency>
        <groupId>jakarta.servlet</groupId>
        <artifactId>jakarta.servlet-api</artifactId>
        <version>6.0.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>jakarta.platform</groupId>
        <artifactId>jakarta.jakartaee-api</artifactId>
        <version>10.0.0</version>
        <scope>provided</scope>
    </dependency>
   <dependency>
        <groupId>org.glassfish.web</groupId>
        <artifactId>jakarta.servlet.jsp.jstl</artifactId>
        <version>3.0.1</version>
   </dependency>
    

    

我在这里使用 Tomcat 10.1.45 来启动上述应用程序。有什么我需要仔细检查或做错的事情吗?我看过类似this的其他帖子,我似乎对那里提到的内容感到满意。

注意:尽管我在应用程序中有一些声明,但应用程序中不再使用 Struts,并且在解决此问题后我将删除残余内容。

spring-mvc jsp jstl
1个回答
0
投票

如果你想遵守 Jakarta 标准标签库那么你应该删除旧的 jstl 和 struts 标签库定义

<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%> 

你应该删除对它的运行时依赖

<html:xhtml />
© www.soinside.com 2019 - 2024. All rights reserved.