httpclient发送multipart/form-data类型参数和用MultipartRequest接收参数
一、利用HttpClient发送基于Content-Type="multipart/form-data"形式的表单
package com.test.httpclient; import java.io.IOException;
import java.util.Map; import javax.servlet.ServletException; import org.apache.commons.httpclient.methods.RequestEntity;
import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;
import org.apache.commons.httpclient.methods.multipart.Part;
import org.apache.commons.httpclient.methods.multipart.StringPart;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpMethodParams; import org.apache.commons.httpclient.HttpClient; public class SendXmlAction
{
public String execute() throws ServletException, IOException
{
String xmlhead = this.getRequest().getParameter("xmlhead");
String xmlbody = this.getRequest().getParameter("xmlbody");
System.out.println("xmlhead == "+xmlhead);
System.out.println("xmlbody == "+xmlbody); // 用远程服务的URL设置生成POST方法,供HTTP客户端执行
String remoteUrl = "http://**.**.***.***:8888/project/receiveServlet"; PostMethod method = new PostMethod(remoteUrl); // multipart/form-data; boundary=---------------------------7de2b13a790640 //method.addParameter("xmlhead", xmlhead);
//method.addParameter("xmlbody", xmlbody); HttpClient HTTP_CLINET = new HttpClient(); synchronized (HTTP_CLINET)
{
try
{
//使用多重发送方式,发送两个独立的两个XML Part,基于Content-Type="multipart/form-data"形式的表单
Part[] parts = {new StringPart("xmlhead",xmlhead), new StringPart("xmlbody",xmlbody)}; //StringPart和FilePart都可以放进去
RequestEntity requestEntity = new MultipartRequestEntity(parts, method.getParams());
method.setRequestEntity(requestEntity); method.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, 30000);
//链接超时 30秒
HTTP_CLINET.getHttpConnectionManager().getParams().setConnectionTimeout(30000);
//读取超时 30秒
HTTP_CLINET.getHttpConnectionManager().getParams().setSoTimeout(30000); HTTP_CLINET.executeMethod(method); String[] result = new String[2];
result[0] = String.valueOf(method.getStatusCode());
result[1] = method.getResponseBodyAsString();
System.out.println("http status : "+result[0]);
System.out.println("http response : "+result[1]); }
catch (Exception e)
{
e.printStackTrace();
}
finally
{
if (method != null)
{
method.releaseConnection();
}
method = null;
}
} return "success";
}
}
二、MultipartRequest接收参数
package com.test.servlet; import java.io.IOException;
import java.io.PrintWriter;
import java.io.File; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; import com.oreilly.servlet.MultipartRequest; public class BossServlet extends HttpServlet
{ /** serialVersionUID */
private Logger logger = Logger.getLogger(BossServlet.class); public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException
{
this.doPost(request, response);
} protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException
{
// MultipartRequest
String head = null ;
String body = null ; try
{
File fileDir = new File(this.getServletContext().getRealPath("/formhttp"));
if (!fileDir.exists())
{
fileDir.mkdirs();
} int inmaxPostSize = 10 * 1024 * 1024; // utf-8中文编码模式上传文件
MultipartRequest multirequest = new MultipartRequest(request,fileDir.getAbsolutePath(),inmaxPostSize,"UTF-8"); head = multirequest.getParameter("head");
body = multirequest.getParameter("body");
System.out.println("xmlHead2 = " + xmlHead);
System.out.println("xmlBody2 = " + xmlBody);
}
catch (Exception e)
{
e.printStackTrace();
} response.setCharacterEncoding("UTF-8");
response.setContentType("multipart/mixed;boundary=---------------------------7de2b13a790640");
PrintWriter out = response.getWriter(); String res = null;
try
{
res = .....
}
catch (Exception e)
{
e.printStackTrace();
} if (!(res == null || "".equals(res)))
{
try
{
out.println(res);
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
out.close();
} }
} public void init() throws ServletException
{
super.init();
}
}
若发送基于Content-Type="multipart/form-data"形式的表单,却通过request.getParameter("**")获取参数值,则获取的参数值为空。
httpclient发送multipart/form-data类型参数和用MultipartRequest接收参数的更多相关文章
- html5 file upload and form data by ajax
html5 file upload and form data by ajax 最近接了一个小活,在短时间内实现一个活动报名页面,其中遇到了文件上传. 我预期的效果是一次ajax post请求,然后在 ...
- Sending forms through JavaScript[form提交 form data]
https://developer.mozilla.org/en-US/docs/Learn/HTML/Forms/Sending_forms_through_JavaScript As in the ...
- fetch发送Form Data请求并携带cookie
今天我们来说说如何fetch发送Form Data请求并携带cookie,直接进入正题好吧,别问我今天为啥不在开始吹两句了,累到一句牛逼不想吹...... 步骤1: 设置头部,"Conten ...
- VUE axios 发送 Form Data 格式数据请求
axios 默认是 Payload 格式数据请求,但有时候后端接收参数要求必须是 Form Data 格式的,所以我们就得进行转换.Payload 和 Form Data 的主要设置是根据请求头的 C ...
- springMVC中对HTTP请求form data和request payload两种数据发送块的后台接收方式
最近在做项目中发现,前台提交数据时,如果通过form表单提交和ajax发送json时,springMVC后台接收不能都通过@ModelAttribute方式处理,经过一番查找后,ajax发送json请 ...
- form data和request payload的区别
HTML <form> 标签的 enctype 属性 在下面的例子中,表单数据会在未编码的情况下进行发送: <form action="form_action.asp&qu ...
- Web 前沿——HTML5 Form Data 对象的使用
XMLHttpRequest Level 2 添加了一个新的接口——FormData.利用 FormData 对象,我们可以通过 JavaScript 用一些键值对来模拟一系列表单控件,我们还可以使用 ...
- HTTP请求中的form data和request payload的区别
HTML <form> 标签的 enctype 属性 在下面的例子中,表单数据会在未编码的情况下进行发送: <form action="form_action.asp&qu ...
- [整理]Ajax Post请求下的Form Data和Request Payload
Ajax Post请求下的Form Data和Request Payload 通常情况下,我们通过Post提交表单,以键值对的形式存储在请求体中.此时的reqeuest headers会有Conten ...
随机推荐
- 三角函数计算,Cordic 算法入门
[-] 三角函数计算Cordic 算法入门 从二分查找法说起 减少乘法运算 消除乘法运算 三角函数计算,Cordic 算法入门 三角函数的计算是个复杂的主题,有计算机之前,人们通常通过查找三角函数表来 ...
- OpenSUSE 安装并启动Tomcat
安装.用YsST2搜索tomcat安装就好了.不过版本肯定不如官网的新,笔者用的是7.0.42,最新的已经到8.X了. 启动.在服务管理器中找到tomcat,启动.
- Bootstrap模态框
backdrop选项,当设置成false的时候, 背景不会出现半透明的遮盖层,当用户点击模态框外部时不会关闭模态框: 设置成true的时候会出现遮盖层,当用户点击模态框外部时则会关闭模态框. 那如果又 ...
- LINQ to XML(1)
LINQ to XML可以两种方式和XML配合使用.第一种方式是作为简化的XML操作API,第二种方式是使用LINQ查询工具.下面我使用的是第二种方式. 主要内容:用LINQ查询语句对XML文件里的数 ...
- Windows7系统禁用USB和启用USB方法
被迫装了XX软件之后,无线网络和USB都被禁用了,XX软件还不能被卸载.只能用PE进去时候把XX软件安装目录进行删除,但是删除之后还是不能识别U盘,从网上找到办法一看是注册表的项被修改了. 注册表项为 ...
- Vim复制粘贴
用了快一年Vim了,今天想要将vim里的一句话复制到浏览器里,结果捣鼓了半天.汗! 解决方案: 在vim中按“V”进入可视模式,选中要复制的文字 接下来要按3个键“+y(引号.加号.字母y),这样要复 ...
- WebApp
目前的手机APP有三类:原生APP,WebAPP,HybridApp:HybridApp结合了前两类APP各自的优点,越来越流行. Hybrid App的兴起是现阶段移动互联网产业的一种偶然.移动互联 ...
- C# 生成简单验证码
网站登录总是会用到验证码,生成验证码对于C#来说很简单.因为有专门封装好的GDI+类可以直接调用使用具体代码如下 using System; using System.Collections.Gene ...
- 使用文件监控对象FileSystemWatcher实现数据同步
最近在项目中有这么个需求,就是得去实时获取某个在无规律改变的文本文件中的内容.首先想到的是用程序定期去访问这个文件,因为对实时性要求很高,间隔不能超过1S,而且每次获取到文本内容都要去分发给WEB服务 ...
- 存储映射IO
mmap 将文件映射到内存, 对这块内存的修改会自动同步到相应的文件中 void *mmap(void *addr, size_t len, int prot, int flag, int fd, o ...