web-dev-qa-db-fra.com

Comment résoudre ce Java.lang.NoClassDefFoundError: org / Apache / commons / io / output / DeferredFileOutputStream?

J'utilise le code ci-dessous pour télécharger un fichier dans Tomcat5.5 et cela me donne l'exception suivante

Java.lang.NoClassDefFoundError: org/Apache/commons/io/output/DeferredFileOutputStream

pourriez-vous m'aider à le découvrir?

import Java.io.File;
import Java.io.IOException;
import Java.util.Iterator;
import Java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.Apache.commons.fileupload.FileItem;
import org.Apache.commons.fileupload.FileItemFactory;
import org.Apache.commons.fileupload.FileUploadException;
import org.Apache.commons.fileupload.disk.DiskFileItemFactory;
import org.Apache.commons.fileupload.servlet.ServletFileUpload;

/**
 * Servlet implementation class FileUploadServlet
 */
public class FileUploadServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public FileUploadServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    @SuppressWarnings("rawtypes")
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        boolean isMultipart = ServletFileUpload.isMultipartContent(request);
        System.out.println("Status : "+isMultipart);
        if (isMultipart) {
            FileItemFactory factory = new DiskFileItemFactory();
            ServletFileUpload upload = new ServletFileUpload(factory);

            try {
                List items = upload.parseRequest(request);
                Iterator iterator = items.iterator();
                while (iterator.hasNext()) {
                    FileItem item = (FileItem) iterator.next();

                    if (!item.isFormField()) {
                        String fileName = item.getName();

                        String root = getServletContext().getRealPath("/");
                        File path = new File(root + "/uploads");
                        if (!path.exists()) {
                            boolean status = path.mkdirs();
                        }

                        File uploadedFile = new File(path + "/" + fileName);
                        System.out.println(uploadedFile.getAbsolutePath());
                        item.write(uploadedFile);
                    }
                }
            } catch (FileUploadException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        response.sendRedirect("upload.jsp");
    }

}

c'est le pot que j'utilise commons-fileupload-1.2.2.jar

27
SAR

Le message d'exception particulier vous indique que la classe mentionnée est manquante dans le chemin de classe. Comme le org.Apache.commons.io conseils de nom de package, la classe mentionnée fait partie de la http://commons.Apache.org/io projet.

Et en effet, Commons FileUpload a Commons IO comme dépendance . Vous devez télécharger et déposer commons-io.jar dans le /WEB-INF/lib ainsi que.

Voir également:

38
BalusC

utiliser la dépendance maven

<dependency> 
  <groupId>org.Apache.commons</groupId>
  <artifactId>commons-io</artifactId> 
  <version>1.3.2</version> 
</dependency> 

ou téléchargez commons-io.1.3.2.jar dans votre dossier lib

15
Harish.bazee

Solution

Par défaut, Struts utilise Apache "commons-io.jar" pour son processus de téléchargement de fichiers. Pour y remédier, vous devez inclure cette bibliothèque dans votre dossier de bibliothèque de dépendances de projet.

  1. Obtenez directement

Obtenez "commons-io.jar" sur le site officiel - http://commons.Apache.org/io/

  1. Obtenez de Maven

La meilleure façon est d'obtenir le "commons-io.jar" du référentiel Maven

Fichier: pom.xml

  <dependency>
    <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
    <version>1.4</version>
  </dependency>
6
Zeeshan Akhter

il suffit de mettre tout le pot Apache commons et le pot de téléchargement de fichiers dans le dossier lib de Tomcat

2
abobjects.com

Si vous recevez cette erreur dans un conteneur WebSphere, assurez-vous de définir correctement votre stratégie de chargement de classe Apps. J'ai dû changer le mien par défaut en "parent dernier" et également "chargeur de classe unique pour application" pour la politique WAR. En effet, dans mon cas, le commons-io * .jar était fourni avec l'application, il a donc dû être chargé en premier.

1
Suresh Addepalli