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

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

确保你有正确的Eclipse和服务器

确保至less使用Eclipse IDE for Java EE开发人员 (使用EE )。 它包含用于创builddynamicWeb项目的开发工具,以及轻松集成Servlet容器(这些工具是Web Tools Platform,WTP的一部分)。 如果你已经有了Java IDE(没有EE)的Eclipse IDE,并且手动安装了一些与EE相关的插件,那么很可能是因为它没有正确完成。 你最好把它扔掉,并抓住真正的Java EE的Eclipse IDE。

您还需要确保您的计算机上已经安装了ServletContainer,它至less在生产环境中实现与ServletContainer相同的Servlet API版本,例如Apache Tomcat , Oracle GlassFish , JBoss AS / WildFly等。通常,下载ZIP文件并提取它就足够了。 对于Tomcat,请勿下载EXE格式,这仅适用于基于Windows的生产环境。 另请参阅ao 本地主机上的Tomcat服务器所需的多个端口(8005,8080,8009)已在使用中 。

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究竟是什么?


在Eclipse中集成服务器并将其与Project关联

在您的机器上安装了Eclipse for Java EE和servlet容器之后,在Eclipse中执行以下步骤:

  1. 在Eclipse中集成servletcontainer

    一个。 通过服务器视图

    • 打开底部框中的服务器视图。
    • 右键单击那里并select新build>服务器
    • select适当的servletcontainer制作和版本,并通过向导走。

      在这里输入图像描述

    或者,通过Eclipse首选项

    • 打开窗口>首选项>服务器>运行时环境
    • 您可以在这里添加编辑删除服务器。

      在这里输入图像描述

  2. 将服务器与项目关联

    一个。 在新项目中

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

      在这里输入图像描述

    或者,在现有的项目中

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

      在这里输入图像描述

    无论哪种方式,Eclipse会自动将构buildpath中的servlet容器的库。 这样你就可以导入和使用Servlet API。


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

在任何情况下,您都不需要在项目的“ 构buildpath”属性中摆弄。 你应该首先不要手动复制/下载/移动/包括像servlet-api.jarjsp-api.jarel-api.jarj2ee.jarjavaee.jar等单独的servletcontainer特定的库。只会导致未来的可移植性,兼容性,类path和可维护性问题,因为当您的web应用程序部署到不同版本/版本的servlet容器时,您的webapp将无法正常工作。

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

这里有一些典型的例外情况,如果您不小心尝试修复编译错误,那么当您使用特定于servletcontainer的库处理/WEB-INF/lib甚至/JRE/lib/JRE/lib/ext等时,

  • java.lang.NullPointerException在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:方法getJspApplicationContext(ServletContext)对于JspFactorytypes是未定义的
  • java.lang.VerifyError:(class:org / apache / jasper / runtime / JspApplicationContextImpl,方法:createELResolver签名:()Ljavax / el / ELResolver;)函数的参数不兼容
  • jar没有加载。 请参阅Servlet规范2.3,第9.7.2节。 违规类:javax / servlet / Servlet.class

导入javax.servlet

步骤1

转到项目的属性 (使用Alt + Enter或righ-click)

第2步

在“ 目标运行时”下检查Apache Tomcat v7.0 ,然后运行。

哈日一点点区别:

右键单击项目—>属性—> Java Build Path —> Add Library … —> Server Runtime —> Apache Tomcat —->完成。

快速修复 – 在Eclipse中工作 – 右键单击​​项目 – >属性 – > Java构buildpath(选项卡) – >添加外部JAR – >findservlet api jar实现(如果Tomcat – 它的名为servlet-api.jar) – >单击确定。 而已 !!

从你的服务器lib文件夹中包含servlet-api.jar。 在这里输入图像描述

做这一步

在这里输入图像描述

我知道这是一个老post。 但是,我观察到另一个在项目中已经添加了Tomcat的实例,但是我们仍然得到这个错误。 这是否解决了这个问题:
Alt + Enter
项目方面
在右侧,细节旁边是另一个标签“Runtimes”。 安装的tomcat服务器将在那里列出。 select它。
保存configuration并完成!

希望这有助于某人。

您可以简单地复制servlet-api.jar并将该jar文件复制到WEB-INF中的lib文件夹中。 那么只要清理并build立你的项目,你的错误将被解决。

  **OR** 

您可以使用以下步骤直接将jar文件添加到库中。

  1. 右键点击项目。
  2. 转到属性。
  3. 转到Java构buildpath。
  4. 从选项卡中select添加库选项。
  5. 添加jar文件
  6. 给你的servlet-api.jar文件的path。
  7. 清理和build立你的项目。

在pom.xml中添加javax.servlet依赖项。 你的问题将得到解决。

 <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.0.1</version> <scope>provided</scope> </dependency> 

从维基百科 。

 import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class HelloWorld extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " + "Transitional//EN\">\n" + "<html>\n" + "<head><title>Hello WWW</title></head>\n" + "<body>\n" + "<h1>Hello WWW</h1>\n" + "</body></html>"); } } 

当然,这只有在您将servlet-api.jar添加到Eclipse构buildpath时才有效。 通常你的应用服务器(例如Tomcat )将拥有正确的jar文件。

在与“dynamicWeb模块”相关的项目创build过程中,我得到了空指针exception。

为了让项目编译(即成功导入javax.servlet ),我必须去项目的Properties ,在侧边栏中selectProject Facets ,勾选Dynamic Web Module ,然后点击Apply

令人惊讶的是,这次“dynamicWeb模块”方面安装正确,并且导入开始正常工作。

首先,您应该手动复制/下载/移动/包含像servlet-api.jar这样的独立servlet容器特定的库

@BalusC,

我宁愿使用我的应用程序将使用的确切类,而不是Eclipse提供的类(当我感觉像一个偏执的开发人员)。

另一个解决scheme是使用Eclipse“configuration构buildpath”>“库”>“添加外部容器”,并添加任何容器select使用的servlet api。

当使用ant构build时,请遵循@kaustav datta的解决scheme – 拥有像tomcat.home或weblogic.home这样的属性。 然而,它引入了另一个限制,即如果使用了weblogic,开发人员必须在他/她的本地机器上安装Weblogic! 任何其他清洁解决scheme

在我的情况下,当我去了目标运行时 ,屏幕,尽pipe安装Tomcat 7没有列出(禁用)。

要解决,我必须去首选项 – >服务器 – >运行时环境然后卸载并重新安装Tomcat 7。

我们中的许多人通过Maven项目在Eclipse中开发。 如果是这样的话,可以通过tomcat-servlet-apitomcat-jsp-api jar将Tomcat依赖包括在Maven中。 每个版本的Tomcat都存在一个。 通常添加这些provided给您的聚甲醛的范围就足够了。 这将使您的构build更加便携。

如果将来升级Tomcat,则只需更新这些jar子的版本。