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

yjghlzjz  于 2022-12-29  发布在  Eclipse
关注(0)|答案(3)|浏览(732)

我正在挑选一个有很多旧依赖项的旧项目。我正在使用“面向企业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>

我去google了解了这个错误,读了一些javax vs jakarta的历史。问题是,因为这是一个老项目,仍然在服务器上运行...我能坚持使用javax而不是jakarta吗?
在Eclipse中,在Project Facets下,我选中了“Dynamic Web Module”,它在本地使用Apache Tomcat v9.0。在服务器设置下,我在localhost上设置了“Tomcat v9.0 Server”以运行此项目。
另一件事我不知道它是否与我的Tomcat设置或项目设置有关,那就是在pom.xml上,我得到了一个关于丢失许多工件的错误,比如“jini:jsk-lib:jar”、“jini:reggie:jar”、“jini:start:jar”等等...

qf9go6mv

qf9go6mv1#

我能坚持使用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等规范的适当版本。

esyap4oy

esyap4oy2#

为了使用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>

第二个是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的工作是必需的。

vmdwslir

vmdwslir3#

只需转到mavenrepository和seach for java 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>

现在past这在pom.xml在你的项目在dependency标记这已经是present. after这右键点击之上项目并且选择maven选择更新项目然后检查强制更新然后点击确定这将解决你的错误

相关问题