HttpURLConnection和HTTPClient的比较,以及使用规则
1.概念
HTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。在 JDK 的 java.net 包中已经提供了访问 HTTP 协议的基本功能:HttpURLConnection。但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活。
除此之外,在Android中,androidSDK中集成了Apache的HttpClient模块,用来提供高效的、最新的、功能丰富的支持 HTTP 协议工具包,并且它支持 HTTP 协议最新的版本和建议。使用HttpClient可以快速开发出功能强大的Http程序。
2.区别
HttpClient是个很不错的开源框架,封装了访问http的请求头,参数,内容体,响应等等,
HttpURLConnection是java的标准类,什么都没封装,用起来太原始,不方便,比如重访问的自定义,以及一些高级功能等。
3.案例
HttpURLConnection
String urlAddress = "http://192.168.1.102:8080/AndroidServer/login.do";
URL url;
HttpURLConnection uRLConnection;
publicUrlConnectionToServer(){
}//向服务器发送get请求
publicString doGet(String username,String password){
String getUrl = urlAddress + "?username="+username+"&password="+password;
try{
url =newURL(getUrl);
uRLConnection = (HttpURLConnection)url.openConnection();
InputStream is = uRLConnection.getInputStream();
BufferedReader br =newBufferedReader(newInputStreamReader(is));
String response = "";
String readLine =null;
while((readLine =br.readLine()) !=null){
//response = br.readLine();
response = response + readLine;
}
is.close();
br.close();
uRLConnection.disconnect();
returnresponse;
}catch(MalformedURLException e) {
e.printStackTrace();
returnnull;
}catch(IOException e) {
e.printStackTrace();
returnnull;
}
}
//向服务器发送post请求
publicString doPost(String username,String password){
try{
url =newURL(urlAddress);
uRLConnection = (HttpURLConnection)url.openConnection();
uRLConnection.setDoInput(true);
uRLConnection.setDoOutput(true);
uRLConnection.setRequestMethod("POST");
uRLConnection.setUseCaches(false);
uRLConnection.setInstanceFollowRedirects(false);
uRLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
uRLConnection.connect();
DataOutputStream out =newDataOutputStream(uRLConnection.getOutputStream());
String content = "username="+username+"&password="+password;
out.writeBytes(content);
out.flush();
out.close();
InputStream is = uRLConnection.getInputStream();
BufferedReader br =newBufferedReader(newInputStreamReader(is));
String response = "";
String readLine =null;
while((readLine =br.readLine()) !=null){
//response = br.readLine();
response = response + readLine;
}
is.close();
br.close();
uRLConnection.disconnect();
returnresponse;
}catch(MalformedURLException e) {
e.printStackTrace();
returnnull;
}catch(IOException e) {
e.printStackTrace();
returnnull;
}
}
HTTPClient
String urlAddress = "http://192.168.1.102:8080/qualityserver/login.do";
publicHttpClientServer(){
}
publicString doGet(String username,String password){
String getUrl = urlAddress + "?username="+username+"&password="+password;
HttpGet httpGet =newHttpGet(getUrl);
HttpParams hp = httpGet.getParams();
hp.getParameter("true");
//hp.
//httpGet.setp
HttpClient hc =newDefaultHttpClient();
try{
HttpResponse ht = hc.execute(httpGet);
if(ht.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
HttpEntity he = ht.getEntity();
InputStream is = he.getContent();
BufferedReader br =newBufferedReader(newInputStreamReader(is));
String response = "";
String readLine =null;
while((readLine =br.readLine()) !=null){
//response = br.readLine();
response = response + readLine;
}
is.close();
br.close();
//String str = EntityUtils.toString(he);
System.out.println("========="+response);
returnresponse;
}else{
return"error";
}
}catch(ClientProtocolException e) {
//TODO Auto-generated catch block
e.printStackTrace();
return"exception";
}catch(IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
return"exception";
}
}
publicString doPost(String username,String password){
//String getUrl = urlAddress + "?username="+username+"&password="+password;
HttpPost httpPost =newHttpPost(urlAddress);
List params =newArrayList();
NameValuePair pair1 =newBasicNameValuePair("username", username);
NameValuePair pair2 =newBasicNameValuePair("password", password);
params.add(pair1);
params.add(pair2);
HttpEntity he;
try{
he =newUrlEncodedFormEntity(params, "gbk");
httpPost.setEntity(he);
}catch(UnsupportedEncodingException e1) {
//TODO Auto-generated catch block
e1.printStackTrace();
}
HttpClient hc =newDefaultHttpClient();
try{
HttpResponse ht = hc.execute(httpPost);
//连接成功
if(ht.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
HttpEntity het = ht.getEntity();
InputStream is = het.getContent();
BufferedReader br =newBufferedReader(newInputStreamReader(is));
String response = "";
String readLine =null;
while((readLine =br.readLine()) !=null){
//response = br.readLine();
response = response + readLine;
}
is.close();
br.close();
//String str = EntityUtils.toString(he);
System.out.println("=========&&"+response);
returnresponse;
}else{
return"error";
}
}catch(ClientProtocolException e) {
//TODO Auto-generated catch block
e.printStackTrace();
return"exception";
}catch(IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
return"exception";
}
}
servlet端json转化:
resp.setContentType("text/json");
resp.setCharacterEncoding("UTF-8");
toDo =newToDo();
List<UserBean> list =newArrayList<UserBean>();
list = toDo.queryUsers(mySession);
String body;
//设定JSON
JSONArray array =newJSONArray();
for(UserBean bean : list)
{
JSONObject obj =newJSONObject();
try
{
obj.put("username", bean.getUserName());
obj.put("password", bean.getPassWord());
}catch(Exception e){}
array.add(obj);
}
pw.write(array.toString());
System.out.println(array.toString());
android端接收:
String urlAddress = "http://192.168.1.102:8080/qualityserver/result.do";
String body =
getContent(urlAddress);
JSONArray array =newJSONArray(body);
for(inti=0;i<array.length();i++)
{
obj = array.getJSONObject(i);
sb.append("用户名:").append(obj.getString("username")).append("\t");
sb.append("密码:").append(obj.getString("password")).append("\n");
HashMap<String, Object> map =newHashMap<String, Object>();
try{
userName = obj.getString("username");
passWord = obj.getString("password");
}catch(JSONException e) {
e.printStackTrace();
}
map.put("username", userName);
map.put("password", passWord);
listItem.add(map);
}
}catch(Exception e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
if(sb!=null)
{
showResult.setText("用户名和密码信息:");
showResult.setTextSize(20);
}else
extracted();
//设置adapter
SimpleAdapter simple =newSimpleAdapter(this,listItem,
android.R.layout.simple_list_item_2,
newString[]{"username","password"},
newint[]{android.R.id.text1,android.R.id.text2});
listResult.setAdapter(simple);
listResult.setOnItemClickListener(newOnItemClickListener() {
@Override
publicvoidonItemClick(AdapterView<?> parent, View view,
intposition,longid) {
intpositionId = (int) (id+1);
Toast.makeText(MainActivity.this, "ID:"+positionId, Toast.LENGTH_LONG).show();
}
});
}
privatevoidextracted() {
showResult.setText("没有有效的数据!");
}
//和服务器连接
privateString getContent(String url)throwsException{
StringBuilder sb =newStringBuilder();
HttpClient client =newDefaultHttpClient();
HttpParams httpParams =client.getParams();
HttpConnectionParams.setConnectionTimeout(httpParams, 3000);
HttpConnectionParams.setSoTimeout(httpParams, 5000);
HttpResponse response = client.execute(newHttpGet(url));
HttpEntity entity =response.getEntity();
if(entity !=null){
BufferedReader reader =newBufferedReader(newInputStreamReader
(entity.getContent(),"UTF-8"),8192);
String line =null;
while((line= reader.readLine())!=null){
sb.append(line +"\n");
}
reader.close();
}
returnsb.toString();
}
以下例子:为实际项目开发中代码片断,需要请致电邮箱: