반응형
다른 시스템에 접근하거나 결과값을 받아와 후처리를 해야 할경우, java.io.net 페키지에있는 URL 을 사용해도 좋으나,
오픈소스인 Apache HttpClient를 사용하여 구현해 보았다.
(Spring Framework 을사용중이라면 RestTemplate(http://blog.springsource.org/2009/03/27/rest-in-spring-3-resttemplate/) 을 사용할수도 있다.)
URIBuilder.java source google github -
Apache Software Foundation -
3. http://hc.apache.org/httpcomponents-client-ga/tutorial/pdf/httpclient-tutorial.pdf
사용자 블로그
Method Type
HttpGet : 데이터 조회
HttpHead : 조회하고자 하는 데이터의 메타데이터나 인증정보, 혹은 세션값 확인
HttpPost : 새로운 메타데이 수정 및 등록
HttpPut : 새로운 데이터 생성시
HttpDelete : 데이터 삭제시
사용방법
pom.xml library 등록
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.1</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.0.3</version>
</dependency>
JavaCode
1. PostCall Sample
public boolean externalPostURLCall(String url , Map<Object,Object> parameters) throws Exception {
HttpClient client = new DefaultHttpClient();
try {
if (parameters == null ) {
parameters = parameterMap ;
}
HttpPost httpPost = new HttpPost(url);
List<NameValuePair> paramList = super .parameterGenerator(parameters);
//케릭터셋 인코딩 처리
httpPost.setEntity( new UrlEncodedFormEntity(paramList, charset ));
httpPost.addHeader( "Connection" , "close" );
try {
//ResponseHandler<String> responseHandler = new BasicResponseHandler();
//String responseBodyStr = client.execute(httpPost ,responseHandler);
//System.out.println(responseBodyStr);
HttpContext localContext = new BasicHttpContext();
super .response = client.execute(httpPost);
} catch (HttpHostConnectException e) {
super .urlCall = false;
System. out .println( super. response);
//서버가 동장되지 않는경우에도 재호출??
//throw new HttpClientError("");
}
System. out .println("getStatusCode :: " + super .response .getStatusLine().getStatusCode());
if (super .response .getStatusLine().getStatusCode() != 200) {
super .urlCall = false;
//실패시 3초간격으로 3번간 재호출 한다.
while (DEFAULT_CONNECTION_COUNT > RECONNECT_COUNT ) {
RECONNECT_COUNT ++;
try {
Thread. sleep(3000);
System. out .println("========================method call is externalPostURLCall======================== \n\n\n");
System. out .println("ExternalURLCallUtils.java parameters : " + parameters.toString());
System. out .println("ExternalURLCallUtils.java setCharset : " + charset );
System. out .println("urlCall :: " + super .urlCall );
super .urlCall = externalPostURLCall(url, parameters);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} else {
super .urlCall = true;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
client.getConnectionManager().closeExpiredConnections();
}
return super .urlCall ;
}
2. parameter를 전송하기위한 NameValue List method
/**
* 파라미터전송을 위한 NameValuePair List 제너레이터
* POST, PUT, DELETE method 에 사용된다.
* @param parameters
* @return
*/
public List<NameValuePair> parameterGenerator(Map<Object,Object> parameters) throws Exception {
List<org.apache.http.NameValuePair> paramList = new ArrayList<org.apache.http.NameValuePair>();
for (@SuppressWarnings ( "unused") Entry<Object, Object> entry : parameters.entrySet()) {
paramList.add( new BasicNameValuePair((String)entry.getKey(), (String) entry.getValue()));
}
return paramList;
}
3. 응답받은 response의 Entity Contents 확인하기.
- response된 결과를 BufferReader를 이용하여, 페이지를 읽어 확인한다. 확인 전 Status 코드를 확인해도 된다.
- org.apache.http.util.EntityUtils. toString(response.getEntity()); 와 같이 사용하여도 된다. (BufferReader가 텍스트 읽을땐 제일 빠르다고 하니,, 여기선 BufferedReader를 구현해서 사용.)
/**
* 호출된 URL의 Contents 를 String 으로 Return
* @param response
* @return
* @throws Exception
*/
public String responseEntityStr(HttpResponse response) throws Exception {
HttpEntity entity = response.getEntity();
InputStream is = entity.getContent();
StringBuilder sb = new StringBuilder();
try {
/** convert response to string */
BufferedReader reader = new BufferedReader( new InputStreamReader(is/*, " iso-8859-1"*/ ), 8);
String line = null ;
while ((line = reader.readLine()) != null) {
sb.append(line).append( "\n" );
}
} catch (IOException e) {
e.printStackTrace();
} finally {
is.close();
}
return sb.toString();
}
Abstract Class와 implement Class는 첨부파일을 확인하세요.
Get Method 를 만들어 호출 할경우에는 ___________.do?parameter 을 보내면된다.
생성할때는 URIBuilder를 사용하면 좀더 편하게 사용할수 있다.
반응형
'JAVA' 카테고리의 다른 글
JAVA custom listener (0) | 2015.01.15 |
---|---|
search Engine - sphinx (0) | 2013.05.21 |
Resfull 종류 (0) | 2013.05.03 |
eclipse maven war (0) | 2012.07.24 |
Http Session (0) | 2011.08.29 |