현재 client 와 server 간의 data 송/수신에 대해 알아 보고 있다. 예전부터 궁금했던 것은 client 에서 server 에 요청을 하면 server는 어떤 동작을 취하게 되고 어떻게 client 에게 데이터를 보내주는지 궁금했었다.
아래 방법은 어느 정도 보편화 되있는 방법이다. 하지만 나는 WAS 개발자가 아니라 더 좋은 방법이 있을 수 도 있다. client 개발자에게 어느정도 도움이 될 것으로 생각된다. 쉽게 생각하고 아래를 보자.
client 에서 보낸 key받을 통해 value 값을 얻는다. 그 값을 query를 진행
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");
3번. json 타입을 만들어 주는 서버의 모습.
private JSONArray jsonArray;; ArrayListitemObjectList= 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()); }
'2019년 이전 정리 > Server' 카테고리의 다른 글
Tomcat 에러 java.lang.UnsupportedClassVersionError (0) | 2013.12.16 |
---|---|
클러스터링 환경 (0) | 2013.12.14 |
세션(session) 시간 설정 (0) | 2013.12.02 |
쿠키(Cookie) 와 세션(Session) 개념 (1) | 2013.12.02 |
Tomcat server 설치 (Eclipse 포함) (0) | 2012.11.30 |