导入 javax.servlet 无法解析 [重复]
Posted
技术标签:
【中文标题】导入 javax.servlet 无法解析 [重复]【英文标题】:The import javax.servlet can't be resolved [duplicate] 【发布时间】:2011-05-06 09:19:53 【问题描述】:我正在尝试使用 eclipse for Java EE 来开发 Web 应用程序。
我需要使用 Tomcat 作为我的服务器。我已经下载了 Tomcat 并且它正在运行。但是我的程序无法编译。
我收到以下错误:
导入 javax.servlet 无法解析。
我需要做什么?
【问题讨论】:
【参考方案1】:您需要将 Servlet API 添加到您的类路径中。在 Tomcat 6.0 中,它位于 Tomcat 的 lib
文件夹中名为 servlet-api.jar
的 JAR 中。您可以将对该 JAR 的引用添加到项目的类路径中,或者将 JAR 的副本放在您的 Eclipse 项目中并从那里将其添加到类路径中。
如果您想将 JAR 留在 Tomcat 的 lib
文件夹中:
servlet-api.jar
并选择它。
点击确定更新构建路径。
或者,如果您将 JAR 复制到您的项目中:
右键单击项目,单击属性。 选择 Java 构建路径。 单击添加 JAR... 在您的项目中找到servlet-api.jar
并选择它。
点击确定更新构建路径。
【讨论】:
在/WEB-INF/lib
中拥有一个特定于 servletcontainer 的 JAR 副本会使您的应用程序不可移植。它只能在完全相同的服务器 make/version 上运行,而不能在其他服务器 make/versions 上运行。 NoClassDefFoundError
会在你的头上飞来飞去。
我从来没有说过它应该在WEB-INF/lib
中——只是它可以被复制到项目中,以便可以添加到构建路径中。这并不一定意味着它会被包含在 WAR 中。
尽管如此,这还是很笨拙,不是推荐的方法。
这是解决方法。下面的 BalusC 给出了确切的解决方案。
添加 servlet-api.jar 没有任何改变,project > clean 使它工作。【参考方案2】:
添加到 pom.xml
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
【讨论】:
请注意,如果使用 maven 时仍然会出现此问题,那么我们只需要再次重新构建项目以使其识别依赖项的更改。【参考方案3】:如果你得到这个编译错误,这意味着你没有在类路径中包含 servlet jar。包含此 jar 的正确方法是将 Server Runtime jar 添加到您的 eclipse 项目中。您应该按照以下步骤解决此问题: 您可以从这里下载 servlet-api.jar http://www.java2s.com/Code/Jar/s/Downloadservletapijar.htm
Save it in directory. Right click on project -> go to properties->Buildpath and follow the steps.
注意:屏幕上显示的jar不是正确的jar。
您可以按照步骤进行配置。
【讨论】:
【参考方案4】:我遇到了同样的问题,因为我的“动态 Web 项目”没有引用我想使用的已安装服务器,因此没有引用服务器提供的 Servlet API。
以下步骤解决了它,而无需向 Java 构建路径添加额外的 Servlet-API(Eclipse 版本:Luna):
右键单击您的“动态网络项目” 选择属性 在“属性”向导左侧的列表中选择Project Facets 在向导的右侧,您应该会看到一个名为 Runtimes 的选项卡。选择运行时选项卡并检查服务器您要运行 servlet。编辑:如果没有列出服务器,您可以在运行时选项卡上创建一个新服务器
【讨论】:
【参考方案5】:您需要在 POM 中将依赖项的范围设置为“已提供”。
http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Scope
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
<scope>provided</scope>
</dependency>
那么一切都会好起来的。
【讨论】:
【参考方案6】:在 Eclipse 中遇到了同样的问题。出于某种原因,我的构建路径中没有 servlet.jar 文件。我最终做的是将“lib”文件夹从我的另一个项目复制到我正在处理的项目中,然后手动进入该文件夹并将 servlet.jar 文件添加到构建路径(当您正确时会显示该选项 -单击项目资源管理器中的文件)。
【讨论】:
【参考方案7】:如果还没有完成,您需要将 Tomcat 集成到您的 Servers 视图中。右键单击那里并选择新建>服务器。从列表中选择适当的 Tomcat 版本并完成向导。
当您创建一个新的Dynamic Web Project 时,您应该在向导的第一个步骤中从列表中选择集成服务器作为Targeted Runtime。
或者当您有一个现有的Dynamic Web Project,您可以在项目属性的Targeted Runtimes 条目中设置/更改它。然后 Eclipse 会自动将其所有库添加到构建路径(项目中没有它们的副本!)。
【讨论】:
@sage:Eclipse 也会对集成服务器后创建的新项目执行此操作。 对我不起作用,我拥有你所说的一切,但仍然无法解析 javax.servlet(使用 Tomcat 8.0.3 作为服务器)【参考方案8】:将servlet-api.jar
添加到您的类路径中。你可以从tomcat的lib文件夹中获取它。
【讨论】:
以上是关于导入 javax.servlet 无法解析 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
IntelliJ IDEA 无法解析导入 javax.servlet.*;
javax.servlet.jsp.PageContext 无法解析为类型[重复]
javax.servlet.http.HTTPServlet Import 无法解析,而包的其余部分可以正常导入