有什么方便的方法可以从传入的请求中读取和解析数据。
例如客户端发起 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 3 、 Tomcat 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/