无法导入javax.servlet.annotation.WebServlet

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.jar 导入到 Eclipse 中,但仍然出现相同的问题,也尝试了构建和清理项目。 我在 Eclipse 上没有使用 Tomcat,只在 Netbeans 上有它。 我该如何解决这个问题?

12个回答

58
不要将servlet-api.jar放入您的项目中,这只会引起麻烦。您需要检查项目属性的"Project Facets"部分是否将"Dynamic Web Module"设置为3.0版本。您还需要确保您的/WEB-INF/web.xml(如果有)符合Servlet 3.0规范声明。即根声明必须匹配以下内容:。
<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做同样的操作。
再次强调,请不要像其他人建议的那样将特定于容器的库复制到Web应用程序项目中。这会使您的Web应用程序在不同制造/版本的生产容器上无法执行。您将会看到各种颜色的与类路径相关的错误/异常。
另请参阅:

与具体问题无关:GAE不支持Servlet 3.0。其基础的Jetty 7.x容器仅支持最大Servlet 2.5。


如何在Eclipse中集成Tomcat? - Abel Callejo
@Abel:点击“另请参阅”链接。 - BalusC

17

13
如果你正在使用Maven并且不想在Eclipse的目标运行时中链接Tomcat,你可以在pom.xml中使用provided作用域添加依赖项:
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
</dependency>

5

请前往

window->Preference->server->runtime environment

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

right click project->properties>Targeted Runtimes

那么请检查服务器。

3
只需将以下内容添加到你的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 :) - Chris

2
import javax.servlet.annotation.*;

目前没有人写过这个,但需要将其作为导入,因为其他包无法识别WebInitparam


2

我遇到了相同的问题,根据你们上面说的方法配置了我的项目,但问题仍然存在。所以我深入研究后发现,我使用的运行时服务器是 Apache Tomcat 6,解决方法很简单,只需将项目升级到使用 Apache Tomcat 7 就可以了,最终 IDE 可以识别出 javax.servlet.annotation.WebServlet 注解。


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

enter image description here

把它粘贴到 WEB-INF > lib 文件夹中。

enter image description here

错误已经解决!!!

1
将“Server Runtime”库添加到您的Java构建路径中,它会解决这个问题。

1
如果您正在使用IBM RAD,则请确保在项目构建路径的库选项卡中删除任何j2ee.jar,并点击“添加外部jar”并选择与RAD捆绑的j2ee.jar。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接