java - 在 Tomcat5 上使用 fileupload 时出现异常

标签 java tomcat servlets apache-commons-fileupload genexus

我正在尝试开发和上传 servlet,为此我正在使用 Apache 的文件上传库。我正在运行我的 servlet:服务器版本:Apache Tomcat/5.5.36 Servlet 版本:2.4 JSP 版本:2.0

我遇到了下一个异常,但我不知道还能做什么:

java.lang.NoSuchMethodError: org.apache.commons.fileupload.FileUploadBase.isMultipartContent(Lorg/apache/commons/fileupload/RequestContext;)Z
org.apache.commons.fileupload.servlet.ServletFileUpload.isMultipartContent(ServletFileUpload.java:71)
photoUploader.processRequest(photoUploader.java:48)
photoUploader.doPost(photoUploader.java:87)
javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)

似乎是导入的问题,但我不确定。

这是我用于执行此操作的代码:

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
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.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class photoUploader extends HttpServlet {

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");

        final String RUTA_LOCAL_APP = getServletContext().getRealPath("/");
        out.println("<!DOCTYPE html>");
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet photoUploader</title>");            
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet photoUploader at " + request.getContextPath() + "</h1>");
            out.println("<h5>Versiones del Servlet: M->" + getServletContext().getMajorVersion() + 
                        "| m->" + getServletContext().getMinorVersion() + "</h5>");
            out.println("<h5>Adjunta MultipartContent?: " + ServletFileUpload.isMultipartContent(request) + "</h5>");
            }
        catch(Exception e)
        {
            out.println("<h3>Excepción: </h3>" + e.getMessage());
        }
        finally{
            out.println("</body>");
            out.println("</html>");
        }
    }

当我检查 if isMultipartContent out.println("<h5>Adjunta MultipartContent?: " + ServletFileUpload.isMultipartContent(request) + "</h5>");是我收到错误的时候。

我确定我在正确的位置得到了 *.jar:

Webapp Content:
├───CSS
│       Stuff
│
├───JS
│   │   jquery-1.11.2.js
│   │
│   └───jquery-ui
│       │   Stuff
│       │
│       ├───external
│       │   └───Stuff
│       │
│       └───images
│               Stuff
│
├───META-INF
│       MANIFEST.MF
│
├───static
│   │   Stuff
│   │
│   └───imagenes
│           Stuff
│
└───WEB-INF
    │   web.xml
    │
    ├───classes
    │       photoUploader.class
    │       
    │
    └───lib
            commons-fileupload-1.3.1.jar
            commons-io-2.4.jar
            GXClassR.jar
            iText.jar
            mysql-connector-java-3.1.13-bin.jar
            poi.jar

我想知道是否:

  • 有任何方法可以检查导入的库是否在运行时的正确位置。

  • 我的服务器版本有问题吗(Apache Tomcat/5.5.36 Servlet 版本:2.4 JSP 版本:2.0)一些我没有读过的已知问题。

  • 我的想法是只使用 *.class(在 WEB-INF/classes 中有 servlet 定义)与我拥有的其他 servlet 一起工作。我告诉你这个是因为如果我使用 Tomcat Manager 部署 war,它可以毫无问题地工作,但在我自己的应用程序中它会失败。可能是它没有按应有的方式导入库。

欢迎任何帮助/想法,我已经尝试了 StackOverflow 上提出的所有解决方案,但没有人适合我,所以我再次提问。

谢谢

最佳答案

我终于明白了。我使用 Genexus,在 GXClassR.jar(Genexus 使用的库)中有另一个相同 *.class 的实例(显然较旧且已过时)。我删除了它,只留下了新的,它起作用了。

关于java - 在 Tomcat5 上使用 fileupload 时出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33310051/

相关文章:

java - Hibernate 中稍微复杂的 ManyToMany 关系

java - 在自定义数据源操作中使用条件

java - 在通过 Tomcat 启动 Jenkins 时遇到一个问题 (http ://localhost:8080/jenkins/)

java - 是否有可能(以及我如何)找出哪个类在 Java 中创建了一个命名线程?

java - 如何在 Wiremock Servlet 上启用响应模板?

java - JSP 与 Servlet 生成下拉列表

javascript window.location 和 IE session 变量丢失

java - 将 C++ long 类型转换为 JNI jlong

java - 如何使用 Java 直接从 Internet 读取文本文件?

java - 垃圾收集器在没有用户代码运行的情况下在 Tomcat Web 应用程序中频繁运行