【问题标题】:How can I handle multipart/form-data POST requests in my java servlet?如何在我的 java servlet 中处理 multipart/form-data POST 请求?
【发布时间】:2010-08-18 09:46:02
【问题描述】:

我很难用我的 java 应用程序服务器处理 multipart/form-data 请求。据我了解,servlet 3.0 规范提供了 HttpServletRequest.getParts() 等方法,非常适合处理上传到我的 servlet 的表单数据。

但是,这个方法是 3.0 servlet 规范的一部分,我的应用服务器(Tomcat 6)还不支持这个。即使使用有效的 3.0 web.xml 文件和 java EE 6 库,我在尝试调用 getParts() 时也会遇到以下异常:

java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest.getParts()Ljava/util/Collection;

切换应用服务器对于这个项目来说并不是一个真正可行的选择。是否有任何第三方库可用于处理 java servlet 中的 multipart/form-data?

【问题讨论】:

  • 您不能只针对 Java EE 6 库进行编译并期望它与 Tomcat 6 一起使用 - Java EE 6 库仅提供接口,您需要一个实际实现这些接口的应用服务器。

标签: java servlets multipartform-data


【解决方案1】:

查看Apache Commons Fileupload。它为您提供了一个程序化 API 来解析多部分请求,并单独遍历它的各个部分。

我过去曾将它用于简单的多部分处理,它可以很好地完成工作而不会过于复杂。

【讨论】:

  • 是的!这正是我所需要的。
【解决方案2】:

Tomcat 6 does not and will not support Servlet Specification 3.0。您应该尝试在 Tomcat 7 上执行此操作,但我不确定此功能是否存在于当前可用的 beta 版本中。不过,预计该功能将出现在生产版本中。

您可以继续使用其他答案中发布的 Apache Commons FileUpload,或者您可以使用 Glassfish(取决于项目的当前阶段和类型)。

【讨论】:

    【解决方案3】:

    当我们使用 post 方法时,数据被加密,所以我们必须使用 servletfileupload 来获取请求的数据,并且使用 FileItemIterator 我们可以获取所有表单数据。

    我已经在这个链接上回答了How to process a form sent Google Web Toolkit in a servlet

    【讨论】:

      猜你喜欢
      • 2010-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-13
      • 1970-01-01
      • 2013-10-21
      • 1970-01-01
      相关资源
      最近更新 更多