java.lang.NoClassDefFoundError: javax / servlet / http / HttpServletRequest
Je suis l'élaboration d'une servlet qui reçoit une demande multiparties avec le contenu de plusieurs fichiers, et je suis en utilisant apache commons téléchargement de fichiers des bibliothèques.
Quand je l'appelle parseRequest(request);
méthode servlet throws exception suivante:
GRAVE: Servlet.service() for servlet DiffOntology threw exception
java.lang.NoClassDefFoundError: javax/servlet/http/HttpServletRequest
at org.apache.commons.fileupload.servlet.ServletRequestContext.getContentType(ServletRequestContext.java:73)
at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:882)
at org.apache.commons.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:331)
at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:349)
at org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126)
at DiffOntology.doPost(DiffOntology.java:38)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:738)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:619)
J'ai mis toutes les bibliothèques dans WEB-INF/lib.
EDIT:
servlet-api.jar est dans le bon répertoire (tomcat/lib) et toutes les autres bibliothèques sont dans WEB-INF/lib
Je pense que peut-être que le problème pourrait être le suivant:
Je suis le développement de ce projet web dans Eclipse, et j'ai importé les uploads de fichier bibliothèques dans le classpath.
Comment ça ne marche pas?
Je suis désespérée!!
source d'informationauteur pAkY88
Vous devez vous connecter pour publier un commentaire.
Cela peut se produire lorsque vous avez placé serveur spécifique des bibliothèques dans la webapp est
/WEB-INF/lib
ou probablementJRE/lib
. La grande chance que vous avez copié de Tomcat/lib/servlet-api.jar
là. Vous ne devriez pas le faire. Cela ne conduirait qu'à des collisions dans le chemin qui mène à ce genre d'erreurs, et il fera de votre webapp portables (c'est à dire qu'elle est liée à exécuter sur Tomcat seulement, vous ne pouvez pas l'exécuter sur un autre serveurs comme Glassfish, JBoss as, Websphere, etc). Vous devez garder le serveur des bibliothèques spécifiques à leur emplacement par défaut. Nettoyage de la/WEB-INF/lib
à partir de n'importe quel serveur spécifique des bibliothèques et de nettoyageJRE/lib
à partir de la 3e partie des bibliothèques.Vous avez probablement copié spécifiques au serveur bibliothèques là parce que vous n'était pas en mesure de compiler vos servlets. Copier les bibliothèques dans
/WEB-INF/lib
est la mauvaise solution. Vous devez simplement spécifier ces bibliothèques dans le compile-time classpath. Depuis que vous utilisez Eclipse, ce qui peut être fait facilement: d'abord ajouter Tomcat dans Serveurs vue, alors associer votre webapp projet grâce à l'intégration de Tomcat instance. De cette façon, Eclipse va ajouter automatiquement le serveur des bibliothèques spécifiques du projet buildpath. Sur un nouveau projet web, vous pouvez choisir le serveur lors de l'assistant de création de projet. Sur l'existant, les projets web, vous pouvez le modifier dans Ciblées Runtimes section dans les propriétés du projet.Voir aussi:
Vous devez avoir incorrectement copiés commons-fileupload.jar pour
JRE/lib/ext
JRE/lib/endorsed
ou autrement mis sur un chemin de classe qui n'ont pas de visibilité à la servlet Api. Démarrage de la JVM avec-verbose:class
ce qui permet d'imprimer qui classpath chargé de laServletFileUpload
classe. Si la classe est chargée depuis un autre endroit queWEB-INF/lib
vous aurez besoin de l'enlever.De supprimer tout servlet-api.jar ou le télécharger à aider pot communes de JRE/lib ou JRE/lib/ext. Cela m'a aidé à résoudre le problème.
Vieux thread, mais qui peut toujours aider quelqu'un.
J'ai vu que j'avais un javax-servlet pot dans la dépendance inclus avec un test de portée. Je l'ai fait à la portée. Vérifiez le graphe de dépendance si vous utilisez Eclipse +Maven.