5. URL & URI
Last updated
Last updated
리소스 식별 + 리소스를 찾을 수 있는(획득의 목적) 네트워크 상의 위치도 제공하는 URI의 일종(URI는 위치 안알려줌)
프로토콜://사용자정보@호스트:포트/경로?쿼리#fragment
사용자 정보: 해당 서버에 로그인이 필요한 경우 제공되는 로그인 정보 (사용자 이름, 패스워드)-안씀
프로토콜 : (=URI스킴) file, ftp, http, https, magnet, telnet 등
[ 사용자 정보 + 호스트 + 포트 ] ⇒ ‘기관’ 으로 칭함
쿼리 문자열(query string) : form data를 포함하고 있는 http URI에서만 사용됨
fragment : 리소스의 특정 부분을 참고하는데에 사용됨.
상대 URL
부모 문서의 정보를 상속받아 사용하는 완전하지 않은 형식의 URL을 상대적 URL이라고 함.
장점 : 길이가 짧음, 다양한 프로토콜에 대해 서비스 제공이 가능, 내부링크 주소에 대한 변경없이 사이트 이동 가능
URL 클래스 (java.net.URL)
URL을 추상화하였으며 서비클래싱 할 수 없는 final 클래스임.
다른 종류의 URL 인스턴스를 성정하기 위해 상속보다는 전략 디자인 패턴(Strategy Design Pattern)을 사용함
불변(immutable) 클래스로 객체의 필드를 변경할 수 없음.
스레드 환경에서 안전하게 사용 가능.
URL 생성하기
상대적인 URL 생성
URL u2 = new URL(u1, rednote.html);
URL 객체를 생성하는 다른 방법들
URL에서 데이터 가져오기
URL 클래스에서는 URL로부터 데이터를 가져오기 위한 몇몇 메서드를 제공함
URL비교하기
두개의 URL이 같은 호스트, 포트, 경로, 부위를 가리키고 있다면 둘은 같다고 여겨도 무방 → URL클래스의 equals()와 hashCode() 메서드는 비슷하게 동작한다고 여김.
URL 변환하기
인스턴스를 다른 형식으로 변환하는 toString(), toExternalForm(), toURI() 메서드 제공
toExternalForm() 메서드를 더 많이 사용함.
URL을 일반화(generalization)시킨 것이며 URL뿐만 아니라 URN(Uniform Resource Name)도 함께 포함함. (대부분의 URI는 URL)
URI의 생성자 매개변수는 모두 String. 즉 URI 객체는 문자열로부터 만들어짐
URI 레퍼런스는 세 부분으로 구성됨 (1. scheme이 생략되면 상대적 URI)
스킴(scheme)
스킴에 따라 다른 부분(scheme-specific-part)
부위 지정자(fragment)
상대 URI 변환하기
URI 클래스는 상대적인 URI와 절대적인 URI를 서로 변환하기 위해 세개의 메서드를 제공한다.
URI 비교하기
URI 클래스의 hashCode(), equals() 메서드는 같은 역할을 한다. 동일한 URI는 동일한 해시코드(hashcode)값을 가지며 동일하지 않은 URI가 동일한 해시코드 값을 가질 가능성은 거의 없다.
URI 클래스는 Comparable 인터페이스를 구현하기 때문에 URI 객체를 정렬하는 것이 가능하다.
URI 문자열로 표현하기
toString() : 인코딩되지 않은 문자열을 반환(사람이 읽기 쉬운 형태)
toASCIIString() : 인코딩된 문자열을 반환(항상 구문 규칙에 맞는 URI를 반환)
x-www-form-urlencoded (URL 인코딩)
운영체제 사이의 차이점은 URL을 사용하는데에 문제를 일으켰음.(대부분 파일이름에 # 기호가 허용되지만 URL에서 #은 파일이름의 끝과 fragment 시작점을 표시함)
URL 클래스는 자동으로 인코딩/디코딩을 하지 않음
JAVA에서는 URLEncoder , URLDecode 클래스를 제공함
URLEncoder / URLDecoder 클래스
URLEncoder.encode() :
문자열을 인코딩하기 위해 인코딩할 문자열과 문자 집합을 호출하며 전달한다.
URLEncoder.encode() 메서드는 슬래시(/), 앰퍼샌드(&), 등호(=), 콜론(:) 등의 문자도 모두 인코딩함. 따라서 URL과 쿼리 문자열 사이에 사용된 /, = 도 인코딩하기 때문에 부분으로 나눠서 인코딩해야한다.
URLDecoder.decode() :
정적 decode() 메서드를 제공한다.
호스트 : 리소스를 제공하는 서버의 이름 ( , 같은 hostname or IP주소)
문자열을 통해 (URL) 생성: new URL(”);
URL 구성요소를 통해 생성: new URL(”http”, “”, “/bluenote.html#intro);
URL u1 = new URL(”);