Como resolver este java.lang.NoClassDefFoundError: org / apache / commons / io / saída / DeferredFileOutputStream?

Eu estou usando o código abaixo para carregar um arquivo no tomcat5.5 e ele me dá a seguinte exceção

java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStream

você poderia por favor me ajudar a descobrir isso?

 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"); } } 

este é o jar eu uso commons-fileupload-1.2.2.jar

A mensagem de exceção específica informa que a class mencionada está ausente no caminho de class. Como o nome do pacote org.apache.commons.io sugere, a class mencionada faz parte do projeto http://commons.apache.org/io .

E, de fato, o Commons FileUpload tem o Commons IO como uma dependência . Você precisa fazer o download e descartar o commons-io.jar no /WEB-INF/lib também.

Veja também:

  • Como fazer upload de arquivos para o servidor usando JSP / Servlet?
  • Como adicionar bibliotecas JAR ao projeto WAR sem enfrentar java.lang.ClassNotFoundException? Classpath vs caminho de compilation vs / WEB-INF / lib
  • Como importo a API javax.servlet no meu projeto Eclipse?

usar dependência maven

  org.apache.commons commons-io 1.3.2  

ou faça o download commons-io.1.3.2.jar para sua pasta lib

Solução

Por padrão, o Struts está usando o Apache “commons-io.jar” para o processo de upload de arquivos. Para corrigi-lo, você deve include essa biblioteca na pasta da biblioteca de dependencies do projeto.

  1. Obter Diretamente

Obter “commons-io.jar” do site oficial – http://commons.apache.org/io/

  1. Obtenha do Maven

A maneira preferida é obter o “commons-io.jar” do repository Maven

Arquivo: pom.xml

   commons-io commons-io 1.4  

basta colocar todos jar apache comons e jar upload de arquivos na pasta lib do tomcat

Se você estiver recebendo este erro em um contêiner do WebSphere, certifique-se de configurar a política de carregamento da class Aplicativos corretamente. Eu tive que mudar o meu do padrão para ‘pai passado’ e também ‘carregador de class única para o aplicativo’ para a política de WAR. Isso porque, no meu caso, o commons-io * .jar foi empacotado no aplicativo, portanto, ele precisou ser carregado primeiro.

Faça o download do PrimeFaces 4.0 . Isso resolveu meu problema imediatamente. Estou usando o Glassfish 4.0