2012. 12. 6. 11:04
현재 client 와 server 간의 data 송/수신에 대해 알아 보고 있다. 예전부터 궁금했던 것은 client 에서 server 에 요청을 하면 server는 어떤 동작을 취하게 되고 어떻게 client 에게 데이터를 보내주는지 궁금했었다. 아래 방법은 어느 정도 보편화 되있는 방법이다. 하지만 나는 WAS 개발자가 아니라 더 좋은 방법이 있을 수 도 있다. client 개발자에게 어느정도 도움이 될 것으로 생각된다. 쉽게 생각하고 아래를 보자. 

 1. client 에서 url 주소로 server 에 parameter 값을 보낸다. 

2. server는 는 client 에서 받은 parameter로 DB를 쿼리하여 data를 얻는다.

 3. server 는 얻은 데이터를 xml, json 타입으로 만들어 out.print 한다. 

 4. client 는 out.print 된 정보를 가져온다.

 5. client 는 json,xml 방식으로 받은 값으로 요구에 맞게 UI를 만들어 준다. 


 이해가 잘 되지 않았다면 소스 코드를 보자 


 우선 1번 (Android 에서 사용한 방법이다.)

HttpClient client = new DefaultHttpClient();

String url = "http://서버아이피/TestJSONvsXML/JsonSearchResult2.jsp";
   
   HttpPost httpPost = new HttpPost(url);
   List list = new ArrayList();
   list.add(new BasicNameValuePair("search_key", "writer"));
   list.add(new BasicNameValuePair("search_value", "김태훈"));
   UrlEncodedFormEntity ent = new UrlEncodedFormEntity(list, "euc-kr");
   httpPost.setEntity(ent);
   HttpResponse response = client.execute(httpPost);
2번 . (JSP 에서 처리과정)
String search_key = request.getParameter("search_key");
String search_value = request.getParameter("search_value");

client 에서 보낸 key받을 통해 value 값을 얻는다. 그 값을 query를 진행 

 3번. json 타입을 만들어 주는 서버의 모습.

private JSONArray jsonArray;;

ArrayList itemObjectList= new ArrayList();  

while(rs.next()){  
    JSONObject jsonObject = new JSONObject();
    jsonObject.put("id", rs.getString("id"));
    jsonObject.put("title", rs.getString("title"));
    jsonObject.put("content", rs.getString("content"));
    jsonObject.put("writer", rs.getString("writer"));
    jsonObject.put("date", rs.getString("date"));
    itemObjectList.add(jsonObject);

}

jsonArray = JSONArray.fromObject(itemList);

out.print(jsonArray);   //jsp 페이지에 그냥 뿌려준다.

4. 1번에서 이어지는 코드이다. (Android)

HttpResponse response = client.execute(httpPost);  //1번에서 server에 보낸고 응답을 받는다.
HttpEntity reEntity = response.getEntity();

InputStream in =  reEntity.getContent();

 BufferedReader br = new BufferedReader(new InputStreamReader(in , "EUC-KR"));

 int bufferSize = 1024*1024;
      char readBuf [] = new char[bufferSize];
      int resultSize = 0;
      
      StringBuilder sb = new StringBuilder();
      while((resultSize = br.read(readBuf))!= -1){
       if(resultSize == bufferSize){
        sb.append(readBuf);
       }else{
        for(int i = 0; i < resultSize; i++){
         sb.append(readBuf[i]);
        }
       }
      }

5번. Android 에서 에서 JSON 데이터 파싱하기

String str = sb.toString();
      JSONArray jsonArray = new JSONArray(str);
      String[] array = new String[jsonArray.length()];
      for(int i =0; i< jsonArray.length(); i++) {
       StringBuilder sb2 = new StringBuilder();
       sb2.append(jsonArray.getJSONObject(i).getString("id").toString());

      }


Posted by hoonihoon