자바를 처음 시작한다는 가정하에 사소한 것부터 하나하나 짚고 넘어가며 따라하기 쉽도록
예제를 중심으로 모든 설명이 사용자의 관점에서 자세하게 기술되어 있는것이 특징입니다.
"강이"의 자바 강좌는 본 블로그(alecture.blogspot.com)와 제휴를 통해
독점적으로 공급될 예정이며 내용의 수정은 공급자의 제한으로 불가하고
사이트 출처를 밝히는데 한해 어디서나 자유롭게 쓸수있도록 합의하였음을 알립니다.
2011년 6월 6일 월요일
URL을 이용해 페이지 소스 보기
예제와 함께 간략하게 웹상에서 관련페이지의 소스를 읽어들이는 방법을 자바 테크놀로지(?)를 통해 살펴보겠다. 예제는 본 강이의 자바강좌를 볼수 있는 블로그 주소인 http://alecture.blogspot.com의 소스를 직접 읽어들이는 예제이다. 즉 여러분이 웹브라우저상의 메뉴에 있는 페이지 소스 보기와 같은 결과를 얻을수 있다.
예제를 보면 아주 심플하지만 내용은 심오(?)하다. 일단 openStream( ) 메소드를 이용하기 위해 URL 클래스의 생성자를 주소와 함께 만들고 그 내용을 BufferedReader를 통해 읽어들이는데 예전 강좌를 공부했으니 알겠지만 InputStreamReader를 그전에 읽어들인다.
openStream( ) 메소드는 URL을 읽어들이기 위해 사용하고 리턴값은 InputStream 형태로 돌려주어 InputStreamReader에서 관련값을 무리없이 쓰고있다. openStream( ) 메소드는 openConnection( ).getInputStream( )의 기능을 함축하고 있는데 간단히 설명하자면 URL의 내용을 보기 위해서는 관련 URL에 접근해서 읽어내야하므로 이렇게 메소드를 이용해 몇단계를 거쳐서 소스를 읽어낼수 있는 것이다. 그 다음이야 별로 어려울 것이 없겠지만 while 구문은 소스를 한라인씩 읽어들이면서 내용이 끝날때까지 계속적으로 반복하면서 출력하고 마지막에 읽어들인 버퍼를 닫아준다.
방금 위에서 언급한 접속문구를 이용해서 같은 결과를 도출할 수 있는데 URLconnection 클래스를 이용하면 가능하다. 결과는 똑같지만 여러분이 자바 소스를 이해하거나 활용하는 측면에서는 아래의 예제가 도움이 더 많이 될것이니 이렇게도 쓸수 있다는 것을 알아두기 바란다.
예제를 이용해서 다른 웹사이트 주소를 입력하고 실행하면서 페이지 소스 보기 기능이 자바를 이용해 어떻게 구현되고 있는지 살펴보기 바란다. 자바 입출력(I/O) 부분에서 빠지지 않고 등장하는 것이 버퍼와 스트림에 관련된 구문인데 예제에도 쓰였지만 잘 받아들여지지 않는다면 예전 강좌 초반에 설명한 입출력 관련 강좌를 다시한번 복습하고 오기 바란다. 네트워크 프로그래밍에서 서버와 클라이언트간의 커뮤니케이션은 필수이기 때문에 앞으로 계속해서 여러분을 괴롭힐지도 모른다.^^
2011년 6월 5일 일요일
URL을 이용한 구문분석
자바의 네트워크 프로그래밍에 대한 첫단추로 URL을 공부해보기로 하자. URL(Uniform Resource Locator)은 인터넷에서 자원(Resource)을 말하는데 여기서 말하는 자원이란 인터넷 프로토콜에 따라서 다를수 있겠지만 우리가 일반적으로 웹브라우저에서 사용하는 http의 경우 html 웹페이지나 이미지 파일 혹은 자바 애플릿 같은 http가 지원하는 관련 파일들을 말하는데 URL은 이런 자원들이 접근하는데 필요한 프로토콜의 이름이나 도메인 이름 혹은 우리가 파일을 저장한 경로명등으로 구성이 된다. 지금 필자가 말하고 있는 프로토콜 같은 용어들이 생소하다면 저번 강좌를 뒤적거려 찾아보기 바란다. 필자의 리바이벌(?) 강의는 없다. ㅎㅎ
http://alecture.blogspot.com/java
여기서는 alecture.blogspot.com이라는 서버 컴퓨터의 http 응용 프로그램인 웹브라우저로 읽을수 있는 페이지를 나타낸다. /java는 그 컴퓨터의 디렉토리를 말한다. 여러분이 일반적으로 사용하고 있는 윈도우즈의 디렉토리 주소창이랑 별반 다를바 없을 것이니 금방 이해가 되리라 본다.
http://alecture.blogspot.com/kangi.jpg
필자의 멋진(?) 사진을 웹페이지에 저장하고 사용자들 즉 여러분의 웹브라우저에서도 볼수 있게 URL을 적을수 있다.
http://alecture.blogspot.com/javaboard.cgi?db=superboard
게시판 cgi의 URL은 위와 비슷한 주소를 가질 것이다.
ftp://alecture.blogspot.com/network.class
ftp 프로토콜을 이용해서 network.class란 파일을 다운로드 하기위해 URL을 적으면 위와 같을 것이다.
URL과 인터넷주소의 의미자체가 애매모호한 측면이 있지만 위에서 보듯이 URL이 보다 이런 여러형태의 프로토콜과 쓰는 표현방식을 포괄적으로 의미하는거라 생각하면 될것이다. 자 이제 서론은 이 정도로 하고 이런 URL을 자바에서 어떤 식으로 이용하는지 살펴보겠다. 단순하게 요약하자면 java.net 패키지에 있는 URL 클래스를 자알~ 이용하면 된다.^^
protocol = http
authority = alecture.blogspot.com:3890
host = alecture.blogspot.com
port = 3890
port(default) = 80
path = /book/edition/main.html
query = name=network
filename = /book/edition/main.html?name=network
address1 = http://alecture.blogspot.com:3890/book/edition/main.html?name=network#JAVA
address2 = http://alecture.blogspot.com:3890/book/edition/main.html?name=network#JAVA
user = null
hash(aURL) = 1494879235
==========강이의 자바강좌==========
protocol = http
authority = alecture@blogspot.com
host = blogspot.com
port = -1
port(default) = 80
path =
query = null
filename =
address1 = http://alecture@blogspot.com
address2 = http://alecture@blogspot.com
user = alecture
hash(bURL) = 1252959383
위의 예제는 URL 클래스를 이용하여 관련값을 뽑아본 것인데 그냥 예제를 보면 필자의 설명없이도 저절로 알게 될 것이다. 내용이 길어보이지만 단순히 기능들을 출력한 것에 지나지 않으니 길다고 그냥 넘겨버리는 게이른 이(?)가 없길 바란다. URL 클래스를 라이브러리에서 찾아봤으면 알겠지만 호스트나 포트값을 생성자를 통해 값을 얻어낼수도 있지만 URL 클래스에 있는 get 메소드들을 적절하게 이용하면 아주 간편하게 예제처럼 원하는 값을 얻어낼수 있다. 저번 시간 강좌를 보면 알겠지만 http는 포트가 80번에 예약이 되어 있다. 따라서 기본값이 자동으로 80이 출력되는 것이다. 만약 주소를 http 대신에 ftp로 고친다면 어떻게 될까? 답은 저번 강좌에 이미 설명하였지만 직접 고쳐서 실행해보기 바란다. 그 밖에는 특별히 설명할 건덕지가 없어보이니 예제를 응용하면서 URL 클래스와 더욱더 친해지는 시간(?)을 갖기 바란다.^^
피드 구독하기:
글 (Atom)



