无法导入 javax.servlet.annotation.WebServlet

Posted

技术标签:

【中文标题】无法导入 javax.servlet.annotation.WebServlet【英文标题】:Can't import javax.servlet.annotation.WebServlet 【发布时间】:2011-11-27 14:09:33 【问题描述】:

我已开始编写可在 Google App Engine 上运行的应用程序。 但是当我想使用从 Netbeans 到 Eclipse 的代码时,我遇到了一个错误:

import javax.servlet.annotation.WebServlet;

@WebServlet(name = "MyServlet", urlPatterns = "/MyServlet")

错误是:

The import javax.servlet.annotation cannot be resolved
WebServlet cannot be resolved to a type

我尝试将servlet-api.jar 导入 Eclipse,但还是一样,还尝试构建和清理项目。我不在我的 Eclipse 上使用 Tomcat,只在我的 Netbeans 上使用它。我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

您需要将 servlet-api.jar 添加到项目的构建路径中。看看here 了解如何做到这一点。

【讨论】:

永远不要这样做,反正也解决不了问题。 反对者,你能解释一下我上面的评论有什么问题吗?你投了反对票吗? 不知道为什么这被否决了,也不知道@anirban 在回答和接受这个问题近 1.5 年后在“谈论”什么...... 尽管正确答案被接受了 1.5 年,但这个答案在概念上是不正确的,因为它“简单”,它可能会吸引开发人员使用它,但一旦他们尝试了,它就不会成功。开发人员很可能不会删除此依赖项,只会寻找正确的答案。最终结果:该项目注定会因 1 个不正确的类路径依赖项而失败。【参考方案2】:

检查您的servlet-api.jar 的版本号至少为3.0。 META-INF/manifest.mf文件里的jar里面有一个版本号:

Implementation-Version: 3.0.1

如果小于 3.0,请从 Maven Central 下载 3.0.1:http://search.maven.org/#artifactdetails|javax.servlet|javax.servlet-api|3.0.1|jar

以前的 servlet 规范(2.5、2.4 等)不支持注释。

【讨论】:

【参考方案3】:

我尝试将 servlet-api.jar 导入 Eclipse,但同样尝试构建和清理项目。我不在我的 Eclipse 上使用 tomcat,只在我的 net-beans 上使用它。我该如何解决这个问题。

不要不要servlet-api.jar 放入您的项目中。这只是自找麻烦。如果 Dynamic Web Module facet 设置为 3.0 版,您需要检查项目属性的 Project Facets 部分。您还需要确保您的 /WEB-INF/web.xml(如果有)被声明为符合 Servlet 3.0 规范。 IE。 <web-app> 根声明必须与以下内容匹配:

<web-app
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    version="3.0">

为了能够导入javax.servlet 的东西,您需要在Eclipse 中集成一个像Tomcat 这样的完整的servlet 容器,然后在项目属性的Targeted Runtimes 中引用它。您可以对Google App Engine 执行相同操作。

再一次,不要按照其他人的建议将特定于容器的库复制到 webapp 项目中。它会使您的 webapp 在不同品牌/版本的生产容器上无法执行。你会得到所有颜色的类路径相关的错误/异常。

另见:

How do I import the javax.servlet API in my Eclipse project?

与具体问题无关:GAE 确实支持 Servlet 3.0。它的底层 Jetty 7.x 容器仅支持 max Servlet 2.5。

【讨论】:

如何在Eclipse中集成Tomcat? @Abel:单击“另请参阅”链接。【参考方案4】:

将库“服务器运行时”添加到您的 java 构建路径,它将解决问题。

【讨论】:

【参考方案5】:

我也遇到了同样的问题,原来我的项目配置和上面所说的一样,但问题仍然存在,所以我更深入地发现我正在使用 Apache Tomcat 6 作为我的运行时服务器,所以修复很简单,我只是将项目升级为使用 Apache Tomcat 7,仅此而已,最后 IDE 识别了 javax.servlet.annotation.WebServlet 注释。

【讨论】:

【参考方案6】:
import javax.servlet.annotation.*;

(没有人写过这个,但是需要import这个因为WebInitparam不被其他包识别)

【讨论】:

【参考方案7】:

我在使用 Spring 时遇到了同样的问题,通过将 Tomcat Server Runtime 添加到构建路径来解决。

【讨论】:

【参考方案8】:

前往

window->Preference->server->runtime environment

然后选择您的 tomcat 服务器。 如果错误仍然存​​在,那么

right click project->properties>Targeted Runtimes

然后检查服务器

【讨论】:

【参考方案9】:

如果您使用的是 Maven,并且不想在 Eclipse 的 Targeted Runtimes 中链接 Tomcat,您可以简单地在 pom 中添加范围为 provided 的依赖项.xml:

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

【讨论】:

【参考方案10】:

如果您使用的是 IBM RAD,请确保删除项目构建路径 -> 库选项卡中的任何 j2ee.jar,然后单击“添加外部 jar”并选择 RAD 附带的 j2ee.jar。

【讨论】:

【参考方案11】:

只需将以下内容添加到您的 maven 项目 pom.xml 文件中:

<dependencies>
          <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-web-api</artifactId>
            <version>6.0</version>
            <scope>provided</scope>
         </dependency>
  </dependencies>

【讨论】:

同时版本 8.0.1 :)【参考方案12】:

从您的 tomcat 服务器 lib 文件夹中复制 servlet-api.jar

粘贴到WEB-INF &gt; lib文件夹

错误已解决!!!

【讨论】:

以上是关于无法导入 javax.servlet.annotation.WebServlet的主要内容,如果未能解决你的问题,请参考以下文章

mysql 表导入向导无法导入 csv 文件

导入 theano 时出错“无法导入名称 gof”

无法从'@angular/forms'导入“导入FormGroup,FormControl [重复]

无法在春季导入 org.apache.poi,因此无法编译

ImportError:无法导入名称“评估”(来自意外导入评估)

vulfocus无法导入镜像