HttpURLConnection 对 get和post请求的封装(包括带参数和不带参数)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;

import org.apache.log4j.Logger;

/**
* <pre>
* HTTP请求[qing qiu]代理类
* </pre>
*
* @author benl
* @version 1.0, 2007-7-3
*/
public class HttpRequestProxy {

/**
* 连接[lian jie]超时[chao shi]
*/
private static int connectTimeOut = 5000;

/**
* 读取[du qu]数据[shu ju]超时[chao shi]
*/
private static int readTimeOut = 10000;

/**
* 请求[qing qiu]编码[bian ma]
*/
private static String requestEncoding = "GBK";

private static Logger logger = Logger.getLogger(HttpRequestProxy.class);

/**
* <pre>
* 发送带参数[can shu]的GET的HTTP请求[qing qiu]
* </pre>
*
* @param reqUrl
*            HTTP请求[qing qiu]URL
* @param parameters
*            参数[can shu]映射[ying she]表
* @return HTTP响应[xiang ying]的字符[zi fu]串[zi fu chuan]
*/
public static String doGet(String reqUrl, Map parameters,
String recvEncoding) {
HttpURLConnection url_con = null;
String responseContent = null;
try {
StringBuffer params = new StringBuffer();
for (Iterator iter = parameters.entrySet().iterator(); iter
.hasNext();) {
Entry element = (Entry) iter.next();
params.append(element.getKey().toString());
params.append("=");
params.append(URLEncoder.encode(element.getValue().toString(),
HttpRequestProxy.requestEncoding));
params.append("&");
}

if (params.length() > 0) {
params = params.deleteCharAt(params.length() - 1);
}

URL url = new URL(reqUrl);
url_con = (HttpURLConnection) url.openConnection();
url_con.setRequestMethod("GET");
System.setProperty("sun.net.client.defaultConnectTimeout", String
.valueOf(HttpRequestProxy.connectTimeOut));// (单位[dan
// wei]:毫秒)jdk1.4换成这个,连接[lian
// jie]超时[chao
// shi]
System.setProperty("sun.net.client.defaultReadTimeout", String
.valueOf(HttpRequestProxy.readTimeOut)); // (单位[dan
// wei]:毫秒)jdk1.4换成这个,读操作超时[chao
// shi]
// url_con.setConnectTimeout(5000);//(单位[dan wei]:毫秒)jdk
// 1.5换成这个,连接[lian jie]超时[chao shi]
// url_con.setReadTimeout(5000);//(单位[dan wei]:毫秒)jdk
// 1.5换成这个,读操作超时[chao shi]
url_con.setDoOutput(true);
byte[] b = params.toString().getBytes();
url_con.getOutputStream().write(b, 0, b.length);
url_con.getOutputStream().flush();
url_con.getOutputStream().close();

InputStream in = url_con.getInputStream();
BufferedReader rd = new BufferedReader(new InputStreamReader(in,
recvEncoding));
String tempLine = rd.readLine();
StringBuffer temp = new StringBuffer();
String crlf = System.getProperty("line.separator");
while (tempLine != null) {
temp.append(tempLine);
temp.append(crlf);
tempLine = rd.readLine();
}
responseContent = temp.toString();
rd.close();
in.close();
} catch (IOException e) {
logger.error("网络[wang luo]故障[gu zhang]", e);
} finally {

if (url_con != null) {
url_con.disconnect();
}
}

return responseContent;
}

/**
* <pre>
* 发送不带参数[can shu]的GET的HTTP请求[qing qiu]
* </pre>
*
* @param reqUrl
*            HTTP请求[qing qiu]URL
* @return HTTP响应[xiang ying]的字符[zi fu]串[zi fu chuan]
*/
public static String doGet(String reqUrl, String recvEncoding) {
HttpURLConnection url_con = null;
String responseContent = null;
try {
StringBuffer params = new StringBuffer();
String queryUrl = reqUrl;
int paramIndex = reqUrl.indexOf("?");

if (paramIndex > 0) {
queryUrl = reqUrl.substring(0, paramIndex);
String parameters = reqUrl.substring(paramIndex + 1, reqUrl
.length());
String[] paramArray = parameters.split("&");
for (int i = 0; i < paramArray.length; i++) {
String string = paramArray[i];
int index = string.indexOf("=");

if (index > 0) {
String parameter = string.substring(0, index);
String value = string.substring(index + 1, string
.length());
params.append(parameter);
params.append("=");
params.append(URLEncoder.encode(value,
HttpRequestProxy.requestEncoding));
params.append("&");
}
}

params = params.deleteCharAt(params.length() - 1);
}

URL url = new URL(queryUrl);
url_con = (HttpURLConnection) url.openConnection();
url_con.setRequestMethod("GET");
System.setProperty("sun.net.client.defaultConnectTimeout", String
.valueOf(HttpRequestProxy.connectTimeOut));// (单位[dan
// wei]:毫秒)jdk1.4换成这个,连接[lian
// jie]超时[chao
// shi]
System.setProperty("sun.net.client.defaultReadTimeout", String
.valueOf(HttpRequestProxy.readTimeOut)); // (单位[dan
// wei]:毫秒)jdk1.4换成这个,读操作超时[chao
// shi]
// url_con.setConnectTimeout(5000);//(单位[dan wei]:毫秒)jdk
// 1.5换成这个,连接[lian jie]超时[chao shi]
// url_con.setReadTimeout(5000);//(单位[dan wei]:毫秒)jdk
// 1.5换成这个,读操作超时[chao shi]
url_con.setDoOutput(true);
byte[] b = params.toString().getBytes();
url_con.getOutputStream().write(b, 0, b.length);
url_con.getOutputStream().flush();
url_con.getOutputStream().close();
InputStream in = url_con.getInputStream();
BufferedReader rd = new BufferedReader(new InputStreamReader(in,
recvEncoding));
String tempLine = rd.readLine();
StringBuffer temp = new StringBuffer();
String crlf = System.getProperty("line.separator");
while (tempLine != null) {
temp.append(tempLine);
temp.append(crlf);
tempLine = rd.readLine();
}
responseContent = temp.toString();
rd.close();
in.close();
} catch (IOException e) {
logger.error("网络[wang luo]故障[gu zhang]", e);
} finally {

if (url_con != null) {
url_con.disconnect();
}
}

return responseContent;
}

/**
* <pre>
* 发送带参数[can shu]的POST的HTTP请求[qing qiu]
* </pre>
*
* @param reqUrl
*            HTTP请求[qing qiu]URL
* @param parameters
*            参数[can shu]映射[ying she]表
* @return HTTP响应[xiang ying]的字符[zi fu]串[zi fu chuan]
*/
public static String doPost(String reqUrl, Map parameters,
String recvEncoding) {
HttpURLConnection url_con = null;
String responseContent = null;
try {
StringBuffer params = new StringBuffer();
for (Iterator iter = parameters.entrySet().iterator(); iter
.hasNext();) {
Entry element = (Entry) iter.next();
params.append(element.getKey().toString());
params.append("=");
params.append(URLEncoder.encode(element.getValue().toString(),
HttpRequestProxy.requestEncoding));
params.append("&");
}

if (params.length() > 0) {
params = params.deleteCharAt(params.length() - 1);
}

URL url = new URL(reqUrl);
url_con = (HttpURLConnection) url.openConnection();
url_con.setRequestMethod("POST");
System.setProperty("sun.net.client.defaultConnectTimeout", String
.valueOf(HttpRequestProxy.connectTimeOut));// (单位[dan
// wei]:毫秒)jdk1.4换成这个,连接[lian
// jie]超时[chao
// shi]
System.setProperty("sun.net.client.defaultReadTimeout", String
.valueOf(HttpRequestProxy.readTimeOut)); // (单位[dan
// wei]:毫秒)jdk1.4换成这个,读操作超时[chao
// shi]
// url_con.setConnectTimeout(5000);//(单位[dan wei]:毫秒)jdk
// 1.5换成这个,连接[lian jie]超时[chao shi]
// url_con.setReadTimeout(5000);//(单位[dan wei]:毫秒)jdk
// 1.5换成这个,读操作超时[chao shi]
url_con.setDoOutput(true);
byte[] b = params.toString().getBytes();
url_con.getOutputStream().write(b, 0, b.length);
url_con.getOutputStream().flush();
url_con.getOutputStream().close();

InputStream in = url_con.getInputStream();
BufferedReader rd = new BufferedReader(new InputStreamReader(in,
recvEncoding));
String tempLine = rd.readLine();
StringBuffer tempStr = new StringBuffer();
String crlf = System.getProperty("line.separator");
while (tempLine != null) {
tempStr.append(tempLine);
tempStr.append(crlf);
tempLine = rd.readLine();
}
responseContent = tempStr.toString();
rd.close();
in.close();
} catch (IOException e) {
logger.error("网络[wang luo]故障[gu zhang]", e);
} finally {

if (url_con != null) {
url_con.disconnect();
}
}
return responseContent;
}

/**
* @return 连接[lian jie]超时[chao shi](毫秒)
* @see com.hengpeng.common.web.HttpRequestProxy#connectTimeOut
*/
public static int getConnectTimeOut() {
return HttpRequestProxy.connectTimeOut;
}

/**
* @return 读取[du qu]数据[shu ju]超时[chao shi](毫秒)
* @see com.hengpeng.common.web.HttpRequestProxy#readTimeOut
*/
public static int getReadTimeOut() {
return HttpRequestProxy.readTimeOut;
}

/**
* @return 请求[qing qiu]编码[bian ma]
* @see com.hengpeng.common.web.HttpRequestProxy#requestEncoding
*/
public static String getRequestEncoding() {
return requestEncoding;
}

/**
* @param connectTimeOut
*            连接[lian jie]超时[chao shi](毫秒)
* @see com.hengpeng.common.web.HttpRequestProxy#connectTimeOut
*/
public static void setConnectTimeOut(int connectTimeOut) {
HttpRequestProxy.connectTimeOut = connectTimeOut;
}

/**
* @param readTimeOut
*            读取[du qu]数据[shu ju]超时[chao shi](毫秒)
* @see com.hengpeng.common.web.HttpRequestProxy#readTimeOut
*/
public static void setReadTimeOut(int readTimeOut) {
HttpRequestProxy.readTimeOut = readTimeOut;
}

/**
* @param requestEncoding
*            请求[qing qiu]编码[bian ma]
* @see com.hengpeng.common.web.HttpRequestProxy#requestEncoding
*/
public static void setRequestEncoding(String requestEncoding) {
HttpRequestProxy.requestEncoding = requestEncoding;
}

public static void main(String[] args) {
Map map = new HashMap();
map.put("actionType", "1");
    map.put("issueId", "33");
String temp = HttpRequestProxy.doGet(
"http://localhost/TransData", map, "GBK");
System.out.println("返回的消息[xiao xi]是:" + temp);

}
}


最后mian方法中这段
String temp = HttpRequestProxy.doGet("http://localhost/TransData", map, "GBK");
里面的URL是我另外新建的一个web工程,名为TransData。在TransData工程中的index.jsp页面我这样写:
<%
String p1 = request.getParameter("actionType");
String p2 = request.getParameter("issueId");
System.out.println("p1:"+p1);
System.out.println("p2:"+p2);
%>


但是发现我拿不到参数。
就把提交的URL改为提交到servlet:
String temp = HttpRequestProxy.doGet("http://localhost/TransData/a.do", map, "GBK");
在servlet的doPost方法中这样写:
String p1 = req.getParameter("actionType");
String p2 = req.getParameter("issueId");
System.out.println(p1);
System.out.println(p2);


这样打印p1,p2发现可以拿到值。这是为什么呢,为什么在jsp中拿不到参数,在servlet中却可以拿到?

转载于:https://www.cnblogs.com/wlfhotte/archive/2012/03/09/2387892.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值