如何在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中执行以下步骤:
-
在Eclipse中集成servletcontainer
一个。 通过服务器视图
- 打开底部框中的服务器视图。
- 右键单击那里并select新build>服务器 。
-
select适当的servletcontainer制作和版本,并通过向导走。
湾 或者,通过Eclipse首选项
- 打开窗口>首选项>服务器>运行时环境 。
-
您可以在这里添加 , 编辑和删除服务器。
-
将服务器与项目关联
一个。 在新项目中
- 打开左侧的Project Navigator / Explorer 。
- 在那里单击右键并selectNew> Project ,然后在菜单Web> Dynamic Web Project中 。
-
在向导中,将目标运行时设置为集成服务器。
湾 或者,在现有的项目中
- 右键单击项目,然后select“ 属性” 。
-
在“ 目标运行时间”部分中,select集成的服务器。
无论哪种方式,Eclipse会自动将构buildpath中的servlet容器的库。 这样你就可以导入和使用Servlet API。
切勿携带松散的特定于服务器的JAR文件
在任何情况下,您都不需要在项目的“ 构buildpath”属性中摆弄。 你应该首先不要手动复制/下载/移动/包括像servlet-api.jar
, jsp-api.jar
, el-api.jar
, j2ee.jar
, javaee.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
步骤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文件添加到库中。
- 右键点击项目。
- 转到属性。
- 转到Java构buildpath。
- 从选项卡中select添加库选项。
- 添加jar文件
- 给你的
servlet-api.jar
文件的path。 - 清理和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-api
和tomcat-jsp-api
jar将Tomcat依赖包括在Maven中。 每个版本的Tomcat都存在一个。 通常添加这些provided
给您的聚甲醛的范围就足够了。 这将使您的构build更加便携。
如果将来升级Tomcat,则只需更新这些jar子的版本。