我想在 Eclipse 中使用 Servlet 进行开发,但它说包 javax.servlet
/ jakarta.servlet
无法解析。如何将 javax.servlet
/ jakarta.servlet
包添加到我的 Eclipse 项目中?
原文由 tom 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2.3k 阅读✓ 已解决
3 回答3.8k 阅读✓ 已解决
4 回答2.4k 阅读✓ 已解决
8 回答3.1k 阅读
3 回答2.2k 阅读✓ 已解决
1 回答1.9k 阅读✓ 已解决
3 回答1.5k 阅读✓ 已解决
确保您拥有正确的 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 Tomcat 、 Oracle GlassFish 、 JBoss 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 等)。因此,如果您的目标是这些服务器版本或更新版本,则需要更换经过
为了让它编译,否则你可能会面临这个构建错误的风险
在Eclipse中集成Server并与Project关联
在您的机器上安装 Eclipse for Enterprise Java 和 servletcontainer 后,在 Eclipse 中执行以下步骤:
一个。 通过服务器视图
在底部框中打开 服务器 视图。
右键单击那里并选择 New > Server 。
选择适当的 servletcontainer 制造商和版本并完成向导。
b. 或者,通过 Eclipse 首选项
打开 Window > Preferences > Server > Runtime Environments 。
您可以在此处 _添加_、 编辑 和 删除 服务器。
一个。 在新项目中
打开左侧的 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 等时,您可能会遇到这些异常编译错误: