35

我已经开始编写可以在 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.jarEclipse 但仍然相同,还尝试构建和清理项目。我不在我的 Eclipse 上使用 Tomcat,只在我的 Netbeans 上使用它。我该如何解决这个问题?

4

12 回答 12

57

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

不要servlet-api.jar放在你的项目中。这只是自找麻烦。如果Dynamic Web Module facet 设置为 3.0 版,您需要检查项目属性的Project Facets部分。您还需要确保您的(如果有的话)被声明为符合 Servlet 3.0 规范。即根声明必须匹配以下内容:/WEB-INF/web.xml<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 中集成一个完整的 servlet 容器,例如 Tomcat,然后在项目属性的Targeted Runtimes中引用它。您可以对Google App Engine执行相同的操作。

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

也可以看看:


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

于 2011-09-29T15:02:52.707 回答
17

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

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 等)不支持注释。

于 2011-09-29T11:19:59.747 回答
11

如果您使用 Maven 并且不想在 Eclipse的目标运行时中链接 Tomcat,您可以简单地添加pom.xml 中提供的范围的依赖项:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
</dependency>
于 2015-02-26T12:53:53.960 回答
5

window->Preference->server->runtime environment

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

right click project->properties>Targeted Runtimes

然后检查服务器

于 2014-09-18T05:17:22.030 回答
3

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

<dependencies>
          <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-web-api</artifactId>
            <version>6.0</version>
            <scope>provided</scope>
         </dependency>
  </dependencies>
于 2019-03-08T07:52:43.463 回答
2

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

于 2014-05-28T15:30:39.223 回答
2
import javax.servlet.annotation.*;

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

于 2014-06-30T18:50:40.000 回答
2

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

在此处输入图像描述

粘贴到WEB-INF > lib文件夹

在此处输入图像描述

错误已解决!!!

于 2019-12-16T04:32:04.067 回答
1

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

于 2013-02-03T22:29:32.493 回答
1

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

于 2015-04-14T11:09:57.137 回答
0

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

于 2014-07-01T18:57:09.077 回答
-2

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

于 2011-09-29T10:16:37.440 回答