2011-01-08 5 views
0

Tout fonctionnait très bien mais maintenant je ne peux plus exécuter mon application. Pour une raison javax. * On ne trouve pas encore dans Eclipse les importations sont très bien ...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

Vous lancez à partir d'Eclipse? Si c'est le cas, vérifiez l'onglet Classpath de la configuration d'exécution. –

Répondre

0

Ajouter le servlet-api.jar au projet classpath. Les contenants de servlets ont ce pot livré, donc pas besoin de l'ajouter à lib.

1

Vous avez normalement servlet-api.jar dans la bibliothèque Apache Tomcat "Server Runtime". Lorsque vous définissez Server Runtime dans Elcipse, cette bibliothèque est définie et inclut un lien vers servet-api.jar dans Tomcat. Lorsque vous créez un projet Web dynamique, vous devez définir cette bibliothèque dans Java Build Path. Vérifiez si votre projet a ce chemin de génération.

-2

Il suffit de copier le fichier servlet-api jar et de le coller dans le répertoire lib de votre webapps. puis sélectionnez votre projet en éclipse -> souris clic droit -> propriétés -> chemin de construction java -> sélectionnez l'onglet "commander et exporter" -> sélectionnez Tout -> terminer.

maintenant juste runt votre application en utilisant eclipse. J'espère que cela fonctionnera bien. encore un problème est là, alors dites-moi, je vais vous dire une autre solution

+2

Cela fonctionne, mais c'est complètement faux. Votre webapp se cassera chaque fois que vous le déploierez sur des servletcontainers d'autre marque/version que celle où les bibliothèques que vous avez lâchées dans le dossier webapps lib sont apparues. Vous devriez plutôt définir le * Target Runtime * dans les propriétés du projet, puis Eclipse s'en occupera automagiquement. Et il ne le fait PAS en copiant des bibliothèques spécifiques à servletcontainer dans webapps lib. – BalusC

+0

ya quoi que vous disiez que c'est juste. mais supposons que vous essayiez d'exécuter votre projet sur un autre serveur dans un autre mechine. à ce moment-là aussi vous devez déplacer vos pots à cette mechine. si vous mettez votre lib dans votre répertoire de projet. puis, quand vous changez d'une autre Méchine, vos bocaux se déplacent aussi vers une autre Méchine. alors vous pouvez configurer en utilisant eclipse, ou vous pouvez définir le chemin de classe, alors cela fonctionnera facilement. Si vous définissez le runtime cible, cela fonctionnera pour que mechine soit bon, mais si vous changez pour un autre mechine cela peut devenir un problème. – SRIHARI

+0

problème signifie que vous devez déplacer le projet eclipse complète. Supposons que votre cible Mechine ne contienne pas d'ecipse. J'ai une idée si ma supposition est fausse, alors pourquoi la conception de la structure du projet web pour le dossier lib dans WEB-INF ??? (pour faire une solution, il y a plusieurs façons, nous pouvons utiliser notre propre façon, mais ne jamais penser que quelque chose est goood, et que quelque chose ne va pas, tout a ses propres bons et mauvais problèmes) – SRIHARI

Questions connexes