web-dev-qa-db-fra.com

impossible d'importer javax.servlet.annotation.WebServlet;

J'ai commencé à écrire une application pouvant s'exécuter sur Google App Engine.
Mais lorsque je voulais utiliser mon code de Netbeans vers Eclipse, je me suis trompé:

 import javax.servlet.annotation.WebServlet;

et 

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

les erreurs sont:

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

J'ai essayé d'importer le servlet-api.jar dans Eclipse mais je n'ai toujours pas changé, j'ai également essayé de construire et de nettoyer le projet.
Je n’utilise pas Tomcat sur mon Eclipse, mais sur mon Netbeans.
Comment puis-je résoudre le problème?

33
Vitaly Menchikovsky

J'ai essayé d'importer le servlet-api.jar dans Eclipse, mais j'ai quand même essayé de construire et de nettoyer le projet. Je n'utilise pas Tomcat sur mon Eclipse, je l'ai uniquement sur mon réseau. Comment résoudre le problème le problème.

Ne not mettez le servlet-api.jar dans votre projet. Ceci ne fait que demander des ennuis. Vous devez archiver la section Facettes du projet des propriétés de votre projet si la facette Module Web dynamique est définie sur la version 3.0. Vous devez également vous assurer que votre /WEB-INF/web.xml (le cas échéant) a été déclaré conforme aux spécifications Servlet 3.0. C'est à dire. la déclaration racine <web-app> doit correspondre aux éléments suivants:

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

Pour pouvoir importer des éléments javax.servlet, vous devez intégrer un conteneur servlet complet, tel que Tomcat, dans Eclipse, puis le référencer dans Runtimes ciblés des propriétés du projet. Vous pouvez faire de même pour Google App Engine .

Encore une fois, copiez not des bibliothèques spécifiques au conteneur dans un projet webapp, comme le suggèrent d’autres. Cela rendrait votre application Web non exécutable sur des conteneurs de production d’une autre marque/version. Vous obtiendrez des erreurs/exceptions liées aux chemins de classe dans toutes les couleurs.

Voir également:


Non lié à la question concrète: GAE ne pas prend en charge Servlet 3.0. Son conteneur Jetty 7.x sous-jacent prend en charge max Servlet 2.5 uniquement.

55
BalusC

Vérifiez que le numéro de version de votre servlet-api.jar est au moins 3.0. Il y a un numéro de version à l'intérieur du fichier jar dans le fichier META-INF/manifest.mf:

Implementation-Version: 3.0.1

Si elle est inférieure à 3.0, téléchargez la version 3.0.1 depuis Maven Central: http://search.maven.org/#artifactdetails|javax.servlet|javax.servlet-api|3.0.1|jar

Les anciennes spécifications de servlet (2.5, 2.4, etc.) ne prennent pas en charge les annotations.

16
palacsint

Si vous utilisez Maven et ne souhaitez pas lier Tomcat dans Targeted Runtimes dans Eclipse, vous pouvez simplement ajouter la dépendance avec scope fourni dans votre pom.xml:

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

Aller à 

window->Preference->server->runtime environment

puis choisissez votre serveur Tomcat . Si l'erreur est toujours là, alors 

right click project->properties>Targeted Runtimes

puis vérifiez le serveur

3
Khaino
import javax.servlet.annotation.*;

(personne n'a écrit cela, mais il faut importer ceci comme WebInitparam n'est pas reconnu par les autres paquets)

2
Sobbosachi

J'ai eu le même problème, il se trouve que mon projet a été configuré comme beaucoup d'entre vous l'ont indiqué ci-dessus, mais le problème a persisté. J'ai donc approfondi et découvert que j'utilisais Apache Tomcat 6 comme serveur d'exécution. , Je viens de mettre à niveau le projet pour qu’il utilise Apache Tomcat 7 et c’est tout, enfin IDE reconnu javax.servlet.annotation.WebServlet annotation.

2
grails-coder

Ajoutez la bibliothèque 'Server Runtime' à votre chemin de génération Java, et cela résoudra le problème.

1
user2038106

Si vous utilisez IBM RAD, assurez-vous de supprimer tout fichier j2ee.jar dans l'onglet "Bibliothèques de chemin de génération de projets", puis cliquez sur "Ajouter un fichier jar externe" et sélectionnez le fichier j2ee.jar fourni avec RAD.

1
Piyush Chordia

J'ai eu le même problème en utilisant Spring, résolu en ajoutant Tomcat Server Runtime pour construire le chemin.

0
murillo.cjr

Ajoutez simplement le texte ci-dessous à votre projet maven pom.xml flie:

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