如何在我的 Eclipse 项目中导入 javax.servlet / jakarta.servlet API?

新手上路,请多包涵

我想在 Eclipse 中使用 Servlet 进行开发,但它说包 javax.servlet / jakarta.servlet 无法解析。如何将 javax.servlet / jakarta.servlet 包添加到我的 Eclipse 项目中?

原文由 tom 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 969
2 个回答

确保您拥有正确的 Eclipse 和服务器版本

确保您至少使用 Eclipse IDE for Enterprise Java developers (with the Enterprise )。它包含用于创建动态 Web 项目和轻松集成 servletcontainer 的开发工具(这些工具是 Web Tools Platform, WTP 的一部分)。如果您已经拥有适用于 Java 的 Eclipse IDE(没有企业版),并且手动安装了一些相关的插件,那么它很可能没有正确完成。您最好扔掉它并获取真正的 Eclipse IDE for Enterprise Java。

您还需要确保您的机器上已经安装了一个 servletcontainer,它至少实现了与生产环境中的 servletcontainer 相同的 Servlet API 版本,例如 Apache TomcatOracle GlassFishJBoss AS / WildFly 等。通常,只需下载 ZIP 文件并解压缩就足够了。如果是 Tomcat,请 不要 下载 EXE 格式,它仅适用于基于 Windows 的生产环境。另见 ao Several ports (8005, 8080, 8009) required by Tomcat Server at localhost are already in use

servletcontainer 是 Servlet API 的具体实现。请注意,从 Oracle.com 下载的 Java EE SDK 基本上包含 GlassFish。因此,如果您碰巧已经下载了 Java EE SDK,那么您基本上已经拥有了 GlassFish。另请注意,例如 GlassFish 和 JBoss AS/WildFly 不仅仅是 一个 servlet 容器,它们还支持 JSF、EJB、JPA 和所有其他 Java EE 特性。另请参见 ao 究竟什么是 Java EE?

确保您使用的是正确的 Servlet 包

javax.* 包已重命名为 jakarta.* 包自 Servlet API 版本 5.0 以来是 Jakarta EE 9(Tomcat 10、TomEE 9、WildFly 22 Preview、GlassFish 6,6、Payara 的一部分)自由 22 等)。因此,如果您的目标是这些服务器版本或更新版本,则需要更换

import javax.servlet.*;
import javax.servlet.http.*;

经过

import jakarta.servlet.*;
import jakarta.servlet.http.*;

为了让它编译,否则你可能会面临这个构建错误的风险

在 Java 构建路径中找不到超类“javax.servlet.http.HttpServlet”

在Eclipse中集成Server并与Project关联

在您的机器上安装 Eclipse for Enterprise Java 和 servletcontainer 后,在 Eclipse 中执行以下步骤:

  1. 在 Eclipse 中集成 servletcontainer

一个。 通过服务器视图

  • 在底部框中打开 服务器 视图。

  • 右键单击那里并选择 New > Server

  • 选择适当的 servletcontainer 制造商和版本并完成向导。

    在此处输入图像描述

b. 或者,通过 Eclipse 首选项

  • 打开 Window > Preferences > Server > Runtime Environments

  • 您可以在此处 _添加_、 编辑删除 服务器。

    在此处输入图像描述

  1. 将服务器与项目相关联

一个。 在新项目中

  • 打开左侧的 Project Navigator/Explorer

  • 右键单击那里并选择 New > Project 然后在菜单 Web > Dynamic Web Project 中。

  • 在向导中,将 Target Runtime 设置为集成服务器。

    在此处输入图像描述

b. 或者,在现有项目中

  • 右键单击项目并选择 _属性_。

  • Targeted Runtimes 部分,选择集成服务器。

    在此处输入图像描述

无论哪种方式,Eclipse 都会自动在构建路径中获取 servletcontainer 的库。这样您就可以导入和使用 Servlet API。

切勿随身携带松散的特定于服务器的 JAR 文件

在任何情况下,您都不需要在项目的 构建路径 属性中摆弄。 You should above all never manually copy/download/move/include the individual servletcontainer-specific libraries like servlet-api.jar , jsp-api.jar , el-api.jar , j2ee.jar , javaee.jar 等。它只会导致未来的可移植性、兼容性、类路径和可维护性问题,因为当你的 webapp 部署到与这些库所在的不同品牌/版本的 servletcontainer 时,它不会工作最初获得自。

如果您使用的是 Maven,则需要绝对确保目标运行时已提供的特定于 servletcontainer 的库被标记为 <scope>provided</scope> 。您可以在这个答案中找到 Tomcat 10+、Tomcat 9-、JEE 9+ 和 JEE 8- 的正确 pom.xml 依赖声明示例: Tomcat 9 casting servlets to javax.servlet.Servlet instead of jakarta.servlet .http.HttpServlet

以下是一些典型的异常,当您乱扔 /WEB-INF/lib 或什 /JRE/lib/JRE/lib/ext -serv-con 等时,您可能会遇到这些异常编译错误:

原文由 BalusC 发布,翻译遵循 CC BY-SA 4.0 许可协议

导入javax.servlet

步骤1

转到项目的 属性(使用 Alt + Enter 或右键单击)

第2步

Targeted Runtime 下检查 Apache Tomcat v7.0 ,它可以工作。

原文由 prayagupa 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏