wake-up-neo.com

Glas nicht geladen. Siehe Servlet-Spezifikation 2.3, Abschnitt 9.7.2. Beleidigende Klasse: javax / servlet / Servlet.class

Ich leite ein Maven-Projekt, das auch ein dynamisches Webprojekt ist. Ich habe alle Spring-Bibliotheken in Maven benutzt. Ich habe web.xml Erstellt, aber wenn ich meinen Tomcat 7-Server starte, wird die folgende Meldung angezeigt:

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

Ich habe versucht, das Servlet aus webapp/lib Zu löschen, aber es hat nicht funktioniert. Lassen Sie mich wissen, was in meinem Fall zu tun ist.

96
dreambigcoder

Die JAR-Datei der Servlet-API darf nicht in die Webanwendung eingebettet werden, da der Container diese Klassen offensichtlich bereits in seinem Klassenpfad hat: Er implementiert die in dieser JAR enthaltenen Schnittstellen.

Die Abhängigkeit sollte sich im Bereich provided und nicht im Standardbereich compile in Ihrem Maven-Pom befinden:

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

Sie erhalten diese Warnmeldung, wenn die Servlet-API-JAR-Datei bereits in den Container geladen wurde und Sie versuchen, sie erneut aus dem Verzeichnis lib zu laden.

Die Servlet-Spezifikationen besagen, dass Sie nicht servlet.jar in Ihrem Webapps-Verzeichnis lib haben dürfen.

  • Beseitigen Sie die Warnmeldung, indem Sie einfach servlet.jar Aus Ihrem lib -Verzeichnis entfernen.
  • Wenn Sie die JAR-Datei nicht im Verzeichnis lib finden, suchen Sie nach Ihrem Erstellungspfad und entfernen Sie die JAR-Datei.

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

Wenn Sie ein Maven-Projekt ausführen, ändern Sie die Abhängigkeit javax.servlet-api In scope provided in Ihrer pom.xml, da der Container das Servlet-Jar bereits selbst bereitgestellt hat.

21
Lucky

Um das Problem zu beheben, setzen Sie scope auf provided. Dies weist Maven an, den Code servlet-api.jar nur zum Kompilieren und Testen zu verwenden, ihn jedoch NICHT in die WAR-Datei aufzunehmen. Der implementierte Container stellt zur Laufzeit die Datei servlet-api.jar zur Verfügung.

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

Die folgende Windows-Befehlszeile ist möglicherweise hilfreich, um die fehlerhafte JAR-Datei aufzuspüren. Es wird ein Index aller Klassendateien in allen Gläsern im Ordner erstellt. Führen Sie das Programm im lib-Ordner Ihrer bereitgestellten App aus und durchsuchen Sie die Datei index.txt nach der betreffenden Klasse.

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

Maven-Abhängigkeitsbereich

vorausgesetzt : Dies ähnelt dem Kompilieren, zeigt jedoch an, dass Sie erwarten der [~ # ~] jdk [~ # ~] oder ein Container , um die Abhängigkeit zur Laufzeit bereitzustellen. Wenn Sie beispielsweise eine Webanwendung für die Java Enterprise Edition) erstellen, legen Sie die Abhängigkeit von der API Servlet fest und zugehörige Java EE-APIs zum Geltungsbereich bereitgestellt , weil Der Webcontainer stellt diese Klassen bereit. Dieser Bereich ist nur im Kompilierungs- und Testklassenpfad verfügbar und nicht transitiv.

2
yuceel

Ich habe mit diesem Problem zu kämpfen und habe zahlreiche "Lösungen" ausprobiert.

Am Ende funktionierte jedoch nur Folgendes, und es dauerte tatsächlich einige Sekunden, bis dies erledigt war: Löschen und Hinzufügen einer neuen Serverinstanz!

Grundsätzlich habe ich in Eclipse unter Server mit der rechten Maustaste auf meinen Tomcat-Server geklickt und diesen gelöscht. Als nächstes habe ich einen neuen Tomcat-Server hinzugefügt. Bereinigte und stellte die Anwendung neu bereit und ich wurde diesen Fehler los.

1
iaforek

Ausschlüsse und provided Abhängigkeiten funktionieren in untergeordneten Projekten nicht.

Wenn Sie in Maven-Projekten die Vererbung verwenden, müssen Sie muss diese Konfiguration in die übergeordnete Datei pom.xml Aufnehmen. Sie werden einen Abschnitt <parent>...</parent> In Ihrer pom.xml haben wenn Sie Vererbung verwenden. Also haben Sie so etwas in Ihrem Elternteil 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

Suchen Sie im folgenden Verzeichnis nach der JAR-Datei el-api.jar: C:\Apache-Tomcat-7.0.39\lib\el-api.jar, falls vorhanden, in diesem Verzeichnis Ihrer Webanwendung WEB-INF\lib\el-api.jar das glas sollte entfernt werden

0
Fred Ondieki

Wenn Sie diese Meldung sehen, ist sie in der Regel harmlos. Wenn es heißt

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

Dies bedeutet, dass Ihr servlet-api-2.5.jar ignoriert wird, da Tomcat bereits über eine integrierte Version dieses Jars verfügt, sodass es nicht Ihre Version verwenden wird. Normalerweise verursacht dies kein Problem.

Wenn es jedoch heißt WEB-INF/lib/my_jar.jar - jar not loaded...Offending class: javax/servlet/Servlet.class

dann wird ausgeführt, was Sie tun können (in meinem Fall handelt es sich um ein schattiertes Glas)

$ mvn Abhängigkeit: Baum

und entdecken Sie, dass Sie eine transitiven Abhängigkeit von "etwas" haben, das von einem Glas abhängt, das entweder Servlet-API oder so ähnlich ist (Beispiel: Tomcat-servlet-api-9.0.0). Fügen Sie Ihrem POM einen Ausschluss hinzu, z. B .: (in meinem Fall Tomcat, in Ihrem Fall wahrscheinlich die in den anderen Antworten genannten):

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

wenn Ihr URL-Muster falsch ist, kann dieser Fehler auftreten.

z.B. Wenn Sie @WebServlet ("login") geschrieben haben, wird dieser Fehler angezeigt. Das richtige ist @WebServlet ("/ login").

0
Phyo Thinza

Die JAX-WS-Abhängigkeitsbibliothek "jaxws-rt.jar" fehlt.

Gehen Sie hier http://jax-ws.Java.net/ . Laden Sie die JAX-WS RI-Distribution herunter. Entpacken Sie es und kopieren Sie „jaxws-rt.jar“ in den Tomcat-Bibliotheksordner „{$ Tomcat}/lib“. Starten Sie Tomcat neu.

0
Faiz