- 참고 사이트 내용을 요약했습니다. 자세한 내용, 설명과 코드는 아래 사이트를 참고하세요.
URL로부터 데이터 읽기
URL과 URLConnection을 이용한 데이터 전송
-
URLConnection 클래스 : HTTP 프로토콜 기반의 소켓 통신 기능 제공
-
URLConnection 타입을 갖는 인스턴스는 java.net.URL 클래스의 openConnection() 메소드를 통해서 구할 수 있다.
-
java.net.URL 클래스
- URL로 확인 할 수 있는 것들
- FTP, HTTP 프로토콜을 포함하여 대부분의 URL을 표현할 수 있도록 해 주고 있다.

-
URL 클래스의 openConnection()을 호출
- 프로토콜에 따라 URLConnection을 상속한 알맞은 하위 클래스의 인스턴스 반환
- HTTP 프로토콜에 대해 openConnection() 호출시 : java.net.HttpURLConnection 클래스의 인스턴스를 리턴
- URLConnection.getInputStream() : URL이 나타내는 사이트로부터 데이터를 읽어 온다.
- Reader를 통해 읽는다 : InputStream을 사용할 경우 바이트 단위로 데이터를 읽어오기 때문에 한글과 같이 아스키 코드 이외에 글자들이 깨지기 때문이다.
@Test
void test_1() throws IOException {
URL url = new URL("http://www.disney.co.kr");
URLConnection conn = url.openConnection();
InputStream is = conn.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
char[] buff = new char[512];
int len = -1;
while( (len = br.read(buff)) != -1) {
System.out.print(new String(buff, 0, len));
}
br.close();
}
- URL의 openStream() 내용과 일치한다.

서버에 데이터 전송하기
웹 기반의 데이터 교환
- 상대방의 웹 사이트에 있는 JSP/PHP/ASP/CGI와 같은 웹 프로그램에 데이터를 전송할 수 있어야 한다.
HTTP 프로토콜 통한 데이터를 전송
- GET 방식은 URL을 통해서 서버에 전달
- POST 방식의 경우는 스트림을 통해서 서버에 전달
- 자바의 서블릿이나 JSP : HttpServletRequest의 getParameter() 통해 클라이언트가 전송한 데이터를 읽어올 수 있다.
GET 방식과 POST 방식의 차이점에 맞춰 서버에 데이터를 전송하는 클래스 역시 각각의 방식을 알맞게 구현
GET 방식으로 데이터 전송하기
- 각각의 파라미터는 앰퍼샌드 기호(&)를 통해서 분리되며, 각 파라미터의 값은 인코딩된 상태이어야 한다. 파라미터 값의 인코딩은 java.net.URLEncoder 클래스의 static 메소드인 encode() 메소드를 통해서 처리할 수 있다.
- URLEncoder.encode()
- java.util.Properties를 파라미터로 받는다.
- URLConnection.setUseCaches( false )
- 캐시에 저장된 결과가 아닌 동적으로 그 순간에 생성된 결과를 읽어올 수 있게 된다.
- 캐시로부터 값을 읽어오지 않는 이유는 파라미터를 전송하는 경우 대부분 웹 페이지의 결과가 그 순간 순간 파라미터의 값에 따라 달라지기 때문이다.
POST 방식으로 데이터 전송하기
- 스트림을 통해서 파라미터를 전송해야 하기 때문에 URLConnection으로부터 OutputStream을 구해야 한다.
- connection.setDoOutput(true);
- URLConnection의 출력 스트림을 사용할지의 여부
- connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
- 웹 서버는 POST 방식의 데이터가 인코딩된 데이터라는 것을 알 수 있게 된다.
- new DataOutputStream(connection.getOutputStream());
- URLConnection.getOutputStream() : 출력 스트림에 파라미터를 인코딩한 문자열을 전송
- DataOutputStream : 데이터를 전송
웹 기반의 통신 기능을 제공하는 HttpMessage 클래스
캡슐화한 HTTPMessage 클래스
- HttpMessage 객체를 생성하여 InputStream을 구할 수 있게 된다.
- sendPostMessage(Properties)나 sendGetMessage(Properties)
- 전송할 파라미터가 없는 경우에는 sendPostMessage()와 sendGetMessage()
- HttpMessage 클래스를 사용할 때의 주의점
- 한글 문제는 자바에서 사용하는 유니코드와 각 규약에 정의되어 있는 내용을 이해하지 못한 되서 비롯되는 경우가 많으며 올바르게 캐릭터셋에 대한 내용을 이해하고 있다면 매우 간단하게 해결할 수 있는 부분이다.
- 서블릿/JSP 규약에 따라 사용자의 요청 데이터는 자동적으로 iso-8859-1 캐릭터 셋으로 읽허진다. - 깨진 글자로 전달
- request.getParameter() 메소드를 사용하여 읽어온 값의 캐릭터 셋을 변환