개인참고자료/자바(네트워크)

URL - URL 주소 분석

경진 2008. 7. 19. 18:44
 URL

URL은 Uniform Resource Location의 머리 글자로 인터넷에서 접근 가능한 자원의 주소를 일관되게 표현할 수 있는 형식을 말한다. 여기서 말하는 자원의 형태는 인터넷 응용 프로토콜에 따라 다를 수 있는데, 월드와이드웹 프로토콜인 HTTP를 사용하는 경우의 자원에는 HTML, 페이지, 이미지 파일, CGI나 자바 애플릿과 같은 프로그램, 기타 HTTP가 지원하는 다른 파일 등이 있다.

URL은 자원에 접근하는데 필요한 프로토콜명, 인터넷에서 특정한 컴퓨터를 식별하기 위한 도메인명, 그리고 컴퓨터 파일의 위치를 계층적으로 나타낸 경로명 등으로 구성된다.

 URL 클래스

URL 클래스의 사용목적

URL 클래스는 URL 주소가 알맞은 형식의 URL 주소인지 검사하거나, URL 주소로부터 사용되는 프로토콜, 서버명, 포트, 파일명, 등을 구할 때 사용된다. 또한 URL 주소로 지정된 파일을 읽어 들일 때도 사용한다.

브라우저의 주소 창에 URL 주소를 입력하면, 해당 URLL 주소에 대한 페이지가 보여지는 것을 경험해 봤을 것이다. 브라우저에 보여지는 정보를 자바 프로그래밍을 이용해서 읽어 와서 파일에 저장하고 싶다면, URL 클래스를 이용해서 간편하게 해결할 수 있다.

웹사이트의 내용을 읽어오는 것은 TCP를 이용한 소켓 프로그래밍으로도 가능하다. 하지만 이 경우에는 HTTP프로토콜을 이해해야 한다는 어려움이 있다. URL 클래스를 이용할 경우에는 HTTP 프로토콜의 동작 원리를 몰라도, URL 주소로 지정한 웹페이지 문서를 쉽게 읽어 올 수 있다.

URL 클래스를 이용한 URL 주소 분석 : URLInfo

import java.net.*;            
           
public class URLInfo {           
    public static void main(String[] args) {       
        if(args.length != 1){   
            System.out.println("사용법 : java WebSpider URL");
            System.exit(1);
        }   
        URL url = null;   
        try {   
            url = new URL(args[0]);
        } catch (MalformedURLException e1) {   
            System.out.println("잘못된 URL 형식입니다.");
            System.out.println(e1);
            System.exit(1);
        }   
           
        System.out.println("프로토콜 : " + url.getProtocol());   
        System.out.println("호스트 이름 : " + url.getHost());   
        System.out.println("포트번호 : " + url.getPort());   
        System.out.println("파일이름 : " + url.getPath());   
        System.out.println("사용자 쿼리 : "+ url.getQuery());   
    } // main       
}           

URL 클래스의 생성자에 외부로부터 전달 받은 URL 주소 문자열을 지정해서 URL 객체를 생성했다. 만약, 사용자가 잘못된 형식의 URL 주소를 인자로 지정했다면 java.net.MalformedURLException이 발생한다.

        URL url = null;   
        try {   
            url = new URL(args[0]);
        } catch (MalformedURLException e1) {   
            System.out.println("잘못된 URL 형식입니다.");
            System.out.println(e1);
            System.exit(1);
        }   

MalformedURLException이 발생하지 않았다면, 사용자가 알맞은 형식의 URL 주소를 입력했다는 것을 의미한다. 알맞은 형식의 URL 주소를 입력했을 경우, 프로토콜 호스트명, 포트번호, 파일명, 사용자 쿼리 등에 대한 정보를 다음과 같은 방법으로 구할 수 있다.

……
        System.out.println("프로토콜 : " + url.getProtocol());   
        System.out.println("호스트 이름 : " + url.getHost());   
        System.out.println("포트번호 : " + url.getPort());   
        System.out.println("파일이름 : " + url.getPath());   
        System.out.println("사용자 쿼리 : "+ url.getQuery());   
……

사용자 쿼리란 URL 주소 문자열중에서 물음표(?) 뒤에 오는 문자열을 말한다. 물음표 뒤에 오는 문자열은 특수한 용도로 사용되는데, 보통 CGI(자바의 경우에는 서블릿이나 JSP)에게 추가적인 정보를 제공할 때 사용된다.