7. URLConnection Class
URL Connection Class : URL이 가리키는 리소스에 대해 활성화된 connection을 나타내는 추상 클래스
(특히 HTTP 서버와 통신시) URL Class보다 더 향상된 제어 방법을 제공함
서버가 보낸 header를 확인, 적절한 응답 제공 가능
클라이언트 요청에 사용도니 헤더 필드 설정 가능
다양한 http method 를 사용하여 데이터를 보낼 수 있음
JAVA의 프로토콜 핸들러 매커니즘의 한 부분
URL Connectioin
URLConnection 열기
URLConnection 을 사용하면 아래와 같은 절차를 거친다.
항상 이 절차를 수행해야 하는 것은 아님.
URLConnection 기본 설정을 하면 3단계는 생략 가능
메타정보가 필요하지 않은 경우에도 4단계 생략 가능
응답 데이터가 필요하지 않으면 (받기만 하는 경우) 6번 생략 가능
서버에서 데이터 읽기
URL Connection 객체를 사용해 URL로부터 데이터를 읽기 위한 단계는 아래와 같다
getInputStream() 메서드는 서버가 보낸 데이터를 읽거나 분석할 수 있는 일반적인 InputStream 객체를 반환함.
URLConnection 객체로부터 InputStream을 반환한다. 이렇게 단순한 InputStream을 사용할 때에응 URL Class와 URLConnection Class 사이의 차이점이 명백하게 드러나지 않는다. 하지만 아래와 같은 큰차이점이 있다.
URLConnection 클래스는 HTTP header에 접근할 수 있음
URLConnection 클래스는 서버로 보내는 요청 매개변수를 설정할 수 있음
URLConnection 클래스는 서버로부터 데이터를 읽는 것뿐만 아니라 쓸 수도 있음
헤더 읽기
URLConnection 클래스는 헤더로부터 특정 필드를 가져오는 메서드를 제공한다.
캐시
오랫동안 페이지나 이미지 파일에 대해서 캐시(chche)를 사용해 옴. 사이트의 로고 이미지를 반복해서 사용하는 경우, 한번만 원격의 로고를 읽고 로고를 브라우저의 캐시에 저장한다. 그리고 해당 로고는 캐시로부터 읽는다. Expires와 Cache-control을 포함한 몇몇 HTTP 헤더를 사용하면 캐시를 제어할 수 있다.
HTTPS나 POST 를 통해 접근하면 캐시에 저장되지 않지만 HTTP헤더를 이용해 조절할 수 있다.
cache-control 헤더 확인 방법 :
CacheControl
class 확인JAVA에서 Cache 제어
CacheRequest, CacheResponse abstract Class 를 사용하여 서브클래스를 구현해 캐시를 관리한다.
연결 설정
클라이언트가 서버에 요청을 생성하는 방법을 정의하는 7개의 protected instance 필드를 제공함
서버에 데이터 쓰기
getOutputStream
메서드는 서버에 데이터를 전송하기 위해 쓸 수 있는 OutputStream
을 반환함.
OutputStream
을 구하고 나면 BufferedOutputStream
이나 BufferedWriter
에 연결하여 버퍼 기능을 추가한다. 또한 OutputStream
보다 사용하기 편리한 DataOutputStream
이나 OutputStreamWriter
와 같은 클래스에 연결할 수도 있다.
HttpURLConnection Class
URLConnection 클래스의 추상 서브 클래스이다.
public abstract class HttpURLConnection extends URLConnection
이 클래스는 http URL을 처리할 때 도움이 되는 몇몇 추가적인 메서드를 제공한다.
따라서 HttpURLConnection 의 인스턴스를 직접 만들 수 없음.
하지만 http URL을 사용하는 URL객체를 만든 후 openConnection 메서드로 반환받은 URLConnection 객체는 HttpURLConnection의 인스턴스가 될 수 있다. 반환받은 URLConnection을 HttpURLConnection으로 다음과 같이 캐스팅할 수 있다.
Last updated