确保您拥有正确的 Eclipse 和 Server 版本
确保至少使用 Eclipse IDE for Enterprise Java Developer(与 Enterprise 一起使用)。它包含用于创建动态Web项目并轻松集成servletcontainers的开发工具(这些工具是Web Tools Platform,WTP的一部分)。如果您已经拥有Eclipse IDE for Java(没有企业版),并手动安装了一些相关的插件,那么很可能它没有正确完成。你最好把它扔掉,抓住真正的Eclipse IDE for Enterprise Java。
您还需要确保在您的机器上已经安装了一个 servletcontainer,该容器至少实现了与生产环境中的 servlet 容器相同的 Servlet API 版本,例如 Apache Tomcat、Oracle GlassFish、JBoss AS/WildFly 等。通常,只需下载ZIP文件并提取即可。对于Tomcat,请不要下载EXE格式,这仅适用于基于Windows的生产环境。另请参阅 a.o. 本地主机上的 Tomcat 服务器所需的多个端口(8005、8080、8009)已在使用中。
Servletcontainer 是 Servlet API 的具体实现。请注意,Oracle.com Java EE SDK 下载基本上包含 GlassFish。因此,如果您碰巧已经下载了Java EE SDK,那么您基本上已经拥有GlassFish。另请注意,例如 GlassFish 和 JBoss AS/WildFly 不仅仅是一个 servletcontainer,它们还支持 JSF、EJB、JPA 和所有其他 Java EE 的幻想。另请参阅 a.o. 究竟什么是 Java EE?
确保您使用的是正确的 Servlet 软件包
自Servlet API版本5.0以来,该软件包已重命名为软件包,该版本是Jakarta EE 9(Tomcat 10,TomEE 9,WildFly 22 Preview,GlassFish 6,Payara 6,Liberty 22等)的一部分。因此,如果您的目标是这些服务器版本或更新的版本,则需要替换javax.*
jakarta.*
import javax.servlet.*;
import javax.servlet.http.*;
由
import jakarta.servlet.*;
import jakarta.servlet.http.*;
为了让它编译,否则你可能会面临这个构建错误的风险
在 Java Build Path 上找不到超类 “javax.servlet.http.HttpServlet”
在 Eclipse 中集成服务器并将其与项目关联
在计算机上安装 Eclipse for Enterprise Java 和 servletcontainer 后,请在 Eclipse 中执行以下步骤:
-
在 Eclipse 中集成 servletcontainer
a. 通过服务器视图
b. 或者,通过 Eclipse 首选项
-
打开“窗口>首选项>服务器>运行时环境”。
-
您可以在此处添加、编辑和删除服务器。
-
将服务器与项目关联
a. 在新项目中
b. 或者,在现有项目中
-
右键单击项目,然后选择“属性”。
-
在“目标运行时”部分中,选择集成服务器。
无论哪种方式,Eclipse 都会在构建路径中自动获取 servletcontainer 的库。通过这种方式,您将能够导入和使用 Servlet API。
切勿随身携带松散的特定于服务器的 JAR 文件
在任何情况下,您都不需要在项目的“生成路径”属性中摆弄。最重要的是,您永远不应该手动复制/下载/移动/包含特定于 servletcontainer 的库,如 、 、 、 、 等。它只会导致未来的可移植性,兼容性,类路径和可维护性问题,因为当您的web应用程序部署到与最初从中获取这些库的品牌/版本不同的servlet容器时,它将不起作用。servlet-api.jar
jsp-api.jar
el-api.jar
j2ee.jar
javaee.jar
如果您使用的是 Maven,则需要绝对确保目标运行时已经提供的特定于 servlet 容器的库被标记为 .你可以在这个答案中找到Tomcat 10+,Tomcat 9-,JEE 9+和JEE 8-的正确依赖声明示例:Tomcat 9将servlets转换为javax.servlet.Servlet而不是jakarta.servlet.http.HttpServlet<scope>provided</scope>
pom.xml
以下是一些典型的例外,当您在不小心尝试修复编译错误时,可以使用特定于servlet容器的库或甚至,等来放置这些异常:/WEB-INF/lib
/JRE/lib
/JRE/lib/ext