Java.lang.ClassNotFoundException de servlet tomcat avec eclipse [dupliquer]
cette question a déjà une réponse ici:
- Servlet renvoie "d'État HTTP 404 La ressource demandée (/servlet) n'est pas disponible" 3 réponses
je commence à développer une application Web java dans eclipse en utilisant des servlets et je la teste avec tomcat server sur mon localhost. J'ai déployé l'application dans tomcat, mais quand j'essaie de charger l'url cible dans mon navigateur, j'obtiens la trace de pile suivante:
Jul 31, 2013 2:58:31 PM org.apache.catalina.core.ApplicationContext log
INFO: Marking servlet ImageServlet as unavailable
Jul 31, 2013 2:58:31 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Allocate exception for servlet ImageServlet
java.lang.ClassNotFoundException: test.ImageServlet
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:527)
at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:509)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:137)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1144)
at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:865)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:136)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1852)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
la classe ImageServlet est très clairement située dans le dossier myproject/src/test de mon espace de travail eclipse, où myproject est le nom du projet eclipse, et test est le paquet.
web.le xml est situé dans myproject/web/WEB-INF/web.xml et myproject.xml est situé à myproject / myproject.xml
le contenu du web.xml sont:
<?xml version="1.0"?>
<web-app
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<servlet>
<servlet-name>ImageServlet</servlet-name>
<servlet-class>test.ImageServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ImageServlet</servlet-name>
<url-pattern>/image</url-pattern>
</servlet-mapping>
</web-app>
et le contenu de myproject.xml sont:
est-ce que quelqu'un peut me montrer comment réparer mon code pour qu'il ne jette pas la ClassNotFoundException?
7 réponses
parfois, lors de la création de filtres ou de servlets, le fichier de classe n'est pas généré dans le dossier build dans eclipse.Nettoyez l'application et construisez-la Une fois, a.fichier de classe est générée dans ce qui précède dit chemin. Cela supprime l'erreur de classe not found dans certains cas.
c'est un projet maven? dans maven projects src / test est l'emplacement pour les tests unitaires et est exclu de la construction et de la guerre, essayer de changer le nom du paquet et essayer à nouveau.
on dirait que vous construisez un projet basé sur le Maven, et vous mettez votre classe au mauvais endroit
Vous devez utiliser src/main/java
pour mettre vos classes, et src/test/java
pour mettre vos tests (c'est à dire, JUnit tests, si vous en avez).
a récemment rencontré ce problème avec l'un de mes projets(je dis cela parce que l'autre fonctionnait parfaitement bien malgré l'utilisation des mêmes pots et tout). J'ai essayé de nettoyer le projet plusieurs fois, j'ai effacé le .dossier de métadonnées plusieurs fois. Rien n'a fonctionné. Les classes n'ont tout simplement pas été compilées.
ce qui a fonctionné était de supprimer une bibliothèque jre6 non liée dans le chemin de construction du projet.
- cliquez-Droit sur le projet et sélectionnez "Propriétés"
- Aller à ", le Déploiement de l'Assemblée"
- assurez-vous d'avoir deux correspondances comme indiqué sur l'image suivante. déploiement Web de l'assemblée dans eclipse . Si ce n'est pas le cas, ajoutez les correspondances manquantes.
- cliquez sur Appliquer.
- Nettoyer,construire et exécuter votre projet.
S'il n'y a pas de classe test.ImageServlet
dans votre déploiement WEB-INF/classes, Tomcat ne pourra pas la trouver.
à mon avis, vous n'avez pas compilé, empaqueté et déployé le fichier WAR correctement sur Tomcat.
Si votre projet est un projet Maven, vous pouvez essayer de le nettoyer. Cliquez sur Projet > Nettoyer et sélectionnez le projet à nettoyer.
parfois, si vous utilisez Maven avec l'une ou l'autre console et Eclipse, la cible devient "folle" et la seule façon de continuer est de nettoyer le projet.