我的 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,并且在解决此问题后我将删除残余内容。
如果你想遵守 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 />