我想在Eclipse中使用Servlet进行开发,但它说无法解析包javax.servlet
。如何将javax.servlet
包添加到我的Eclipse项目中?
答案 0 :(得分:399)
确保您至少使用Eclipse IDE for Java EE developers(使用 EE )。它包含用于创建动态Web项目和轻松集成servlet容器的开发工具(这些工具是Web Tools Platform,WTP的一部分)。如果你已经有Eclipse IDE for Java(没有EE),并且手动安装了一些与EE相关的插件,那么很可能它没有正确完成。你最好把它丢弃并抓住真正的Java IDE for Java EE。
您还需要确保已在计算机上安装了servletcontainer,该servletcontainer至少实现与生产环境中的servletcontainer相同的Servlet API版本,例如Apache Tomcat,Oracle GlassFish,{ {3}} / JBoss AS等。通常,只需下载ZIP文件并将其解压缩就足够了。对于Tomcat,请不下载EXE格式,这仅适用于基于Windows的生产环境。另见a.o. WildFly
servletcontainer是Servlet API的具体实现。请注意,Oracle.com上的Several ports (8005, 8080, 8009) required by Tomcat Server at localhost are already in use下载基本上包含GlassFish。因此,如果您已经下载了Java EE SDK,那么您基本上已经拥有了GlassFish。另请注意,例如GlassFish和JBoss AS / WildFly more 不仅仅是一个servletcontainer,它们还支持JSF,EJB,JPA和所有其他Java EE的功能。另见a.o. Java EE SDK
在您的计算机上安装了Eclipse for Java EE和servletcontainer之后,请在Eclipse中执行以下步骤:
在Eclipse中集成servletcontainer
一个。 通过服务器视图
选择适当的servletcontainer品牌和版本,然后浏览向导。
湾或者,通过Eclipse首选项
将服务器与项目相关联
一个。 在新项目中
湾或者,在现有项目中
无论哪种方式,Eclipse都会自动在构建路径中获取servletcontainer的库。这样您就可以导入和使用Servlet API。
在任何情况下,您都不需要在项目的 Build Path 属性中摆弄。您最重要的是从不手动复制/下载/移动/包含各个servletcontainer特定的库,如servlet-api.jar
,jsp-api.jar
,el-api.jar
,j2ee.jar
它只会导致未来的可移植性,兼容性,类路径和可维护性问题,因为当它部署到不同make /版本的servlet容器时,webapp将无法工作,而不是那些库最初从
如果您正在使用Maven,则需要确保已将目标运行时已提供的特定于servlet容器的库标记为javaee.jar
。
以下是一些典型的例外情况,当您将servletcontainer特定库丢弃<scope>provided</scope>
甚至/WEB-INF/lib
,/JRE/lib
等时,可以通过不小心尝试修复编译错误:
答案 1 :(得分:217)
转到项目的属性(使用 Alt + Enter 或righ-click)
检查目标运行时下的 Apache Tomcat v7.0 ,它可以正常工作。
答案 2 :(得分:77)
与Hari有点不同:
右键点击项目---&gt;属性---&gt; Java构建路径---&gt;添加库... ---&gt;服务器运行时---&gt; Apache Tomcat ----&gt;完成。
答案 3 :(得分:13)
从服务器lib文件夹中包含servlet-api.jar。
执行此步骤
答案 4 :(得分:12)
快速修复 - 这在Eclipse中工作 - 右键单击项目 - &gt;属性 - &gt; Java构建路径(Tab) - &gt;添加外部JAR - &gt;找到servlet api jar实现(如果Tomcat - 它名为servlet-api.jar) - &gt;单击确定。就是这样!!
答案 5 :(得分:11)
在pom.xml中添加javax.servlet依赖项。你的问题将得到解决。
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
答案 6 :(得分:5)
您可以简单地复制servlet-api.jar
并将该jar文件复制到WEB文件夹中的lib文件夹中。
然后只需清理并构建您的项目,您的错误就会得到解决。
**OR**
您可以使用以下步骤直接将jar文件添加到库中。
servlet-api.jar
文件的路径。答案 7 :(得分:5)
我知道这是一个老帖子。但是,我观察了另一个实例,在该项目中已经添加了Tomcat,但我们仍然遇到此错误。这是为了解决这个问题:
Alt + 输入
项目方面
右边的细节旁边是另一个标签“Runtimes”。
安装的tomcat服务器将在那里列出。选择它。
保存配置并完成!
希望这有助于某人。
答案 8 :(得分:3)
来自wikipedia。
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构建路径时才有效。通常,您的应用程序服务器(例如Tomcat)将具有正确的jar文件。
答案 9 :(得分:3)
对于maven项目,添加以下依赖性:
<!-- https://mvnrepository.com/artifact/javax.servlet/servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
对于gradle项目:
dependencies {
providedCompile group: 'javax.servlet', name: 'javax.servlet-api', version: '3.0.1'
}
或下载javax.servlet.jar
并添加到您的项目中。
答案 10 :(得分:2)
在与“Dynamic Web Module”相关的项目创建期间,我收到了一个空指针异常。
要让项目进行编译(即成功导入javax.servlet
),我必须转到项目的属性,选择 Project Facets 侧边栏,勾选动态网络模块,然后点击应用。
令人惊讶的是,这次“动态Web模块”方面安装正确,导入开始工作。
答案 11 :(得分:2)
在我的情况下,当我进入 Targetted Runtimes 屏幕时,尽管安装了Tomcat 7,但未列出(禁用)。
要修复,我必须转到偏好设置 - &gt;服务器 - >运行时环境,然后卸载并重新安装Tomcat 7.
答案 12 :(得分:2)
我们中的许多人通过Maven项目在Eclipse中开发。如果是这样,
您可以通过tomcat-servlet-api
和tomcat-jsp-api
jar在Maven中包含Tomcat依赖项。每个版本的Tomcat都存在一个。通常将范围provided
添加到您的POM就足够了。这将使您的构建更加便携。
如果将来升级Tomcat,您只需更新这些jar的版本。
答案 13 :(得分:0)
首先,您应该永远不要手动复制/下载/移动/包含servlet-api.jar等各个servletcontainer特定的库
@BalusC,
我更喜欢使用我的应用程序将使用的确切类而不是Eclipse提供的类(当我感觉像一个偏执的开发人员时)。
另一种解决方案是使用Eclipse“配置构建路径”&gt;图书馆&gt;添加外部Jars,并添加任何Container选择使用的servlet api。
在使用ant构建时遵循@kaustav datta的解决方案 - 拥有像tomcat.home或weblogic.home这样的属性。 然而,如果使用weblogic,它会引入开发人员必须在他/她的本地机器上安装Weblogic的另一个约束! 还有其他清洁剂吗?
答案 14 :(得分:0)
这也可能是原因。我想出了以下pom.xml
。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
未解决的问题是由于排除了spring-boot-starter-tomcat
。只需删除<exclusions>...</exclusions>
依赖项即可解决问题,但是确保这样做还将排除嵌入式tomcat服务器。
如果您还需要嵌入式tomcat服务器,则可以使用compile scope
添加相同的依赖项。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>compile</scope>
</dependency>