无法导入javax.servlet.annotation.WebServlet;

时间:2011-09-29 10:13:04

标签: java eclipse servlets servlet-3.0

我已经开始编写可以在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 个答案:

答案 0 :(得分:55)

  

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

servlet-api.jar放入您的项目中。这只是在寻找麻烦。如果 Dynamic Web Module facet设置为3.0版,则需要检查项目属性的 Project Facets 部分。您还需要确保已将/WEB-INF/web.xml(如果有)声明为符合Servlet 3.0规范。即<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在不同品牌/版本的生产容器上无法切割。您将获得所有颜色的类路径相关错误/异常。

另见:


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

答案 1 :(得分:16)

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

答案 2 :(得分: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>

答案 3 :(得分:3)

转到

window->Preference->server->runtime environment

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

right click project->properties>Targeted Runtimes

然后检查服务器

答案 4 :(得分:2)

我遇到了同样的问题,我认为我的项目已配置为上述许多人,但问题仍然存在,所以我更深入地发现我使用Apache Tomcat 6作为我的运行时服务器,所以修复很简单,我只是将项目升级为使用Apache Tomcat 7,所有这些,最后IDE识别 javax.servlet.annotation.WebServlet 注释。

答案 5 :(得分:2)

import javax.servlet.annotation.*;

(没有人写过这个,但需要导入,因为其他软件包无法识别 WebInitparam

答案 6 :(得分:2)

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

enter image description here

将其粘贴到WEB-INF > lib文件夹

enter image description here

错误已解决!

答案 7 :(得分:1)

将库'Server Runtime'添加到您的java构建路径中,它将解决问题。

答案 8 :(得分:1)

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

答案 9 :(得分:0)

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

答案 10 :(得分:0)

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

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

答案 11 :(得分:-2)

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