java - 如何在Eclipse项目中导入javax.servlet API?

标签 java eclipse servlets

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

最佳答案

确保您使用了正确的Eclipse和Server

确保您至少使用Eclipse IDE for Java EE developers(对于EE)。它包含用于创建动态Web项目并轻松集成servlet容器的开发工具(这些工具是WTP的一部分)。如果您已经具有Java的Eclipse IDE(不带EE),并且手动安装了一些与EE相关的插件,那么可能是操作不正确。您最好将其丢弃,并获取真正的Java EE Eclipse IDE。

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

Servlet容器是Servlet API的具体实现。请注意,Oracle.com上的Java EE SDK下载基本上包含GlassFish。因此,如果您碰巧已经下载了Java EE SDK,那么您基本上已经有了GlassFish。还应注意,例如GlassFish和JBoss AS / WildFly不仅是一个servlet容器,它们还支持JSF,EJB,JPA和所有其他Java EE幻想。另请参阅What exactly is Java EE?



在Eclipse中集成Server并将其与Project关联

在机器上安装了Eclipse for Java EE和servletcontainer之后,请在Eclipse中执行以下步骤:


在Eclipse中集成servletcontainer

一种。通过服务器视图


在底部框中打开“服务器”视图。
右键单击那里,然后选择“新建”>“服务器”。
选择适当的servlet容器品牌和版本,并逐步完成向导。

enter image description here


b。或者,通过Eclipse首选项


打开窗口>首选项>服务器>运行时环境。
您可以在此处添加,编辑和删除服务器。

enter image description here

将服务器与项目关联

一种。在新项目中


打开左侧的Project Navigator / Explorer。
右键单击那里,然后选择“新建”>“项目”,然后在菜单“ Web”>“ Dynamic Web Project”中。
在向导中,将目标运行时设置为集成服务器。

enter image description here


b。或者,在现有项目中


右键单击项目,然后选择属性。
在“目标运行时”部分中,选择集成服务器。

enter image description here


无论哪种方式,Eclipse都将自动在构建路径中使用servlet容器的库。这样,您将能够导入和使用Servlet API。




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

无论如何,您都无需在项目的“构建路径”属性中随意摆弄。首先,您绝对不应该手动复制/下载/移动/包含各个servlet容器特定的库,例如servlet-api.jarjsp-api.jarel-api.jarj2ee.jarjavaee.jar等。这只会导致将来的可移植性,兼容性,类路径和可维护性方面的问题,因为将Web应用程序部署到与最初从那些库/版本库获取的版本/版本不同的Servlet容器中时,它将无法工作。

如果您使用的是Maven,则需要绝对确保目标运行时已经提供的servlet容器特定的库被标记为<scope>provided</scope>

这是一些典型的异常,当您用Servletcontainer特定的库乱扔/WEB-INF/lib甚至/JRE/lib/JRE/lib/ext等时,会很粗心地尝试解决编译错误:


java.lang.NullPointerException at org.apache.jsp.index_jsp._jspInit
java.lang.NoClassDefFoundError: javax/el/ELResolver
java.lang.NoSuchFieldError: IS_DIR
java.lang.NoSuchMethodError: javax.servlet.jsp.PageContext.getELContext()Ljavax/el/ELContext;
java.lang.AbstractMethodError: javax.servlet.jsp.JspFactory.getJspApplicationContext(Ljavax/servlet/ServletContext;)Ljavax/servlet/jsp/JspApplicationContext;
org.apache.jasper.JasperException: The method getJspApplicationContext(ServletContext) is undefined for the type JspFactory
java.lang.VerifyError: (class: org/apache/jasper/runtime/JspApplicationContextImpl, method: createELResolver signature: ()Ljavax/el/ELResolver;) Incompatible argument to function
jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class

关于java - 如何在Eclipse项目中导入javax.servlet API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39194043/

相关文章:

html - Servlet返回“HTTP状态404请求的资源(/Servlet)不可用”

java - 如何使这个 2038 年问题 junit 测试按预期工作

java - CircularArrayQueue 类中的 Enqueue 方法

java - Java 中两个 double 的符号比较

Java8 - 显式类型如何匹配一种变体 - 而不是其他类型?

java - 将 Bean 从 Servlet 加载到 JSP

java - IntelliJ,是否可以像在 NetBeans 中一样使用 "Make controller"?

java - 当项目转换为可执行 jar 时,序列化文件不起作用?

eclipse - 这里有什么异常(exception)?

java - Servlet 应用程序中没有加载任何属性文件