Apache的org.apache.http.entity.mime.content.FileBody
是@NotThreadSafe。我可以安全地通过网络传递具有此类FileBody的多个帖子请求。样本将通过org.apache.http.impl.client.DefaultHttpClient
,其中接收servlet是javax.servlet.http.HttpServlet
?我想知道接收的servlet是否可能在org.apache.commons.fileupload.servlet.ServletFileUpload
的FileBody处理期间混淆了请求内容。
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.impl.client.DefaultHttpClient;
...//execute this multiple times in different jvm's
MultipartEntity entity = new MultipartEntity();
... //add other entity parts here
FileBody body = new FileBody(new File(file));
entity.add("file", body);
HttpPost post = new HttpPost();
... //add other post elements here
post.setEntity(entity);
new DefaultHttpClient().execute(post);
另外,FileBody的哪个部分可以是@NotThreadSafe?我没有看到任何相关的静态方法。
答案 0 :(得分:1)
多线程的概念适用于单个进程。以您的客户端应用程序为例。您在一个线程中创建一个FileBody
对象。作为@NotThreadSafe
类,如果它被传递并被其他线程使用,则无法预测其行为。 您的服务器不参与其中。
另外,FileBody的哪个部分可以是@NotThreadSafe?我没有看到任何相关的静态方法。
我不确定您使用的是哪个版本的HttpClient。该库的4.3.5版没有使用FileBody
注释的@NotThreadSafe
类型。无论如何,线程安全和static
方法之间没有关系。类型可能是线程不安全的,没有任何static
方法。
FileBody
是HTTP请求正文的容器/描述符。当HttpClient
准备好发送请求时,它将从InputStream
获取FileBody
并将其字节写入作为HTTP请求正文的底层TCP套接字/连接。这些只是字节。 HTTP服务器将接收字节。