JSP 如何在Tomcat 10.1中使用JSTL错误:jaks.tags.core无法识别[重复]

gdrx4gfi  于 5个月前  发布在  其他
关注(0)|答案(1)|浏览(55)

此问题在此处已有答案

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?
  • 如何修复错误?
xkftehaa

xkftehaa1#

通常,Tomcat版本10不理解javax.*包中的类。因此,许多代码中包含javax的应用程序,以及为Java EE的早期版本构建的应用程序(包括servlet和JSP,以及JSTL等标记库)无法在新版本的Tomcat 10上运行。因此,需要重写代码并替换所有对旧库的引用,并且如果可用的话,还需要更新描述符中的应用版本。
在Gradle依赖项中,还需要移除所有对javax的引用。根据依赖项的不同,如果应用程序使用servlet-api或jsp-api,那么必须将其标记为provided,因为服务器已经有这样的lib,尽管它们是由另一个类加载器加载的,因此在运行时可能会发生类型转换错误。
对于新版本的JSTL,您可以执行以下操作

dependencies {
    compile 'org.glassfish.web:jakarta.servlet.jsp.jstl:3.0.1'
    compile 'jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api:3.0.0'
}

字符串

相关问题