Java servlet可以';无法接收http post多部分请求的部分
首先,我问了这个问题,似乎我不理解从客户机向服务器发送多部分的逻辑。使用这篇文章,我无法看到每个部分中的必填字段 我构建了我的请求,并添加了您在这里看到的所有必填字段Java servlet可以';无法接收http post多部分请求的部分,java,servlets,http-post,multipartform-data,multipart,Java,Servlets,Http Post,Multipartform Data,Multipart,首先,我问了这个问题,似乎我不理解从客户机向服务器发送多部分的逻辑。使用这篇文章,我无法看到每个部分中的必填字段 我构建了我的请求,并添加了您在这里看到的所有必填字段 HttpClient client = HttpClientBuilder.create().build(); HttpPost httpPost = new HttpPost( "http://localhost:8080/ServletExample1/multipart1");
HttpClient client = HttpClientBuilder.create().build();
HttpPost httpPost = new HttpPost(
"http://localhost:8080/ServletExample1/multipart1");
httpPost.addHeader("Content-Type",
"multipart/related; boundary=HereItGoes");
httpPost.addHeader("Accept", MediaType.TEXT_PLAIN);
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
FileBody bin = new FileBody(new File("./test.txt"));
builder.addPart("source", new StringBody("MyComputer",
ContentType.TEXT_PLAIN));
builder.addPart("folder_id", new StringBody("-1",
ContentType.TEXT_PLAIN));
builder.addPart("file_type", new StringBody("txt",
ContentType.TEXT_PLAIN));
builder.addPart("file_name", new StringBody("test.txt",
ContentType.TEXT_PLAIN));
builder.addPart("description", new StringBody("The file to test",
ContentType.TEXT_PLAIN));
builder.addPart("data", bin);
HttpEntity entity = builder.build();
httpPost.setEntity(entity);
HttpResponse response = client.execute(httpPost);
String responseString = new BasicResponseHandler()
.handleResponse(response);
System.out.println(responseString);
我的问题是在服务器上,我一直收到部件数量为零的消息。对于服务器未接收部件的用户(注意,我并不是说服务器中存在异常)
我这样说是因为我在服务器(我的servlet)上这样做
Iterator<Part> partsIterator = request.getParts().iterator();
System.out.println("The number of parts is :"
+ request.getParts().size());
Iterator partsIterator=request.getParts().Iterator();
System.out.println(“零件数量为:”
+request.getParts().size());
打印的结果总是零,总是零
请问我缺少什么?servlet的多部分配置需要
内容类型为多部分/表单数据
除其他地方外,这在
可以在javax.servlet.servlet
类上指定的注释,
指示Servlet
的实例期望符合
到multipart/formdata
MIME类型
您正在指定不同的内容类型
httpPost.addHeader("Content-Type", "multipart/related; boundary=HereItGoes");
把这个扔掉。MultipartEntityBuilder
已经用适当的头构建了一个请求。加上
builder.setBoundary("HereItGoes")
对于边界
示例Servlet
@WebServlet(loadOnStartup = 1, urlPatterns = "/multipart1")
@MultipartConfig()
public class MyServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("The number of parts is :" + request.getParts().size());
Iterator<Part> partsIterator = request.getParts().iterator();
while (partsIterator.hasNext()) {
System.out.println(partsIterator.next().getName());
}
}
}
@WebServlet(loadOnStartup=1,urlPatterns=“/multipart1”)
@MultipartConfig()
公共类MyServlet扩展了HttpServlet{
@凌驾
受保护的void doPost(HttpServletRequest请求,HttpServletResponse响应)引发ServletException,IOException{
System.out.println(“部件数量为:+request.getParts().size());
迭代器partsIterator=request.getParts().Iterator();
while(partsIterator.hasNext()){
System.out.println(partsIterator.next().getName());
}
}
}
它将收到您发送的所有6个部分以及您问题中的代码。好的是您的答案非常有效,坏的是我似乎不必指定所有这些信息,如描述、文件名、文件类型、源和数据。正确的?因为我更改了它们的名称,请求仍然有效,我可以读取服务器上的新属性。你能告诉我在服务器中解析文件的链接或图说页面吗?另外,我如何发送多个部分:)您的代码只发送一个部分。@MarcoDinatsoli我不知道您的服务器在做什么,如何解析它,它期望什么,等等。我添加了一个示例Servlet
,它接收所有部分。