此问题在此处已有答案:
How to install JSTL? It fails with "The absolute uri cannot be resolved" or "Unable to find taglib" or NoClassDefFoundError or ClassCastException(22个答案)
26天前关闭。
我知道Tomcat v10.1参考了以下规范:
- 服务器小程序6.0
- JSP 3.1版
- EL 5.0标准
因此,我的Graddle依赖性是:
dependencies {
compileOnly "jakarta.servlet:jakarta.servlet-api:6.0.0"
compileOnly "jakarta.servlet.jsp:jakarta.servlet.jsp-api:3.1.0"
compileOnly "jakarta.el:jakarta.el-api:5.0.0"
}
字符串
我想Tomcat已经有了这些库,所以我使用compileOnly
。
问题是,我还需要添加相应的JSTL库,以支持包含JSTL标记的旧JSP文件。
在我的JSP文件中,我将正确的JSTL标记修复为:<%@ taglib prefix="c" uri="jakarta.tags.core" %>
个
现在,关于导入,我将添加以下依赖项:
implementation 'jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api:3.0.0'
型
问题是jakarta.tags.core
没有被识别,我在它上面有一个异常。
问题:
- JSP规范必须是3.1。但是,Maven的最新依赖项是
jstl-api:3.0.0
(而不是不存在的3.1.0
)。该版本是否符合JSP规范3.1? - 如何修复错误?
1条答案
按热度按时间xkftehaa1#
通常,Tomcat版本10不理解
javax.*
包中的类。因此,许多代码中包含javax
的应用程序,以及为Java EE的早期版本构建的应用程序(包括servlet和JSP,以及JSTL等标记库)无法在新版本的Tomcat 10上运行。因此,需要重写代码并替换所有对旧库的引用,并且如果可用的话,还需要更新描述符中的应用版本。在Gradle依赖项中,还需要移除所有对
javax
的引用。根据依赖项的不同,如果应用程序使用servlet-api或jsp-api,那么必须将其标记为provided
,因为服务器已经有这样的lib,尽管它们是由另一个类加载器加载的,因此在运行时可能会发生类型转换错误。对于新版本的JSTL,您可以执行以下操作
字符串