2

Apache 在尝试上传文件时返回此错误(我只保留了堆栈跟踪的第一行和根本原因):

HTTP Status 500 - 
type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: Exception in JSP: /upload.jsp:40

    37:      
    38:        try {
    39: 
    40:            items = upload.parseRequest(request);
    41:        } catch (FileUploadException e) {
    42:            out.println(e);
    43:        }

Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:451)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

root cause

javax.servlet.ServletException: org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(Lorg/apache/commons/fileupload/RequestContext;)Ljava/util/List;

root cause

java.lang.NoSuchMethodError: org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(Lorg/apache/commons/fileupload/RequestContext;)Ljava/util/List;
    org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126)

这是我的代码:

if(ServletFileUpload.isMultipartContent(request)){
 FileItemFactory factory = new DiskFileItemFactory();
   ServletFileUpload upload = new ServletFileUpload(factory);
   List items = null;


   try {

       items = upload.parseRequest(request);
   } catch (FileUploadException e) {
       out.println(e);
   }
}

我不明白,它看起来找不到 parseRequest() 方法,但是 ServletFileUpload 实例工作正常,所以看起来包在那里但是......

任何的想法?所有建议帮助表示赞赏!:)

4

2 回答 2

6

这确实是类路径污染的标志。您有不同版本的 commons fileupload JAR 文件分布在类路径上。您需要通过删除或替换旧版本的类路径来清理类路径。对于 JSP/Servlet Web 应用程序,类路径覆盖的默认路径通常是Webapp/WEB-INF/libWebapp/WEB-INF/classes和.Appserver/libJRE/lib

也就是说,stacktrace 还表明您使用老式的scriptlet在 JSP 文件中编写了原始 Java 代码。我强烈建议不要这样做,而只是使用真正的 Java 类(在本例中为 Servlet)来处理文件上传。

于 2010-01-28T11:32:37.547 回答
0

noSuchMethod 错误可能是由您编译的 jar 版本与运行时类路径中的 jar 版本不匹配引起的。这是需要仔细检查的事情。

于 2010-01-28T09:50:19.990 回答