1 / 30

자바 네트워크 프로그래밍 (URL,URLEncoder)

자바 네트워크 프로그래밍 (URL,URLEncoder). 프로그래밍 언어 실험실 석사 3 학기 조성대. 목 차. URL 클래스 URLEncoder 클래스 유용한 프로그램들. Java TM 2 Platform S tandard Edition. java.lang.Object. java.applet. java.awt. java.io. ……. java.net. javax.swing. ……. InetAddress. Socket. URL. URLEncoder. ServerSocket. …….

lmathew
Download Presentation

자바 네트워크 프로그래밍 (URL,URLEncoder)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 자바 네트워크 프로그래밍(URL,URLEncoder) 프로그래밍 언어 실험실 석사 3학기 조성대

  2. 목 차 • URL 클래스 • URLEncoder 클래스 • 유용한 프로그램들 PL Lab

  3. JavaTM2Platform StandardEdition java.lang.Object java.applet java.awt java.io …… java.net javax.swing …… InetAddress Socket URL URLEncoder ServerSocket …… PL Lab

  4. java.net의 classes과 interfaces • jdk1.2 기준 PL Lab

  5. java.net.URL의 클래스 PL Lab

  6. + URL 클래스 • java.net.URL • URL (Uniform resource locator)를 추상화 • URL의 구성 • 프로토콜 필드 • 호스트 이름 필드 • 포트 번호 필드 • 경로 필드 • 파일 이름 필드 • 문서의 섹션 필드 • 일반적인 URL의 구성 • http://www.hannam.ac.kr:8080/index.html#ref1 PL Lab

  7. URL 클래스의 생성자 • 생성자 • URL(Stringspec) • URL(Stringprotocol, Stringhost, Stringfile) • URL(Stringprotocol, Stringhost, intport, Stringfile) • URL(Stringprotocol, Stringhost, intport, Stringfile, URLStreamHandlerhandler) • URL(URLcontext, Stringspec) • URL(URLcontext, Stringspec, URLStreamHandlerhandler) • 생성방법 • new URL(…) • 모든 URL 생성자는 MalformedURLException을 발생 • 자바가 지원하지 않는 프로토콜에 대한 URL을 생성하려고 할 경우 발생한다. • HTTP,FTP,news, mailto, gopher, file 지원 PL Lab

  8. URL 클래스의 생성자 • public URL(String url) throws MalformedURLException • 예제 • import java.net.*; public class URLConstructorTest1 { public static void main(String[] args) { URL webURL,ftpURL; try { webURL = new URL(“http://www.macfaq.com/vendor.html”); System.out.println(webURL); ftpURL = new URL(“ftp://ftp.macfaq.com/pub/”); System.out.println(ftpURL); } Catch (MalformedURLException e) { System.err.println(e); }} } • 결과 http://www.macfaq.com/vendor.html java.net.MalformedURLException: ftp//ftp.macfaq.com/pub/:java.lang.Exception PL Lab

  9. URL 클래스의 생성자 • public URL(String protocol, String host, String file) throws MalformedURLException • 포트번호는 –1로 할당하여 기본 값 포트 번호가 사용됨 • file을 나타내는 문자열은 슬래쉬(/)로 시작 • 예제 • try { URL u = new URL(“http”,www.macfaq.com,”/blueribbon.html#intro”); } catch (MalformedURLException e) { System.out.println(e); } PL Lab

  10. URL 클래스의 생성자 • public URL(String protocol, String host, int port, String file) throws MalformedURLException • 기본값 포트 번호가 다를 경우 사용 • 예제 try { URL u = new URL(“http”,”www.eff.org”,80,”/blueribbon.html#intro”); } catch ( MalformedURLException e) { System.err.println(e); } PL Lab

  11. URL 클래스의 생성자 • public URL(URL u, String s) throws MalformedURLException • 상대 URL을 이용하여 절대 URL을 생성할 경우 사용 • 같은 디렉토리 안에 있는 여러 파일을 처리하는 경우 유용 • 예제 • 디렉토리구조 user/public_html/html/examples.html user/public_html/html/vendor.html user/public_html/applet/URLConstructorTest4.class • examples.html <html> <body> <applet code = “.. /applet/URLConstructorTest4.class”> </body> </html> PL Lab

  12. URL 클래스의 생성자 • 예제 • import java.net.*; import java.applet.Applet; public class URLConstructorTest4 extends Applet { public void init() { URL u1, u2; u1 = getDocumentBase(); System.out.println(u1); try { u2 = new URL(u1, “vendor.html”); System.out.println(u2); } Catch (MalformedURLException e) { System.err.println(e); } } } • 결과 • File: user/public_html/html/examples.html File: user/public_html/html/vendor.html PL Lab

  13. URL 조각내기 • URL class의 Methods • Protocol : getProtocol() • Host : getHost() • Port : getPort() • File : getFile() • Ref : getRef() • URLStreamHandler PL Lab

  14. URL class의 Methods • public String getProtocol() • URL의 프로토콜 부분을 String로 반환한다. • public String getHost() • URL의 호스트 이름 부분을 String로 반환한다. • public String getPort() • URL이 지정하고 있는 포트번호를 int로 반환한다. • 포트번호가 명시되지 않으면 –1을 반환 PL Lab

  15. URL class의 Methods • public String getFile() • URL의 경로와 파일 부분을 String로 반환한다. • 호스트이름의 첫 슬래쉬(/)에서 파일내 참조를 알리는 파운드 기호(#)까지의 모든 문자 • 파일이름이 없을 경우 ‘/’를 반환 • public String getRef() • URL의 파일 내 참조 위치를 반환한다. • URL이 파일내 참조위치를 갖고 있지 않을 경우 Null을 반환한다. PL Lab

  16. URL class의 Methods 예제 예제 import java.net.*; public class getURLParts { public static void main(String args[]) { try { URL u = new URL(args[0]); System.out.println( u ); System.out.println( u.getProtocol() ); System.out.println( u.getHost() ); System.out.println( u.getPort() ); System.out.println( u.getFile() ); System.out.println( u.getRef() ); } catch (MalformedURLException e ) { System.out.println( e ); } } } 결과 $ java getURLParts http://www.ncsa.uiuc.edu/demoweb/html-primer.html#A1.3.3 http://www.ncsa.uiuc.edu/demoweb/html-primer.html#A1.3.3 http www.ncsa.uiuc.edu -1 /demoweb/html-primer.html A1.3.3 PL Lab

  17. URL에서 데이터를 가져오기 위한 메소드 • public final InputStream openStream() throws IOException • URL이 가리키고 있는 자원에 연결 • 클라이언트와 서버간의 핸드셰이킹(handshaking) • 데이터를 읽어 들이기 위한 InputStream을 반환 • 파일의 원시 컨텐트를 반환하고 HTML의 헤더나 프로토콜의 정보는 들어 있지 않다. • 예제 URL u = new URL(“http://www.hannam.ac.kr”); DataInputStream theHTML = newDataInputStream(u.openStream()); While ( ( thisLine = theHTML.readLine()) != null ) System.out.println(this.Line); PL Lab

  18. URL에서 데이터를 가져오기 위한 메소드 • public URLConnection openConnection() throws IOException • URL에 소켓을 열고 URLConnection객체를 반환한다. • 네트워크 자원에 대한 연결 • 서버와 직접 통신하기를 원할 때 쓰는 메소드 • 원시형태의 문서와 사용중인 프로토콜의 헤더정보를 볼수 있다. • URLConnection은 10장 참조 • 예제 URL u = new URL(“http://www.hannam.ac.kr”); URLConnection uc = u.openConnection(); PL Lab

  19. URL에서 데이터를 가져오기 위한 메소드 • public final Object getContent() throws IOException • URL에 연결된 데이터를 가져옴. • 특정한 객체의 유형으로 변환하는 특징을 갖는다. • 데이터가 ASCII 또는 HTML이면 InputStream을 반환 • 데이터가 GIF/JPEG 이면 ImageProducer을 반환 • MIME 헤더의 content-type을 사용 • 낯선Content-type을 보내면 ClassNotfoundException을 발생 • 예제 URL u = new URL(“http://www.hannam.ac.kr”); Object o = u.getContent(); URL u = new URL(“http://www.hannam.ac.kr/image/main.gif”); Object o = u.getContent(); PL Lab

  20. URL클래스의 유틸리티 메소드 • public boolean sameFile(URL other) • 두개의 URL이 같은 파일을 가리키고 있는지 조사 • 두 URL의 필드를 조사 • 같은 IP의 주소이고 도메인명이 다를 경우 • 포트번호의 명시의 차이가 날 경우 다른 URL로 취급 • URL객체만 인자로 넘겨질수 있다. • 예제 URL u1 = new URL(“http://www.ncsa.uiuc.edu/HTMLPrimer.html#GS”); URL u2 = new URL(“http://www.ncsa.uiuc.edu/HTMLPrimer.html#HD”); If ( u1.samefile(u2) ) { System.out.println(“the same”); } else { System.out.println(“not the same”); } PL Lab

  21. URL클래스의 객체 메소드 • public boolean equals(Object o) • sameFile()이 갖는 한계를 똑같이 가짐. • 두개의 URL이 같은 파일을 가리키고 있는지 조사 • 두 URL의 필드를 조사 • 같은 IP의 주소이고 도메인명이 다를 경우 • 포트번호의 명시의 차이가 날 경우 다른 URL로 취급 • 어떠한 객체라도 인자로 넘겨질수 있다. • 예제 URL u1 = new URL(“http://sunsite.uiuc.edu/oldnews.html”); URL u2 = new URL(“http://helios.oit.uiuc.edu/oldnews.html”); If ( u1.equals(u2) ) { System.out.println(“the same”); } else { System.out.println(“not the same”); } PL Lab

  22. java.net.URLEncoder 클래스 PL Lab

  23. URLEncoder 클래스 • 로컬운영체제가 다양한 점에 의해 URL에도 문제가 발생 • #,특수문자 비영숫자(non-alphanumeric) • 해결방안으로 URL의 문자를 코드화 • 숫자,밑줄,대소문자가아닌문자는 %와 해당문자의 ASC값에 해당하는 16진수로 표시 • 공백문자는 “+”기호 • “+”기호는 %2b • java.net.URLEncorder클래스의 encode()로 해결 • public static String encode(String s) PL Lab

  24. URLEncoder 클래스의 예제 • 예제 System.out.println(URLEncoder.encode(“This String has spaces”)); System.out.println(URLEncoder.encode(“This*string*has*stars”)); System.out.println(URLEncoder.encode(“This+string+has+plus”)); System.out.println(URLEncoder.encode(“This:string:has:colons”)); System.out.println(URLEncoder.encode(“This.string.has.periods”)); • 결과 This+string+has+spaces This%2astring%2ahas%2astars This%2bstring%2bhas%2bplus This%3astring%3ahas%3acolons This%2estring%2ehas%2eperiods PL Lab

  25. 유용한 프로그램들 • 질의문자열 • 문서저장 • GET 방식으로 CGI프로그램과 통신하기 • URLRequestor PL Lab

  26. 질의문자열 프로그램 • CGI프로그램에 데이터를 보내기 위해 사용 • 질의 문자열은 이름과 값의 쌍으로이루어짐. • 이름과 값은 =를 기준으로 분리 • 두개의 이름과 값의 쌍을 구분하기위해서 &를 사용 • 예제 username=Elliotte+Rusty+Harold&email=elharo%40sunsite%2eedu 첫번째 쌍의 이름: username 첫번째 쌍의 값 : Elliotte+Rusty+Harold 두번째 쌍의 이름: email 두번째 쌍의 값 : elharo@sunsite.edu PL Lab

  27. QueryString 클래스 import java.net.URLEncoder; public class queryString { String query; public queryString(Object name, Object value) { query = URLEncoder.encode(name.toString()) + “=” + URLencoder.encode(value.toString()); } public void add(Object name, Object value) { query += “&” + URLEncoder.encode(name.toString()) + “=” + URLEncoder.encode(value.toString()); } public String toString() { return query; } } PL Lab

  28. QSTest 실행 public QSTest { public static void main(String[] args) { String name1 = “username”; String value1 = “Elliotte Rusty Harold”; String name2 = “email”; String value2 = “elahro@sunsite.edu”; queryString qs_ = new queryString(name1, value1); qs_.add(name2, value2); System.out.println( qs_.toString() ); } } 결과 % java QSTest username=Elliotte+Rusty+Harold&email=elharo%40sunsite%2eedu PL Lab

  29. GET의 방식으로 CGI프로그램과 통신하기 • CGI프로그램에게 질의문자열을 전달하는 프로그램 PL Lab

  30. lycos 프로그램 import java.net.*; import java.io.*; public class lycos { public static void main(String[] args) { String querystring = ""; for ( int i =0; i<args.length; i++ ) querystring += args[i] + " "; querystring = "query=" + URLEncoder.encode(querystring); try { String thisLine; URL u = new URL("http://www.lycos.com/cgi-bin/pursuit?" + querystring); DataInputStream theHTML = new DataInputStream(u.openStream()); while ((thisLine = theHTML.readLine()) != null) System.out.println(thisLine); } catch (Exception e) { System.err.println(e); } }} PL Lab

More Related