java.lang.ClassNotFoundException:org.apache.commons.fileupload.FileItemFactory

java.lang.ClassNotFoundException:org.apache.commons.fileupload.FileItemFactory,java,eclipse,tomcat,servlets,file-upload,Java,Eclipse,Tomcat,Servlets,File Upload,我遵循了使用servlet上传文件的原则 下面是文件夹结构(使用Eclipse创建的动态项目)。我没有在这个简单的项目中使用maven。我将外部jar添加到构建路径中 当我启动Tomcat并通过右键单击Eclipse>RunonServer中的项目来部署该应用程序时,我得到 Caused by: java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileItemFactory at java.lang.Class

我遵循了使用servlet上传文件的原则

下面是文件夹结构(使用Eclipse创建的动态项目)。我没有在这个简单的项目中使用maven。我将外部jar添加到构建路径中

当我启动Tomcat并通过右键单击Eclipse>RunonServer中的项目来部署该应用程序时,我得到

Caused by: java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileItemFactory
    at java.lang.Class.getDeclaredFields0(Native Method)
    at java.lang.Class.privateGetDeclaredFields(Class.java:2499)
    at java.lang.Class.getDeclaredFields(Class.java:1811)
    at org.apache.catalina.util.Introspection.getDeclaredFields(Introspection.java:106)
    at org.apache.catalina.startup.WebAnnotationSet.loadFieldsAnnotation(WebAnnotationSet.java:270)
    at org.apache.catalina.startup.WebAnnotationSet.loadApplicationServletAnnotations(WebAnnotationSet.java:139)
    at org.apache.catalina.startup.WebAnnotationSet.loadApplicationAnnotations(WebAnnotationSet.java:65)
    at org.apache.catalina.startup.ContextConfig.applicationAnnotationsConfig(ContextConfig.java:415)
    at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:892)
    at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:386)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5380)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    ... 6 more
Caused by: java.lang.ClassNotFoundException: org.apache.commons.fileupload.FileItemFactory
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
    ... 20 more

请帮助我解决这里出现的问题以及如何解决此问题?

您还需要将所需的commons JAR复制到您的
/WEB-INF/lib
文件夹中

commons-io-2.4.jar
commons-fileupload-1.3.1.jar

原因是仅仅将jar依赖项添加到Eclipse项目的构建路径并不能使它们在Tomcat上自动可用。由于缺少依赖项(在
lib
文件夹中找不到),您的web应用部署失败。

您是否制作了动态web项目版本3.0?您可以通过以下方式检查此信息:
右键单击project>project Facets
。我看不到任何Facets选项。但我认为它是web.xml的3.0版本,这很有帮助。但是th类文件(在本例中为UploadServlet.class)存储在哪里。我查看了webapps文件夹,但没有看到UploadFileServlet的任何上下文(如上所示的项目名称)可能是您无法直接从Eclipse中看到类文件,但它存储在文件夹TARGET/class/中。您可以通过浏览这些文件夹(WORKSPACE/PROJECT/TARGET/class)来查看类文件@anptk:我想知道tomcat在哪里保存它所服务的上下文文件夹。通常,
.war
文件放在tomcat的webapps文件夹中。我确实知道Eclipse将类文件放在哪里。这可能会对您有所帮助,@anptk:我可以通过右键单击Eclipse来运行servlet。但当我进入webapps文件夹时,我看不到我的项目目录(uploadFileServlet),它将作为上下文根。