【问题标题】:How to solve this java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStream?如何解决这个 java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStream?
【发布时间】:2012-06-24 15:18:13
【问题描述】:

我正在使用下面的代码将文件上传到 tomcat5.5,它给了我以下异常

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

你能帮我找出来吗?

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

}

这是我使用的罐子commons-fileupload-1.2.2.jar

【问题讨论】:

    标签: servlets upload tomcat5.5


    【解决方案1】:

    特定的异常消息告诉您在类路径中缺少提到的类。正如org.apache.commons.io 包名所暗示的,所提到的类是http://commons.apache.org/io 项目的一部分。

    事实上,Commons FileUpload 的 Commons IO 为dependency。您还需要download 并将commons-io.jar 放入/WEB-INF/lib

    另见:

    【讨论】:

      【解决方案2】:

      使用maven依赖

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

      或下载 commons-io.1.3.2.jar 到你的 lib 文件夹

      【讨论】:

      • commons-io 1.3.2 版本中实际上并没有包含它。尝试 2.4 或更高版本。在 maven repo 中,它不再位于 'org.apache' 下,而是直接位于 'commons-io:commons-io' 下
      【解决方案3】:

      解决方案

      默认情况下,Struts 使用 Apache “commons-io.jar” 进行文件上传。要修复它,您必须将此库包含到您的项目依赖库文件夹中。

      1. 直接获取

      从官网获取“commons-io.jar”——http://commons.apache.org/io/

      1. 从 Maven 获取

      首选方法是从 Maven 存储库中获取“commons-io.jar”

      文件:pom.xml

        <dependency>
          <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
          <version>1.4</version>
        </dependency>
      

      【讨论】:

        【解决方案4】:

        只需将所有 apache comons jar 和文件上传 jar 放在 tomcat 的 lib 文件夹中

        【讨论】:

          【解决方案5】:

          如果您在 WebSphere 容器中收到此错误,请确保正确设置您的 Apps 类加载策略。对于 WAR 策略,我不得不将我的默认值更改为“最后一个父级”和“应用程序的单个类加载器”。这是因为在我的情况下,commons-io*.jar 是在应用程序中打包的,所以必须先加载它。

          【讨论】:

          • 即使它没有回答问题,它也回答了我的问题,谷歌把我带到了这里。所以谢谢:)
          【解决方案6】:

          您必须从这里下载文件https://commons.apache.org/proper/commons-io/download_io.cgi 并选择https://prnt.sc/tk5ewt

          现在,接下来将下载的文件添加到您的项目中:

          右击你的项目->构建路径->配置BuidPath->https://prnt.sc/tk5d93

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-07-07
            • 2021-05-20
            • 2017-01-19
            • 1970-01-01
            • 1970-01-01
            • 2011-12-02
            相关资源
            最近更新 更多