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

java.lang.NoClassDefFoundError:org/apache/commons/io/output/DeferredFileOutputStream,java,servlets,file-upload,apache-commons,Java,Servlets,File Upload,Apache Commons,在尝试将文件上载到本地主机上运行的服务器时,我收到一个java.lang.NoClassDefFoundError:org/apache/commons/io/output/DeferredFileOutputStream。这是我正在使用的servlet: @WebServlet("/UploadServlet") public class UploadServlet extends HttpServlet { private static final long serialVersionUID

在尝试将文件上载到本地主机上运行的服务器时,我收到一个
java.lang.NoClassDefFoundError:org/apache/commons/io/output/DeferredFileOutputStream
。这是我正在使用的servlet:

@WebServlet("/UploadServlet")
public class UploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

private String UPLOAD_DIRECTORY = "~/EclipseProjects/DocSearch/uploads";

/**
 * @see HttpServlet#HttpServlet()
 */
public UploadServlet() {
    super();
}

/**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
 */
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 {
    if(ServletFileUpload.isMultipartContent(request)) {
        try {
            List<FileItem> multiparts = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
            for(FileItem item: multiparts) {
                if(!item.isFormField()) {
                    String name = new File(item.getName()).getName();
                    item.write(new File(UPLOAD_DIRECTORY + File.separator + name));
                }
            }
            request.setAttribute("message", "File uploaded successfully");
        } catch (Exception ex) {
            request.setAttribute("message", "File upload failed due to: " + ex);
        }
    } else {
        request.setAttribute("message", "Sorry this servlet only handles file upload requests");
    }
    request.getRequestDispatcher("/result.jsp").forward(request, response);
}

}
@WebServlet(“/UploadServlet”)
公共类UploadServlet扩展了HttpServlet{
私有静态最终长serialVersionUID=1L;
私有字符串UPLOAD_DIRECTORY=“~/EclipseProjects/DocSearch/uploads”;
/**
*@参见HttpServlet#HttpServlet()
*/
公共上传servlet(){
超级();
}
/**
*@参见HttpServlet#doGet(HttpServletRequest请求,HttpServletResponse响应)
*/
受保护的void doGet(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException{
}
/**
*@请参阅HttpServlet#doPost(HttpServletRequest请求,HttpServletResponse响应)
*/
受保护的void doPost(HttpServletRequest请求、HttpServletResponse响应)引发ServletException、IOException{
if(ServletFileUpload.isMultipartContent(请求)){
试一试{
List multiparts=new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
用于(文件项:多部分){
如果(!item.isFormField()){
字符串名称=新文件(item.getName()).getName();
item.write(新文件(UPLOAD_DIRECTORY+File.separator+name));
}
}
request.setAttribute(“消息”,“文件上传成功”);
}捕获(例外情况除外){
request.setAttribute(“消息”,“文件上载失败,原因是:”+ex);
}
}否则{
setAttribute(“message”,“对不起,这个servlet只处理文件上传请求”);
}
request.getRequestDispatcher(“/result.jsp”).forward(请求,响应);
}
}
我已经将commons-fileupload-1.2.2.jar添加到WEB-INF/lib文件夹中。我曾尝试创建一个新服务器并在其上运行该项目,尝试从不同的源重新下载jar文件,但它们似乎都不能解决我的问题

注:

我已经经历过:


必须将
commons fileupload.jar
包含到项目依赖项库文件夹中

从官方网站或maven网站获取
commons fileupload.jar

如果使用maven,请将此依赖项添加到
pom.xml

 <dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.1</version>
</dependency>

文件上传
文件上传
1.3.1

不幸的是,我没有在这个特定的项目中使用maven build,但我已尝试在项目属性的java构建路径中添加jar。@shyam从appache网站下载jar,并将其添加到您的项目构建pth中。是的。这就成功了。如果你删掉你给出的链接,我会接受你的回答。(这是commons文件上传,而不是commons io)。仍然很好奇为什么以前的罐子不起作用。实际上我是从maven central下载的。