2011-01-08 18 views
0

Alles funktionierte gut, aber jetzt kann ich meine Anwendung nicht mehr ausführen. Aus irgendeinem Grund javax. * Ist noch nicht in Eclipse gefunden werden die Importe sind in Ordnung ...java.lang.NoClassDefFoundError

exception 

javax.servlet.ServletException: Error allocating a servlet instance 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857) 
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) 
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
java.lang.Thread.run(Thread.java:619) 


root cause 

java.lang.NoClassDefFoundError: javax/servlet/http/HttpServlet 
java.lang.ClassLoader.defineClass1(Native Method) 
java.lang.ClassLoader.defineClassCond(ClassLoader.java:632) 
java.lang.ClassLoader.defineClass(ClassLoader.java:616) 
java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) 
java.net.URLClassLoader.defineClass(URLClassLoader.java:283) 
java.net.URLClassLoader.access$000(URLClassLoader.java:58) 
java.net.URLClassLoader$1.run(URLClassLoader.java:197) 
java.security.AccessController.doPrivileged(Native Method) 
java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
java.lang.ClassLoader.loadClass(ClassLoader.java:248) 
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1560) 
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1491) 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857) 
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) 
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
java.lang.Thread.run(Thread.java:619) 


root cause 

java.lang.ClassNotFoundException: javax.servlet.http.HttpServlet 
java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
java.security.AccessController.doPrivileged(Native Method) 
java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
java.lang.ClassLoader.loadClass(ClassLoader.java:248) 
java.lang.ClassLoader.defineClass1(Native Method) 
java.lang.ClassLoader.defineClassCond(ClassLoader.java:632) 
java.lang.ClassLoader.defineClass(ClassLoader.java:616) 
java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) 
java.net.URLClassLoader.defineClass(URLClassLoader.java:283) 
java.net.URLClassLoader.access$000(URLClassLoader.java:58) 
java.net.URLClassLoader$1.run(URLClassLoader.java:197) 
java.security.AccessController.doPrivileged(Native Method) 
java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
java.lang.ClassLoader.loadClass(ClassLoader.java:248) 
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1560) 
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1491) 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857) 
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) 
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
java.lang.Thread.run(Thread.java:619) 
+0

Sie starten von Eclipse? Wenn dies der Fall ist, überprüfen Sie den Klassenpfad der Laufkonfiguration. –

Antwort

0

die servlet-api.jar dem Projekt Classpath hinzufügen. Servlet-Container enthalten dieses Jug-Paket, sodass Sie es nicht zu lib hinzufügen müssen.

1

Normalerweise haben Sie servlet-api.jar in der Apache Tomcat "Server Runtime" -Bibliothek.

Wenn Sie Serverlaufzeit in Elcipse definieren, ist diese Bibliothek definiert und enthält eine Verknüpfung zu servet-api.jar in Tomcat.

Wenn Sie ein dynamisches Webprojekt erstellen, sollte diese Bibliothek in Java Build Path definiert sein. Überprüfen Sie, ob Ihr Projekt über diesen Erstellungspfad verfügt.

-2

Kopieren Sie einfach das Servlet-API-Jar und fügen Sie es in Ihr Webapps-Lib-Verzeichnis ein. und wähle dann dein Projekt in Eclipse aus -> Mausklick rechts -> Eigenschaften -> Java Build Pfad -> wähle den Reiter "Order and Export" -> wähle All -> Finish.

jetzt nur Ihre Anwendung mit Eclipse runt. ich hoffe, es wird gut funktionieren. immer noch Problem ist da, dann sag mir, ich werde dir eine andere Lösung sagen

+2

Das funktioniert, aber das ist eine völlig falsche Art und Weise. Ihre Webapp wird immer dann unterbrochen, wenn Sie sie auf Servletcontainern eines anderen Herstellers/einer anderen Version bereitstellen, als der, in der die libs, die Sie im webapps lib-Ordner abgelegt haben, entstanden sind. Sie sollten lieber die * Target Runtime * in den Projekteigenschaften einstellen, dann wird Eclipse automatisch dafür sorgen. Und das NICHT, indem man servletcontainer-spezifische Bibliotheken in webapps lib kopiert. – BalusC

+0

ya was auch immer du gesagt hast ist richtig. Angenommen, Sie versuchen, Ihr Projekt auf einem anderen Server in einem anderen Rechner auszuführen. Zu dieser Zeit müssen Sie auch Ihre Gläser zu diesem Gerät bewegen. wenn du deine lib in dein Projektverzeichnis legst. Wenn du dich dann in einem anderen Gerät änderst, bewegen sich deine Gläser auch zu einem anderen Gerät. Dann können Sie mit Eclipse konfigurieren, oder Sie können Klassenpfad festlegen, dann wird es einfach funktionieren. Wenn Sie Ziel-Laufzeit einstellen, wird es für das Gerät funktioniert gut, aber wenn Sie zu einem anderen Gerät wechseln, kann es Problem werden – SRIHARI

+0

Problem bedeutet, dass Sie komplette Eclipse-Projekt verschieben müssen. Angenommen, Ihr Zielgerät darf kein Ecipse enthalten. Ich habe eine Ahnung, wenn meine Annahme falsch ist, warum das Web-Projekt-Struktur-Design für Lib-Ordner in WEB-INF ??? (Um eine Lösung zu finden, gibt es viele Möglichkeiten, wir können unseren eigenen Weg benutzen. Aber denken Sie niemals, dass etwas gut ist und etwas falsch ist. Alles hat seine eigenen guten und schlechten Probleme) – SRIHARI

Verwandte Themen