【问题标题】:Eclipse complains about "jakarta.servlet.http.HttpServlet" was not foundEclipse 抱怨找不到“jakarta.servlet.http.HttpServlet”
【发布时间】:2022-12-28 17:13:49
【问题描述】:

我正在选择一个有很多旧依赖项的旧项目。 我正在使用“面向企业 Java 和 Web 开发人员的 Eclipse IDE”。 将源代码导入 Eclipse 后,Eclipse 抱怨我所有的 jsp 文件

The superclass "jakarta.servlet.http.HttpServlet" was not found on the Java Build Path

在 pom.xml 中,我看到有这种依赖关系:

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>3.0.1</version>
  <scope>provided</scope>
</dependency>

我去谷歌搜索错误并阅读了一些 javax vs jakarta 的历史。 问题是,因为这是一个仍在服务器上运行的旧项目...我可以坚持使用 javax 而不是 jakarta 吗?

在 Eclipse 的 Project Facets 下,我选中了“Dynamic Web Module”,它在本地使用 Apache Tomcat v9.0。 在服务器设置下,我在本地主机上有“Tomcat v9.0 服务器”来运行这个项目。

另一件事我不知道它是否与我的 Tomcat 设置或项目设置有任何关系,即在 pom.xml 上,我得到一个关于丢失很多工件的错误,比如“jini:jsk-lib:jar ”、“jini:reggie:jar”、“jini:start:jar”等...

【问题讨论】:

  • 您可能使用的是旧版本的 Eclipse。升级。此外,Tomcat 9 不是 Jakarta EE 服务器,它仍会使用 javax.servlet

标签: java eclipse servlets


【解决方案1】:

我可以坚持使用 javax 而不是 jakarta 吗?

是的,您当然可以坚持使用 javax. 命名,而不是迁移到新的 jakarta. 命名空间。最终,您将希望进行迁移以从新技术和改进的技术中受益。但今年或明年没有必要。

阅读 Which version? 文档页面。您将看到版本 9.0.x 和 10.0.x 在功能上是等效的,是并行开发的。唯一显着的区别是上面讨论的名称空间更改。因此,如果您选择坚持使用 javax 命名,请使用 Tomcat 9。

您需要按顺序整理代码库,以便仅使用 javax. 命名。显然,您有一些代码引用了新的 jakarta. 命名。解决这个问题。检查你的 import 声明。检查是否使用了完全限定的类名。使用 IDE 的搜索工具。

顺便说一下……如果使用 Tomcat 9,您可以将对 Servlet API 的依赖从 3.0.1 更改为 Servlet specification 的 4.0.3 版。看到那个哪个版本?上面链接的页面以及https://Jakarta.EE 站点,以了解 JSP 规范的适当版本等。

【讨论】:

    【解决方案2】:

    为了使用 JSP 运行 javax.servlet,您需要两个依赖项。

    第一个是 servlet api,

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

    第二个是 JSP api,

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

    注意:javax.servlet.jsp-api 还包括对javax.servlet-api 的依赖,因此您不需要在您的项目中明确需要它。

    这意味着,javax.servlet-api 是强制 JSP 工作的。

    【讨论】:

      【解决方案3】:

      只需转到maven存储库 并搜索 java servlet api 然后点击版本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> 
      

      现在在您的项目中的 pom.xml 中,在已经存在的依赖项标记中通过它。 在这之后 右键单击项目 并选择行家 选择更新项目 然后检查强制更新 然后点击确定 这将解决你的错误

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-08
        • 2011-11-12
        • 2010-09-12
        • 2018-10-08
        • 2020-06-22
        • 1970-01-01
        • 1970-01-01
        • 2021-12-13
        相关资源
        最近更新 更多