Eclipse 抱怨找不到“jakarta.servlet.http.HttpServlet”

问题描述 投票:0回答:5

我正在拿起一个旧项目,它有很多旧的依赖项。 我正在使用“面向企业 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 与 jakarta 的历史。 问题是,因为这是一个仍在服务器上运行的旧项目...我可以坚持使用 javax 而不是 jakarta 吗?

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

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

java eclipse servlets
5个回答
3
投票

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

是的,当然您可以坚持使用

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

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

javax
命名,请使用 Tomcat 9。

您需要按顺序排列代码库,才能仅使用

javax.
命名。显然您有一些代码引用了新的
jakarta.
命名。解决这个问题。检查您的
import
陈述。检查是否使用了完全限定的类名。使用 IDE 的搜索工具。

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


2
投票

只需转到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 中的依赖项标签中已经存在这个内容。 在这之后 右键单击该项目 并选择maven 选择更新项目 然后检查强制更新 然后点击确定 这将解决您的错误


0
投票

为了使用 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工作的必备条件。


0
投票

您需要做的就是在 eclipse 中创建项目时指定 apache 10 服务器


0
投票
© www.soinside.com 2019 - 2024. All rights reserved.