Java:无法访问javax.servlet.ServletException类文件javax.servlet.ServletException未找到。

5

描述

在开发我的Java项目时,我使用:
Java版本:1.8,
Apache Tomcat版本9.0.x

然后,我使用 Tomcat 10.0.x 运行我的项目(对我的项目进行了一些修改)。我不得不将与javax包相关的导入更改为与jakarta包相关的导入。

构建项目时,我遇到了以下错误;

java: cannot access javax.servlet.ServletException  
class file for javax.servlet.ServletException not found

修复

当我搜索修复方法时,我发现需要在我的pom.xml文件中包含Java Servlet API的依赖,这样我就可以成功构建项目了。

<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
</dependency>

问题

  1. 我迁移到Tomcat 10时,为什么必须包含Java Servlet API依赖项?
  2. 我已经包含了Java Servlet API依赖项,但这是一个适当的解决方法吗?

这个问题已经在 https://dev59.com/eVIG5IYBdhLWcg3wixFp 中得到了解答。它将会解释为什么你会遇到这些问题。 - JCompetence
你需要的是 jakarta.servlet-api 版本 5 或更高版本。 - Piotr P. Karwasz
1个回答

3
当我迁移到Tomcat 10时,为什么必须包含Java Servlet API依赖项?
可能是因为您的应用程序依赖于符合JSP 4.0.x规范的某些内容。
我确实包含了Java Servlet API依赖项,但这是正确的解决方法吗?
不,这不是正确的解决方法。虽然您已成功构建了应用程序,但在部署到Tomcat 10时,您将遇到类加载器错误。这是因为Tomcat 10运行时库不提供javax.servlet.*类。
正确的方法是确定为什么您的应用程序或其依赖项正在尝试使用javax.servlet中的类,并消除此问题。
  1. 移除 javax.servlet / javax.servlet-api / 4.0.1 依赖。

  2. 在您的应用程序代码库中搜索任何剩余的对 javax.servlet 的引用,并将它们更改为正确的引用。

  3. 使用 Maven dependency tree plugin 尝试确定您的应用程序依赖项中哪个依赖项具有对旧的 javax.servlet API 的依赖。查找使用 jakarta.servlet 的较新版本的那些依赖项。

如果步骤 2 和 3 都无法确定问题,那就比较困难了。您可能需要解压所有相关的 JAR 文件并使用 javapgrep 进行分析。或者可能会有更好的方法。

如果您能够确定依赖关系,但找不到与Jakarta兼容的版本,则您面临另一种问题。您必须选择花费精力移植依赖项、查找提供功能的其他库(或其他内容),或从Web应用程序中删除该功能。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接