atu*_*ser 63 java servlets urlconnection
是否有任何方便的方法来读取和解析来自传入请求的数据.
例如客户发起邮寄请求
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);
我无法使用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
解析传入请求的最佳方法是什么?我不想编写自己的解析器,可能有一个现成的解决方案.
Bal*_*usC 77
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().另请参阅此博客以获取扩展示例.
在Servlet 3.0之前,解析请求的事实标准multipart/form-data是使用Apache Commons FileUpload.只需仔细阅读其" 用户指南"和" 常见问题解答"部分,即可了解如何使用它.我已经发布了代码示例的答案之前,在这里(也包含一个示例瞄准的Servlet 3.0).
小智 16
解决方案:
解决方案A:
com.oreilly.servlet.MultipartRequest解决方案B:
org.apache.commons.fileupload.MultipartStream解决方案C:
解决方案D:
使用Struts.Struts 1.1自动处理这个问题.
参考:http://www.jguru.com/faq/view.jsp? EID = 1045507
在上传之前并不总是有一个servlet(我可以使用过滤器).或者可能是同一个控制器(同样是一个过滤器或者一个servelt)可以服务很多动作,所以我认为依赖于servlet配置来使用getPart方法(仅适用于Servlet API> = 3.0),我不知道,我不喜欢.
一般来说,我更喜欢独立的解决方案,能够独自生活,在这种情况下 http://commons.apache.org/proper/commons-fileupload/就是其中之一.
List<FileItem> multiparts = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
    for (FileItem item : multiparts) {
        if (!item.isFormField()) {
            //your operations on file
        } else {
            String name = item.getFieldName();
            String value = item.getString();
            //you operations on paramters
        }
}
| 归档时间: | 
 | 
| 查看次数: | 134905 次 | 
| 最近记录: |