wake-up-neo.com

javax.servlet.annotation.WebServlet kann nicht importiert werden.

Ich habe begonnen, eine App zu schreiben, die auf Google App Engine ausgeführt werden kann.
Wenn ich meinen Code von Netbeans für Eclipse verwenden wollte, hatte ich einen Fehler bei:

 import javax.servlet.annotation.WebServlet;

und 

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

die Fehler sind:

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

Ich habe versucht, die servlet-api.jar in Eclipse zu importieren, aber immer noch dasselbe, auch das Projekt zu bauen und zu reinigen.
Ich benutze Tomcat nicht für meine Eclipse, ich habe es nur auf meinen Netbeans.
Wie kann ich das Problem lösen?

33

Ich habe versucht, die Servlet-api.jar in Eclipse zu importieren, aber ich habe trotzdem versucht, das Projekt zu erstellen und zu bereinigen. Ich verwende Tomcat nicht für meine Eclipse, sondern nur für meine Netzbohnen. Wie kann ich das Problem lösen?

Geben Sie not den servlet-api.jar in Ihr Projekt ein. Dies verlangt nur Ärger. Sie müssen im Abschnitt Project Facets der Eigenschaften Ihres Projekts nachsehen, ob die Facette Dynamic Web Module auf Version 3.0 eingestellt ist. Sie müssen auch sicherstellen, dass Ihr /WEB-INF/web.xml (falls vorhanden) als konforme Servlet 3.0-Spezifikation deklariert wurde. Das heißt Die <web-app>-Root-Deklaration muss mit den folgenden Angaben übereinstimmen:

<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">

Um javax.servlet-Sachen importieren zu können, müssen Sie einen vollwertigen Servletcontainer wie Tomcat in Eclipse integrieren und dann in Targeted Runtimes der Projekteigenschaften referenzieren. Sie können dasselbe für Google App Engine tun.

Wiederholen Sie not -Containerspezifische Bibliotheken in das webapp-Projekt, wie von anderen vorgeschlagen. Dadurch wird Ihre Webapp auf Produkten anderer Hersteller/Versionen nicht ausgeführt. Sie erhalten Fehler/Ausnahmen in Bezug auf Klassenpfade in allen Farben.

Siehe auch:


Nicht bezogen auf die konkrete Frage: GAE unterstützt nicht Servlet 3.0. Der darunter liegende Jetty 7.x-Container unterstützt nur Max Servlet 2.5.

55
BalusC

Überprüfen Sie, ob die Versionsnummer Ihres servlet-api.jar mindestens 3.0 beträgt. Es gibt eine Versionsnummer in der jar in der META-INF/manifest.mf-Datei:

Implementation-Version: 3.0.1

Wenn es weniger als 3.0 ist, laden Sie die 3.0.1 von Maven Central herunter: http://search.maven.org/#artifactdetails|javax.servlet|javax.servlet-api|3.0.1|jar

Frühere Servlet-Spezifikationen (2.5, 2.4 usw.) unterstützen keine Anmerkungen.

16
palacsint

Wenn Sie Maven verwenden und Tomcat nicht in der Targeted Runtimes in Eclipse verknüpfen möchten, können Sie die Abhängigkeit einfach mit scope vorausgesetzt in Ihrer pom.xml hinzufügen:

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

Gehe zu 

window->Preference->server->runtime environment

wählen Sie dann Ihren Tomcat-Server aus ..__ Wenn der Fehler immer noch vorhanden ist, 

right click project->properties>Targeted Runtimes

Überprüfen Sie dann den Server

3
Khaino
import javax.servlet.annotation.*;

(niemand hat dies geschrieben, muss aber importieren dies als WebInitparam wird von den anderen Paketen nicht erkannt)

2
Sobbosachi

Ich hatte das gleiche Problem. Es stellte sich heraus, dass mein Projekt so konfiguriert wurde, wie viele von Ihnen oben angegeben hatten. Das Problem bestand jedoch weiterhin. Daher ging ich tiefer und kam zu dem Schluss, dass ich Apache Tomcat 6 als meinen Runtime-Server verwendete. Daher war das Update einfach Ich habe gerade das Projekt aktualisiert, um Apache Tomcat 7 zu verwenden, und das ist alles, schließlich erkennt die IDE Annotation javax.servlet.annotation.WebServlet.

2
grails-coder

Fügen Sie die Bibliothek "Server Runtime" zu Ihrem Java-Erstellungspfad hinzu, um das Problem zu beheben.

1
user2038106

Wenn Sie IBM RAD verwenden, stellen Sie sicher, dass Sie die Datei j2ee.jar in Ihrem Projekterstellungspfad -> Bibliotheken entfernen, und klicken Sie dann auf "Externes jar hinzufügen". Wählen Sie dann die mit RAD gelieferte j2ee.jar aus.

1
Piyush Chordia

Ich hatte das gleiche Problem mit Spring, das durch Hinzufügen von Tomcat Server Runtime zum Build-Pfad behoben wurde.

0
murillo.cjr

Fügen Sie einfach das Folgende zu Ihrem maven-Projekt hinzu: pom.xml flie:

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