Apache commons -> Загрузка файла -> parseRequest () ошибка - PullRequest
2 голосов
/ 28 января 2010

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 работает нормально, так что кажется, что пакет есть, но ...

Есть идеи? Все предложения помогают оценены! :)

Ответы [ 2 ]

6 голосов
/ 28 января 2010

Это действительно признак загрязнения пути класса.У вас есть разные версии загружаемого JAR-файла, распространяющегося по пути к классам.Вам необходимо очистить путь к классам, удалив или заменив старые версии.В случае веб-приложения JSP / Servlet пути по умолчанию, которые охватываются classpath, обычно представляют собой Webapp/WEB-INF/lib, Webapp/WEB-INF/classes, Appserver/lib и JRE/lib.

При этом трассировка стекаозначает, что вы написали необработанный код Java внутри файлов JSP с использованием старомодных скриптлетов .Я настоятельно рекомендую не делать этого, а просто использовать настоящий класс Java (в данном случае сервлет) для обработки загрузки файла.

0 голосов
/ 28 января 2010

Ошибка noSuchMethod может быть вызвана несоответствием между версией jar-файла, с которым вы скомпилировали файл, и jar-адресом в пути к классам выполнения. Это то, что нужно перепроверить.

...