java - 在 Servlet 中解析传入的多部分/表单数据参数的便捷方法

标签 java servlets urlconnection

有什么方便的方法可以从传入的请求中读取和解析数据。

例如客户端发起 post 请求

URLConnection connection = new URL(url).openConnection();
connection.setDoOutput(true);
connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
PrintWriter writer = null;
try {
    OutputStream output = connection.getOutputStream();
    writer = new PrintWriter(new OutputStreamWriter(output, charset), true); // true = autoFlush, important!
    // Send normal param.
    writer.println("--" + boundary);
    writer.println("Content-Disposition: form-data; name=\"param\"");
    writer.println("Content-Type: text/plain; charset=" + charset);
    writer.println();
    writer.println(param);

我无法使用 request.getParameter("paramName") 获取参数。以下代码

BufferedReader reader = new BufferedReader(new InputStreamReader(
    request.getInputStream()));
  StringBuilder sb = new StringBuilder();
  for (String line; (line = reader.readLine()) != null;) {
   System.out.println(line);

  }

但是为我显示内容

-----------------------------29772313742745
Content-Disposition: form-data; name="name"
J.Doe
-----------------------------29772313742745
Content-Disposition: form-data; name="email"
abuse@spamcop.com
-----------------------------29772313742745

解析传入请求的最佳方法是什么?我不想写自己的解析器,可能有现成的解决方案。

最佳答案

multipart/form-data 编码请求在 3.0 版之前的 Servlet API 默认情况下确实不支持。 Servlet API 默认使用 application/x-www-form-urlencoded 编码解析参数。当使用不同的编码时,request.getParameter() 调用都将返回 null。如果您已经在使用 Servlet 3.0( Glassfish 3Tomcat 7 等),那么您可以使用 HttpServletRequest#getParts()反而。另见 this blog扩展示例。

在 Servlet 3.0 之前,de facto解析 multipart/form-data 请求的标准将使用 Apache Commons FileUpload .只需仔细阅读其用户指南常见问题部分,了解如何使用它。我在 here 之前发布了一个带有代码示例的答案(它还包含一个针对 Servlet 3.0 的示例)。

关于java - 在 Servlet 中解析传入的多部分/表单数据参数的便捷方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3337056/

相关文章:

android - 带参数的 URLConnection

java.lang.ArrayIndexOutOfBounds 异常

java - 构造函数中的 if 语句未按预期工作? java

tomcat - 如何使用 Tomcat 将各种请求从 ROOT 转发到其他 Web 应用上下文

java - 自定义代理复制 PDF

java.net.URLConnection.guessContentTypeFromStream 和 text/plain

java - 授权用户读取 URL 正文内容时出错

c# - 从 C# 中的压缩字符串中解压缩 java 中的字符串

java - @ManyToMany JPA 2 复杂查询

mysql - 在 servlet 中搜索代码到 mysql?