개발자의 오르막
SW 심화과정 21일차 본문
# HttpClient 통신
- Test126.jsp 파일
- Test126.java
package main;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
public class Test126 {
public static void main(String[] args) throws Exception{
/*
* java.net.URL은 이것 자체가 작은 웹브라우저의 역할을 한다.
* 요청을 날리고 그에 해당하는 응답을 받아들인다.
* 안드로이드 앱에서 버튼을 누르면 오늘의 배송정보가 넘어오는?
* 서버에 존재하는 배송정보를 다운받는 역할을 수행한다.
*
* 소캣으로 다 짜는 것이 아니라 http 프로토콜로 서버와 통신할 때는
* 이 클래스를 주로 이용한다.
*
* 앱같은 경우에서 서버로부터 많은 데이터를 다운받아야
* 할 경우에는 URL 클래스를 이용하여
* JSP 파일로부터 정보를 다운받는다.
*
* 이게 워낙 많이 쓰이다보니까 오픈소스 라이브러리가 등장
* 아파치 Http client 프로젝트 (안드로이드 http 기반 표준 통신수단)
*
* 구글에서 httpclient-4.4.jar 을 다운로드
*/
URL rl = new URL("http://192.168.2.71:8081/study3/Test126.jsp?pw=1234");
URLConnection ucon = rl.openConnection();
InputStream in = ucon.getInputStream();
// 아답터 역할하는 애
BufferedReader bin = new BufferedReader(
new InputStreamReader(in, "UTF-8"));
String l = null;
while((l = bin.readLine()) != null) {
System.out.println(l);
}
in.close();
}
}
- Test127.java
package main;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
public class Test127 {
public static void main(String[] args) throws Exception{
// CloseableHttpClient : 실제로 요청/응답을 수행하는 핵심
CloseableHttpClient httpClient = HttpClients.createDefault();
// Get 방식 요청에 필요한 정보를 담을 수 있다.
String l = "http://192.168.2.71:8081/study3/Test126.jsp?pw=1234";
HttpGet httpGet = new HttpGet(l);
// 요청정보에 헤더를 조작할 수 있는 ㅕㅇ지를 제공한다.
httpGet.addHeader("User-Agent","Mozila/5.0");
// execute 실제로 요청/응답을 수앻한다. hhtpResponse가 응답한다.
CloseableHttpResponse httpResponse = httpClient.execute(httpGet);
int resCode = httpResponse.getStatusLine().getStatusCode();
System.out.println(resCode);
}
}
- httpClient 는 아파치 재단에서 URL 클래스를 훨씬 좋게 만든 것
- http 프로토콜로 요청/응답을 수행할 수 있다.
- 안드로이드 OS에도 표준탑재되어서 서버에서 정보를 다운받는 용도로 사용한다.- httpClient 는 아파치 재단에서 URL 클래스를 훨씬 좋게 만든 것
- http 프로토콜로 요청/응답을 수행할 수 있다.
- 안드로이드 OS에도 표준탑재되어서 서버에서 정보를 다운받는 용도로 사용한다.
- 우리는 GET 방식으로 사용하는 법을 배웠다.
- 정보를 서버에서 다운받는 것에는 차이가 없다.( GET/POST )
- 클라이언트에서 서버로 대량의 정보를 업로드 할 때는 POST방식을 써야한다.
( 대부분 GET 방식이지만 POST 방식으로 쓰고자 할 때는
위의 코드와 많이 틀려지게 되니까 이점 유의할 것 )
- jar 파일은 lib 폴더에 properties 파일은 src 폴더에 넣는다.
( 그러면 classes 폴더에 자동으로 복사된다.
실제 운영할때는 classes 폴더에 넣으면 된다 )
- webContent 안에 log4j_test.jsp 넣어서 테스트
- log4j.textjsp
commons-loggin.properties
1번 - NoOpLog 비활성화
2번 - Log 활성화
log4j.properties : 로그파일
- 경로안에 로그를 기록할 log.txt 파일을 만들어준다.
- log.txt 파일에 동일한 경로에 tail.exe 를 생성한다.
- cmd 파일에서 확인한다.
- log4j_text.jsp 파일에서 실행하면 cmd 창에서 콘솔창 역할을 한다.
- 개발환경이 달라져 콘솔창에 System.out.println() 함수를 호출하지 못할 때
이 프로그램을 사용한다.
1. commons.logging 을 실행한다.
Log4JLogger : log4j 를 내부적으로 사용하겠다는 설정
Log4JLogger 에 대한 설정이 log4j.properties 가 된다.
log Property에서 출력 형태도 설정할 수 있다.
2. ConversionPattern 에서 로그파일의 형식을 지정할 수있는데
매우 다양한 형식을 지정할 수 있다.
- 단순히 콘솔에 찍어보는 걸 넘어서 내부적인 동작을 고스란히 담아낼 수 있다.
로그파일 분석 툴을 이용하면 사이트 전반의 분석을 가능하게 한다.
- 실전에서는 Util.L(...) 같은거 만들어서 쓰는 경우가 많다.
- 먼저 Util 클래스 안에 아래의 함수를 생성한다.
Test127.jsp
- 위와 같은 Util.l 함수를 활용하면, 어떤 jsp 파일에서도, 로그를 보내
cmd 창에서 활용할 수 있다.
- 이런 로그파일을 활용하면 사용자의 서비스 경로를 로그파일로 관리할 수 있다.
- 이러한 로그파일 DB를 활용하여 분석 및 응용하면 데이터를 가공할 수 있다.
- log.info() 안에 접두어를 넣고, subString 등과 같이 문자열 관리하는 함수를 활용하면
원하는 정보를 뽑아내 DB에 관리할 수 있다.
- ex) 시간 대 별 사용자 방문기록 / 서비스 이동 경로 / etc..
'교육과정 ( SW 개발자 심화과정 ) > Java' 카테고리의 다른 글
SW 심화과정 23일차 (0) | 2019.08.07 |
---|---|
SW 심화과정 22일차 (0) | 2019.08.06 |
SW 심화과정 18일차 (0) | 2019.08.02 |
SW 심화과정 17일차 (0) | 2019.07.31 |
SW 심화과정 16일차 (0) | 2019.07.30 |