步骤:
1.构造URL
URL url = new URL(PATH);
2.设置连接
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
? ? ? connection.setConnectTimeout(3000);
? ? ? connection.setDoInput(true);//表示从服务器获取数据
? ? ? connection.setDoOutput(true);//表示向服务器写数据
? ? ? //获得上传信息的字节大小以及长度
? ? ? connection.setRequestMethod("POST");
? ? ? //是否使用缓存
? ? ? connection.setUseCaches(false);
? ? ? //表示设置请求体的类型是文本类型
? ? ? connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
? ? ?
? ? ? connection.setRequestProperty("Content-Length", String.valueOf(mydata.length));
? ? ? connection.connect();?
3.写入请求正文
Map params = new HashMap();
params.put("username", "lili");
params.put("password", "123");
StringBuffer buffer = new StringBuffer();
try {//把请求的主体写入正文!!
?if(params != null&&!params.isEmpty()){
//迭代器
? for(Map.Entry entry : params.entrySet()){
? buffer.append(entry.getKey()).append("=").
? append(URLEncoder.encode(entry.getValue(),encode)).
? append("&");
? }
}
//? System.out.println(buffer.toString());
? //删除最后一个字符&,多了一个;主体设置完毕
? buffer.deleteCharAt(buffer.length()-1);
? byte[] mydata = buffer.toString().getBytes();
//获得输出流,向服务器输出数据
? ? ? OutputStream outputStream = connection.getOutputStream();
? ? ? ? ? outputStream.write(mydata,0,mydata.length);
4.读取返回数据,关闭连接
//通常叫做内存流,写在内存中的
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
byte[] data = new byte[1024];
int len = 0;
String result = "";
if(inputStream != null){
try {
while((len = inputStream.read(data))!=-1){
data.toString();
?
outputStream.write(data, 0, len);
}
//result是在服务器端设置的doPost函数中的
result = new String(outputStream.toByteArray(),encode);
outputStream.flush();
下面上代码:一个简单的Demo访问一个自建的Servlet:
package com.http.post;?
import java.io.ByteArrayOutputStream;?
import java.io.IOException;?
import java.io.InputStream;?
import java.io.OutputStream;?
import java.io.UnsupportedEncodingException;?
import java.net.HttpURLConnection;?
import java.net.MalformedURLException;?
import java.net.URL;?
import java.net.URLEncoder;?
import java.util.HashMap;?
import java.util.Map;?
public class HttpUtils {?
? ? private static String PATH = "http://172.24.87.47:8088/myhttp/servlet/LoginAction";?
? ? private static URL url;?
? ? public HttpUtils() {?
? ? ? ? // TODO Auto-generated constructor stub?
? ? }?
? ? static{?
? ? ? ? try {?
? ? ? ? ? ? url = new URL(PATH);?
? ? ? ? } catch (MalformedURLException e) {?
? ? ? ? ? ? // TODO Auto-generated catch block?
? ? ? ? ? ? e.printStackTrace();?
? ? ? ? }?
? ? }?
? ? /**
? ? * @param params 填写的url的参数
? ? * @param encode 字节编码
? ? * @return
? ? */
? ? public static String sendPostMessage(Map params,String encode){?
? ? ? ? StringBuffer buffer = new StringBuffer();?
? ? ? ? try {//把请求的主体写入正文!!?
? ? ? ? ? ? if(params != null&&!params.isEmpty()){?
? ? ? ? ? ? ? ? //迭代器?
? ? ? ? ? ? ? for(Map.Entry entry : params.entrySet()){?
? ? ? ? ? ? ? ? ? buffer.append(entry.getKey()).append("=").?
? ? ? ? ? ? ? ? ? append(URLEncoder.encode(entry.getValue(),encode)).?
? ? ? ? ? ? ? ? ? append("&");?
? ? ? ? ? ? ? }?
? ? ? ? ? ? }?
//? ? ? ? ? ? System.out.println(buffer.toString());?
? ? ? ? ? ? ? //删除最后一个字符&,多了一个;主体设置完毕?
? ? ? ? ? ? ? buffer.deleteCharAt(buffer.length()-1);?
? ? ? ? ? ? ? byte[] mydata = buffer.toString().getBytes();?
? ? ? ? ? ? ? HttpURLConnection connection = (HttpURLConnection) url.openConnection();?
? ? ? ? ? ? ? connection.setConnectTimeout(3000);?
? ? ? ? ? ? ? connection.setDoInput(tru