● URL(Uniform Resource Locator)
- URL은 도메인 네임을 사용해 컴퓨터에 있는 문서로 접근할때 사용하는 것
- 도메인 네임이란 인터넷을 쉽게 사용할수 있도록 IP번호에 이름 부여한 것.
- 인터넷에 있는 정보의 위치를 표기하기 위한 표준적 방법
● URL의 사용 형식
- URL의 형식에는 프로토콜, 인터넷 주소, 포트 번호, 파일 경로 등이 사용된다.
- 프로토콜://인터넷 주소[:포트번호][/디렉토리 이름[/파일 이름]]
● URL의 기본 특징
- 프로토콜과 인터넷 주소는 대.소문자 구별하지 않는다
- 디렉토리 이름과 파일 이름은 대.소문자 구별한다
- URL 사용 형식에서 대괄호([]) 부분은 생략 가능
- 포트번호 생략시(Well-known port) 번호 사용
- 파일 경로 생략시 기본 파일인 index.html 파일 요청
● URL의 사용 예시
- 웹
프로토콜 : http
기본 포트번호 : 80
http://www.naver.com
- Telnet
프로토콜 : telnet
기본 포트번호 : 23
telnet://chollian.net
- FTP
프로토콜 : ftp
기본 포트번호 : 21
ftp://ftp.netscape.com
- Gopher
프로토콜 : gopher
기본 포트번호 : 70
gopher://gopher.kornet.net
● URL 클래스
- Java내 URL 처리하고 싶을때 URL 클래스를 사용한다.
● URL 클래스의 생성자의 구성
- URL(String protocol, String host, int port, String file)
- URL(String protocol, String host, String file)
- URL(String urlString)
▶ protocol : 프로토콜(ex: http://)
▶ host : 컴퓨터 이름(ex: www.naver.com)
▶ port : 포트 번호(ex: 80)
▶ file : URL에 존재하는 파일 이름
▶ urlString ; 모든 요소를 모팜한 문자열
● URL 클래스의 메서드의 구성
- String getFile()
- URL 파일 이름 return
- String getHost()
- URL 호스트 이름 return
- String getPort()
- URL 포트 이름 return
- String getProtocol()
- URL 프로토콜 이름 return
- String toExternalForm()
- 전체 URL 문자열 return
- URLConnection openConnection()
- URL 연결 후, URLConnection 객체 return
- InputStream openStream()
- URL 정보 읽기 위한 InputStream 객체 return
※ URL에 자세한 정보는 URLConnection 클래스 사용하면 된다.
- 사용시, URL 지정된 페이지의 내용을 자신의 컴퓨터에 저장 가능.
● URLConnection클래스의 메서드의 구성
- int getContentLength()
- 문서 길이 return
- String getContentType()
- 문서 타입 return
- long getDate()
- 문서 생성일 return
- long getExpiration()
- 문서 제거일 return
- long getLastModified()
- 문서 마지막 수정 날짜 return
- InputStream getInputStream()
- 문서 읽기 위한 InputStream 객체 return
● URL 클래스의 메서드를 통한 간단한 예제 1.
- URL 정보 분석하는 예제
import java.io.*;
import java.net.*;
public static void main(String[] args) throws Exception{
String url_str = null;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.print("URL page 입력 >> ");
url_str = br.readLine().trim();
System.out.println(url_str);
URL url = new URL(url_str);
System.out.println("프로토콜 : "+url.getProtocol());
System.out.println("포트번호 : "+url.getPort());
System.out.println("호스트 : "+url.getHost());
System.out.println("URL 내용 : "+url.getContent());
System.out.println("파일경로 : "+url.getFile());
System.out.println("URL 전체 : "+url.toExternalForm());
}
- 사용자로부터 URL 정보를 입력받는다.(문자열의 좌우 여백 공간 제거(trim으로 인해)
- ex) String temp = " trim ";
String temp_trim = temp.trim();
name_trim의 저장된 내용은 "trim" 이 저장된다
- URL(String urlString) 생성자를 이용하여 URL 객체를 생성한다.
- 결과화면
● URLConnection 클래스의 메서드를 통한 간단한 예제 1.
- 웹 사이트 문서를 컴퓨터로 가지고오는(문서 정보 출력) 예제
public static void main(String[] args) throws Exception {
String url_string = null;
int size = 0;
int ch;
URL url = null;
URLConnection url_read=null;
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Input the Web site : ");
url_string = reader.readLine().trim();
url = new URL(url_string);
url_read = url.openConnection();
size = url_read.getContentLength();
System.out.println("문서 타입 : "+url_read.getContentType());
System.out.println("수정 일자 : "+url_read.getLastModified());
System.out.println("문서 크기 : "+size+"byte");
if(size > 0){
InputStream is = url_read.getInputStream();
while((ch=is.read())!=-1){
System.out.print((char)ch+" ");
}
is.close();
}
}
- reader.readLine().trim()은 해당 입력 문자열의 좌우 공백을 없애주고 나머지를 반환한다는 뜻이다.
- 간단한 예제를 보자
String url_string = null;
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Input char : ");
url_string = reader.readLine().trim();
System.out.println(url_string);
- 결과화면
- 입력은 문자열 맨앞 맨뒤 공백이 존재. 출력은 공백 제거.
- getContentLength()는 URLConnection 메서드로서, 전체크기 return
- Byte 단위
- InputStream is = url_read.getInputStream() 는 is 객체를 url_read의 메서드를 통해 지정하여 url_read의 데이터값을 읽어오는 역할을 한다.
- url = new URL(url_string)는 URL(String urlString)의 생성자를 바탕으로 url_string이 올바르지 않다면 에러가 발생한다. 그로인해 예외처리를 해줘야 하는데 throws Exception 통해 예외처리를 한다는 것을 알수 있다.
- 결과화면
● URLConnection 클래스의 메서드를 통한 간단한 예제 2.
- 위의 예제 속도를 개선 하는 예제
- 위의 예제는 속도가 느릴수 밖에 없다. 이유는 InputStream의 read() 메서드를 통해 한글자씩 읽어와 출력하기때문이다. 개선해보자.
InputStream is = url_read.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is);
String temp = null;
while((temp=br.readLine())!=null){
System.out.print(temp+" ");
}
br.close()?;
- 위의 동일한 코드에서 해당하는 부분만 일부 수정한 부분이다.
- BufferedReader를 통해 한글자씩 읽고 출력하는 것이 아닌 한 라인을 읽고 출력하는 것으로 바꾼것을 알수 있다.
- br.close() -> InputStream 을 닫아주는 것이 아닌 BufferedReader를 닫아줌으로써 둘다 닫는 역할을 한다.
- 결과 화면은 위와 동일하다.