有什么方便的方法可以读取和解析传入请求中的数据。
例如客户发起发布请求
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")。以下代码
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()改用。另请参阅此博客以获取更多示例。
multipart/form-data
application/x-www-form-urlencoded
request.getParameter()
HttpServletRequest#getParts()
在Servlet 3.0之前,解析请求的事实上的标准multipart/form-data是使用Apache Commons FileUpload。只需仔细阅读其用户指南和常见问题部分,以了解如何使用它。在此之前,我已经用代码示例发布了答案(它还包含针对Servlet 3.0的示例)。