JAVA封装HTTP协议

[size=medium]
摘自http://www.cnblogs.com/devinzhang/archive/2012/01/17/2325092.html

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.案例

URLConnection
String urlAddress = "http://192.168.1.102:8080/AndroidServer/login.do";  
    URL url;  
    HttpURLConnection uRLConnection;  
    public UrlConnectionToServer(){  
  
    }  
    //向服务器发送get请求
    public String doGet(String username,String password){  
        String getUrl = urlAddress + "?username="+username+"&password="+password;  
        try {  
            url = new URL(getUrl);  
            uRLConnection = (HttpURLConnection)url.openConnection();  
            InputStream is = uRLConnection.getInputStream();  
            BufferedReader br = new BufferedReader(new InputStreamReader(is));  
            String response = "";  
            String readLine = null;  
            while((readLine =br.readLine()) != null){  
                //response = br.readLine();  
                response = response + readLine;  
            }  
            is.close();  
            br.close();  
            uRLConnection.disconnect();  
            return response;  
        } catch (MalformedURLException e) {  
            e.printStackTrace();  
            return null;  
        } catch (IOException e) {  
            e.printStackTrace();  
            return null;  
        }  
    }  
      
    //向服务器发送post请求
    public String doPost(String username,String password){  
        try {  
            url = new URL(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 = new DataOutputStream(uRLConnection.getOutputStream());  
            String content = "username="+username+"&password="+password;  
            out.writeBytes(content);  
            out.flush();  
            out.close();  
              
            InputStream is = uRLConnection.getInputStream();  
            BufferedReader br = new BufferedReader(new InputStreamReader(is));  
            String response = "";  
            String readLine = null;  
            while((readLine =br.readLine()) != null){  
                //response = br.readLine();  
                response = response + readLine;  
            }  
            is.close();  
            br.close();  
            uRLConnection.disconnect();  
            return response;  
        } catch (MalformedURLException e) {  
            e.printStackTrace();  
            return null;  
        } catch (IOException e) {  
            e.printStackTrace();  
            return null;  
        }  
    }

HTTPClient
String urlAddress = "http://192.168.1.102:8080/qualityserver/login.do";  
public HttpClientServer(){  
          
 }  
      
public String doGet(String username,String password){  
    String getUrl = urlAddress + "?username="+username+"&password="+password;  
    HttpGet httpGet = new HttpGet(getUrl);  
    HttpParams hp = httpGet.getParams();  
    hp.getParameter("true");  
    //hp.  
    //httpGet.setp  
    HttpClient hc = new DefaultHttpClient();  
    try {  
        HttpResponse ht = hc.execute(httpGet);  
        if(ht.getStatusLine().getStatusCode() == HttpStatus.SC_OK){  
            HttpEntity he = ht.getEntity();  
            InputStream is = he.getContent();  
            BufferedReader br = new BufferedReader(new InputStreamReader(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);  
            return response;  
        }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";  
    }      
}  
  
public String doPost(String username,String password){  
    //String getUrl = urlAddress + "?username="+username+"&password="+password;  
    HttpPost httpPost = new HttpPost(urlAddress);  
    List params = new ArrayList();  
    NameValuePair pair1 = new BasicNameValuePair("username", username);  
    NameValuePair pair2 = new BasicNameValuePair("password", password);  
    params.add(pair1);  
    params.add(pair2);  
      
    HttpEntity he;  
    try {  
        he = new UrlEncodedFormEntity(params, "gbk");  
        httpPost.setEntity(he);  
          
    } catch (UnsupportedEncodingException e1) {  
        // TODO Auto-generated catch block  
        e1.printStackTrace();  
    }   
      
    HttpClient hc = new DefaultHttpClient();  
    try {  
        HttpResponse ht = hc.execute(httpPost);  
        //连接成功  
        if(ht.getStatusLine().getStatusCode() == HttpStatus.SC_OK){  
            HttpEntity het = ht.getEntity();  
            InputStream is = het.getContent();  
            BufferedReader br = new BufferedReader(new InputStreamReader(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);  
            return response;  
        }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 = new ToDo();  
        List<UserBean> list = new ArrayList<UserBean>();  
        list = toDo.queryUsers(mySession);  
        String body;  

        //设定JSON  
        JSONArray array = new JSONArray();  
        for(UserBean bean : list)  
        {  
            JSONObject obj = new JSONObject();  
            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 = new JSONArray(body);            
        for(int i=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 = new HashMap<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 = new SimpleAdapter(this,listItem,  
                android.R.layout.simple_list_item_2,  
                new String[]{"username","password"},  
                new int[]{android.R.id.text1,android.R.id.text2});  
        listResult.setAdapter(simple);  
          
        listResult.setOnItemClickListener(new OnItemClickListener() {  
            @Override  
            public void onItemClick(AdapterView<?> parent, View view,  
                    int position, long id) {  
                int positionId = (int) (id+1);  
                Toast.makeText(MainActivity.this, "ID:"+positionId, Toast.LENGTH_LONG).show();  
              
            }  
        });  
    }  
    private void extracted() {  
        showResult.setText("没有有效的数据!");  
    }  
    //和服务器连接  
    private String getContent(String url)throws Exception{  
        StringBuilder sb = new StringBuilder();  
        HttpClient client =new DefaultHttpClient();  
        HttpParams httpParams =client.getParams();  
          
        HttpConnectionParams.setConnectionTimeout(httpParams, 3000);  
        HttpConnectionParams.setSoTimeout(httpParams, 5000);  
        HttpResponse response = client.execute(new HttpGet(url));  
        HttpEntity entity =response.getEntity();  
          
        if(entity !=null){  
            BufferedReader reader = new BufferedReader(new InputStreamReader  
                    (entity.getContent(),"UTF-8"),8192);  
            String line =null;  
            while ((line= reader.readLine())!=null){  
                sb.append(line +"\n");  
            }  
            reader.close();  
        }  
        return sb.toString();  
    }

[/size]

猜你喜欢

转载自357029540.iteye.com/blog/2291485