web-dev-qa-db-fra.com

pot pas chargé. Voir Spéc. Servlet 2.3, Section 9.7.2. Classe en infraction: javax / servlet / Servlet.class

Je dirige un projet Maven qui est également un projet Web dynamique. J'ai utilisé toutes les bibliothèques Spring dans Maven. J'ai créé web.xml, mais lorsque je démarre mon serveur Tomcat 7, le message suivant s'affiche:

INFO: validateJarFile(C:\Users\mibvzd0\workspace\.metadata\.plugins\
org.Eclipse.wst.server.core\tmp2\wtpwebapps\hapi_hl7\WEB-INF\lib\
servlet-api-2.4.jar) - jar not loaded.
See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class

J'ai essayé de supprimer le servlet de webapp/lib, mais cela n'a pas fonctionné. Faites-moi savoir ce qui devrait être fait dans mon cas.

96
dreambigcoder

Le fichier .jar de la servlet API ne doit pas être intégré à l'application Web, car il est évident que le conteneur contient déjà ces classes dans son chemin de classe: il implémente les interfaces contenues dans ce fichier jar.

La dépendance doit être dans la portée provided, plutôt que par défaut compile, dans votre pom Maven:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>
109
JB Nizet

Vous recevez ce message d'avertissement lorsque le fichier jar de servlet api a déjà été chargé dans le conteneur et que vous essayez de le charger à nouveau à partir du répertoire lib.

Les spécifications de servlet indiquent que vous n'êtes pas autorisé à avoir le répertoire servlet.jar dans votre application Web lib.

  • Supprimez le message d'avertissement en supprimant simplement servlet.jar de votre répertoire lib.
  • Si vous ne trouvez pas le fichier jar dans le répertoire lib, recherchez votre chemin de génération et supprimez-le.

C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\project\WEB-INF\lib

Si vous exécutez un projet maven, remplacez la dépendance javax.servlet-api par scope provided dans pom.xml car le conteneur a déjà fourni le fichier jar de servlet lui-même.

21
Lucky

Pour résoudre ce problème, définissez le scope sur fourni. Cela indique à Maven d'utiliser le code servlet-api.jar pour la compilation et le test uniquement, mais ne l'incluez PAS dans le fichier WAR. Le conteneur déployé "fournira" le servlet-api.jar lors de l'exécution.

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
    <scope>provided</scope>
</dependency>
4
Sandeep Kumar

La ligne de commande suivante de Windows peut vous être utile pour localiser le fichier JAR incriminé. il crée un index de tous les fichiers de classe dans tous les fichiers JAR du dossier. Exécutez-le depuis le dossier lib de votre application déployée, puis recherchez le fichier index.txt pour la classe incriminée.

for /r %X in (*.jar) do (echo %X & jar -tf %X) >> index.txt
2
Chris Nava

étendue de la dépendance Maven

fourni : Cela ressemble beaucoup à la compilation, mais vous indique attendez le JDK ou un conteneur à fournir la dépendance à l'exécution. Par exemple, lors de la création d'une application Web pour Java Enterprise Edition, vous devez définir la dépendance sur l'API Servlet ​​ et les API Java EE associées à la portée fournie car le conteneur Web fournit ces classes. Cette portée est uniquement disponible sur le chemin de classe de compilation et de test et n'est pas transitive.

2
yuceel

J'ai eu du mal avec ce problème et j'ai essayé de nombreuses "solutions".

Cependant, à la fin, le seul qui a fonctionné et qui a pris quelques secondes à faire était de: supprimer et rajouter une nouvelle instance de serveur!

En gros, j'ai cliqué avec le bouton droit de la souris sur mon serveur Tomcat dans Eclipse sous Serveurs et je l'ai supprimé. Ensuite, j'ai ajouté un nouveau serveur Tomcat. Nettoyé et redéployé l'application et je me suis débarrassé de cette erreur.

1
iaforek

Les exclusions et les dépendances provided ne fonctionneront pas dans les projets enfants.

Si vous utilisez l'héritage dans les projets Maven, vous devez inclure cette configuration dans le fichier parent pom.xml. Vous aurez une section <parent>...</parent> dans votre pom.xml si vous utilisez l'héritage . Donc, vous aurez quelque chose comme ça dans votre parent pom.xml:

<groupId>some.groupId</groupId>
<version>1.0</version>
<artifactId>someArtifactId</artifactId>
<packaging>pom</packaging>
<modules>
    <module>child-module-1</module>
    <module>child-module-2</module>
</modules>
<dependencies>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>jsp-api</artifactId>
        <version>2.1</version>
        <scope>provided</scope>
    </dependency>
</dependencies>
0
lmiguelmh

Recherchez dans le répertoire suivant le fichier jar el-api.jar: C:\Apache-Tomcat-7.0.39\lib\el-api.jar, s'il existe, dans ce répertoire de votre application Web WEB-INF\lib\el-api.jar le pot doit être enlevé

0
Fred Ondieki

Généralement, lorsque vous voyez ce message, il est bénin. Si ça dit

INFO: validateJarFile(/<webapp>/WEB-INF/lib/servlet-api-2.5.jar) - jar not loaded. 
See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class

Cela signifie qu'il ignore votre servlet-api-2.5.jar parce que Tomcat possède déjà une version intégrée de ce fichier jar, il ne l'utilisera donc pas. En règle générale, cela ne pose pas de problème.

Si cependant il est dit WEB-INF/lib/my_jar.jar - jar not loaded...Offending class: javax/servlet/Servlet.class

alors ce que vous pouvez faire (dans mon cas, c'est un pot ombré) est exécuté

Dépendance $ mvn: tree

et découvrez que vous avez une dépendance transitive sur "quelque chose" qui dépend d'un fichier jar qui est soit servlet-api ou quelque chose de ce type (ex: Tomcat-servlet-api-9.0.0). Ajoutez donc à votre pom une exclusion, par exemple: (dans mon cas, Tomcat, dans votre cas, probablement ceux mentionnés dans les autres réponses):

 <dependency>
    ...
    <exclusions>
      <exclusion>
        <groupId>org.Apache.Tomcat</groupId>
        <artifactId>Tomcat-servlet</artifactId>
      </exclusion>
    </exclusions> 
</dependency>
0
rogerdpack

lorsque votre modèle d'URL est incorrect, cette erreur peut se produire.

par exemple. Si vous avez écrit @WebServlet ("login"), cette erreur sera affichée. Le correct est @WebServlet ("/ login").

0
Phyo Thinza

La bibliothèque de dépendances JAX-WS "jaxws-rt.jar" est manquante.

Allez ici http://jax-ws.Java.net/ . Téléchargez la distribution RI JAX-WS. Décompressez-le et copiez “jaxws-rt.jar” dans le dossier de la bibliothèque Tomcat “{$ Tomcat}/lib“. Redémarrez Tomcat.

0
Faiz