12. 컨텐트 핸들러 2000. 6. 9 임정목 국중옥 컴퓨터 네트워크 실험실.

Slides:



Advertisements
Similar presentations
3. 메소드와 변수 SCJP 자격증 프로젝트 발표자 : 최선웅. 1. 메 소 드 개 념 2. 메 소 드 양 식 3. 메 소 드 변 수 4. 메 소 드 예 제 5. 참 고 문 헌 / 자 료 목 차.
Advertisements

프로그램이란 프로그램 생성 과정 프로젝트 생성 프로그램 실행 컴퓨터를 사용하는 이유는 무엇인가 ? – 주어진 문제를 쉽고, 빠르게 해결하기 위해서 사용한다. 컴퓨터를 사용한다는 것은 ? – 컴퓨터에 설치 혹은 저장된 프로그램을 사용하는 것이다. 문제를 해결하기 위한.
컴퓨터와 인터넷.
11장. 프로토콜 핸들러 AI &HC I LAB 김 성 현.
어서와 Java는 처음이지! 제20장 실전프로젝트 #2.
네트워크 프로그래밍 및 실습.
10. 예외 처리.
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
최윤정 Java 프로그래밍 클래스 상속 최윤정
Ch.07-5 xml-rpc 사용하기 김상엽.
Java로 배우는 디자인패턴 입문 Chapter 5. Singleton 단 하나의 인스턴스
10장 예외 Lab 10-1.
Power Java 제2장 자바 개발 도구.
PHP입문 Izayoi 김조흔.
JAVA 언어로 배우는 디자인 패턴 입문 chap. 1-2.
3. 자바에서 지원하는 패키지 자바에서 기본적으로 제공하는 패키지.
7장 배열 ②.
Lesson 5. 레퍼런스 데이터형.
4.1 자바 응용 프로그램 분석 4.2 식별자(identifier)와 예약어 4.3 변수와 자료형
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
4장. 웹로직 서버상에서의 JDBC와 JTA의 운용
31강 JAVA 네트워크 JAVA 네트워크 InetAdress, URLConnection 클래스 Socket의 이해
네트워킹 CHAPTER 13 Section 1 네트워킹의 개요와 java.net 패키지 Section 2 인터넷 주소와 URL
명품 JAVA Programming 제 16 장 네트워크.
Lesson 6. 형변환.
Java 기초 (Java JDK 설치 및 환경설정)
FTP 프로그램 채계화 박재은 박수민.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
자바 5.0 프로그래밍.
모바일 자바 프로그래밍 JDBC / WAP Ps lab 오민경.
패키지와 접근 제어 패키지에 대하여 접근 제어에 대하여.
Power Java 제14장 배치 관리자.
ASP.NET AJAX 비동기 게시판 작성 2007 컴퓨터공학실험( I )
Lesson 7. 클래스와 메소드 - 1.
10장. 예외처리.
자바 5.0 프로그래밍.
C#.
13. 연산자 오버로딩.
7장 인터페이스와 추상 클래스.
Method & library.
JA A V W. 03.
자바응용.
인터넷응용프로그래밍 JavaScript(Intro).
Lesson 4. 수식과 연산자.
HTTP 프로토콜의 요청과 응답 동작을 이해한다. 서블릿 및 JSP 를 알아보고 역할을 이해한다.
Lesson 2. 기본 데이터형.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
15장 컬렉션 프레임워크 Section 1 컬렉션 프레임워크의 개요 Section 2 리스트 Section 3 셋
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
자바 5.0 프로그래밍.
Power Java 제11장 상속.
15강. 폼 데이터 값 검증 Validator를 이용한 검증 ValidationUtils 클래스
CHAP 21. 전화, SMS, 주소록.
객체기반 SW설계 팀활동지 4.
18강. 인터페이스 – II - 인터페이스와 다중상속 - 인터페이스를 통한 로봇 장남감 만들기 프로그래밍
Introduction to JSP & Servlet
클래스 : 기능 CHAPTER 7 Section 1 생성자(Constructor)
3장 JSP프로그래밍의 개요 이장에서 배울 내용 : JSP페이지의 기본적인 개요설명과 JSP페이지의 처리과정 그리고 웹 어플리케이션의 구조에 대해서 학습한다.
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
안드로이드 앱 개발과정 Step1. 기초과정 강사 : 정 훈 희.
MIDP 네트워크 프로그래밍 ps lab 김윤경.
발표자 : 이지연 Programming Systems Lab.
Android -Data Base 윤수진 GyeongSang Univ. IT 1.
2.가상머신의 탐험 도구, Oolong에 대하여 ps lab 김윤경.
JSP Programming with a Workbook
Power Java 제14장 배치 관리자.
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
2장 자바의 기본문법(1).
6 객체.
20 XMLHttpRequest.
Presentation transcript:

12. 컨텐트 핸들러 2000. 6. 9 임정목 국중옥 컴퓨터 네트워크 실험실

컨텐트 핸들러란 무엇인가? 컨텐트 핸들러의 필요성 개발자들이 자바에서 가장 흥미를 가지는 개념 HTML만 이해하는 최초의 브라우저에서 PDF나 VRML과 같은 플러그 인을 읽을 수 있는 새로운 컨텐트 유형이 발표됨. 새로운 컨텐트의 웹 문서를 만나면 그 유형을 볼 수 있는 코드를 자동로드로 받게됨 플러그 인을 한꺼번에 처리할 각각의 플랫폼별의 컨텐트 핸들러 필요성 고취

컨텐트 핸들러란 무엇인가?(계속) 컨텐트 핸들러의 개요 컨텐트 핸들러의 기능 java.net.ContentHandler의 서브 클래스 InputStream을 통해 들어온 데이터를 유용한 자바의 객체로 변한 컨텐트 핸들러의 기능 URLConnection으로부터 데이터를 읽어서, 컨텐트 유형에 적합한 데이터로 부터 객체를 생성 서브 클래스들은 특수하게 관련된 MIME 일반 유형과 세부 유형들을 처리한다.

컨텐트 핸들러란 무엇인가?(계속) 컨텐트 핸들러의 세부 유형 image/gif 컨텐트 핸들러 text/plain 컨텐트 핸들러 URLImageSource 객체를 반환 text/plain 컨텐트 핸들러 String 객체를 반환 데이터베이스 컨텐트 핸들러 데이터베이스 또는 레코드 객체를 반환 현재 만들어져 있지 않으므로 프로그래머가 직접 작성

컨텐트 핸들러란 무엇인가?(계속) 컨텐트 핸들러와 프로토콜 핸들러의 관계 URLConnection 클래스의 getContent() 메소드는 InputStream을 반환 아스키 코드를 반환하기만 하는 프로토콜에서 반환하는 입력 스트림을 처리하는 프로토콜이 FTP, gopher 또는 HTML일 경우 동작이 잘 이루어 지지 않음

컨텐트 핸들러란 무엇인가?(계속) 반환되지 않는 다른 유형의 컨텐트를 처리하는 요령 getContent()가 데이터의 MIME 유형을 조사 매칭을 위한 컨텐트 핸들러를 생성하기 위해 ContentHandlerFactory의 createContentHandler()를 사용 데이터에 알맞은 컨텐트 핸들러들을 만들어야 한다. ContentHandeler가 존재할 경우 URLConnection의 getContent() 메소드는 ContentHandler의 getContent() 메소드를 호출하고, 이 메소드는 반환할 자바 객체를 생성한다.

컨텐트 핸들러란 무엇인가?(계속) 컨텐트 핸들러를 이용한 자바 객체 생성 순서 URL의 생성 컨텐트 핸들러를 이용한 자바 객체 생성 순서 URL의 생성 객체 반환을 위한 URL의 getContent() 호출 URL의 연결 URLConnection의 getContent()를 호출 URLConnection.getContent()는 컨텐트핸들러를 찾기 위해 URLConnection.getContentHandler()를 호출 getContentHandler()는 적합한 핸들러를 찾고 URLConnection.getContent()에게 반환 (새로운 웹 문서로 이동할 경우 흔한 컨텐트핸들러를 다운로드 받지 않아도 된다)

컨텐트 핸들러란 무엇인가?(계속) 컨텐트 핸들러를 이용한 자바 객체 생성 순서 컨텐트 핸들러를 이용한 자바 객체 생성 순서 getContentHandler()는 createContentHandler 메소드를 호출 새로운 인스턴스를 생성하는데 실패하면 자바는 sun.net.www.content.type.subtype이라는 컨텐트 핸들러 클래스를 찾는다. ContentHandler 객체가 생성되면 ContentHandler의 getContent() 메소드를 호출하고, 컨텐트 유형에 적합한 객체를 반환 반환된 객체가 호출되어 URL.getContent()를 호출한 메소드에 도달한다.

ContentHandlerFactory 컨텐트 핸들러란 무엇인가?(계속) Application이 컨텐트 핸들러를 찾는 방법 URL 생성 getContent() 호출 컨텐트핸들러 서브클래스 생성 ContentHandlerFactory 설치

ContentHandler 클래스 컨텐트 유형에 적합한 객체를 반환하기 위해 getContent() 메소드를 치환 메소드의 복잡 여부는 컨텐트 유형의 복잡도에 의해 결정 text/plain 컨텐트 핸들러는 간단 txt/rtf 컨텐트 핸들러는 복잡 미래의 컨텐트 핸들러는 임의 유형 객체를 반환 컨텐트와 자바의 객체를 매칭하여 주는 표준화 기대

생 성 자 public ContentHandler() ContentHandler 클래스는 생성자를 제공하지 않는다. 추상클래스이므로 이 생성자를 명시적으로 호출하지 않는다.

getContent 메소드 public abstract Object getContent(URLConnection uc) throw IOExcption getConnection() 메소드 안에서만 이 메소드를 호출할 수 있다. getContent()는 객체를 생성하기 위해 URLConnection의 InputStream을 사용 ContentHandler는 컨텐트 그 자체만 책임지며 URLConnection이 서버와 필요한 핸드셰이킹을 수행하고, 서버에서 온 헤더를 해석

getContent 메소드(계속) Text/tab-separated-values 컨텐트 유형을 처리하는 ContentHandler를 작성하기 탭으로 구분된 문자열들은 데이터베이스나 스프레드시트 시스템에서 작성 JPE Associates 341 Lafayette St.Suite 1025 Nowhere NY 10012 O’ Relly & Associates 103 Morris Str. Sute A Sebastopol CA 95472 탭 레코드 필드

getContent 메소드(계속) 탭으로 구분된 문자열들을 자바의 객체중에서 변환하기 위해 String 배열로 만들고, 연속적인 레코드들은 Vector에 저장하여 ContentHandler를 작성한 다음 클래스 정의 public class address { String name; String street; String suite; String state; String city; String zip; }

getContent 메소드(계속) text/tab-separated-values 컨텐트 핸들러 코드 import java.net.*; import java.io.*; import java.util.*; public class tabSeparatedValueHandler extends ContentHandler { public Object getContent(URLConnection uc) { String theLine; Vector v = new Vector(); try { DataInputStream dis = new DataInputStream(uc.getInputStream()); while ((theLine = dis.readLine()) != null) { String[] linearray = lineToArray(theLine); v.addElement(linearray); } catch (IOException e) { return v; Vector의 인스턴스를 만든다. URLConnection uc로 부터 InputStream을 얻고 DataInputStream으로 연결 각 줄은 lineToArray() 메소드에 연결되어 String 배열로 분리 각각의 String 배열은 Vector에 추가된다.

getContent 메소드(계속) text/tab-separated-values 컨텐트 핸들러 코드(계속) private String[] lineToArray(String line) { StringTokenizer st = new StringTokenizer(line, “\t"); int numFields = st.countTokens(); String[] fields = new String[numFields]; for (int i = 0; i < numFields; i++) { fields[i] = st.nextToken(); } return fields; lineToArray는 이 배열을 반환한다. 구분자 탭(\t)를 가진 String으로 부터 StringTocknizer를 생성 String 내에서토큰의 개수에 따라 설정된다. 배열은 numFields를 갖는 필드들에 의해 만들어지고 각 토큰들을 채운다.

컨텐트 핸들러 생성기 ContentHandler를 프로그램에서 사용하는 방법 연구하기 MIME 유형을 갖는 파일은 gopher, FTP, HTTP 서버로 부터 탭으로 분리되어 전송(확장자는 .tsv) 서버는 전송된 파일이 text/tab-separated-values인것을 인지 MIME 유형중에서 –(하이픈)이 들어 있는 경우 _(밑줄)로 수정되어 인식

컨텐트 핸들러 생성기(계속) Application 이나 Browser에서 ContentHandler 찾기 ContentHandlerFactory 는 ContentHandler 클래스가 저장될 곳을 정하는 규칙을 정의한다. ContentHandlerFactory를 구현하는 클래스를 작성하고 이 클래스의 creatContentHandler() 메소드가 작성한 ContentHandler의 인스탄스를 생성한다. ContentHandlerFactory를 설정하는 URLConnection의 setContentHandlerFactory() 메소드를 호출한다.

createContentHandler 메소드 Public abstract ContentHandler createContentHandler(String mimetype) URLStreamHandlerFactory 인터페이스의 creatURLStreamHandler() 메소드는 적합한 프로토콜 핸들러를 찾아내어 적재한다. ContentHandlerFactory 인터페이스의 creatContentHandler() 메소드는 주어진 MIME 유형에 적합한 ContentHandler를 찾아내어 적재한다.

createContentHandler 메소드(계속) text/tab-separated-values 컨텐트 핸들러 코드를 이용하여 text/tab-separated-values 파일을 다운로드하고 출력하는 클래스의 예제 import java.io.*; import java.net.*; import java.util.*; public class tsvContentTester implements ContentHandlerFactory { String theURL;

createContentHandler 메소드(계속) public static void main (String[] args) { if (args.length == 1) { tsvContentTester ct = new tsvContentTester(args[0]); URLConnection.setContentHandlerFactory(ct); ct.test(); } else { System.err.println("Usage: java tsvContentTester url"); public tsvContentTester(String s) { theURL = s;

createContentHandler 메소드(계속) public ContentHandler createContentHandler(String type) { if (type.equalsIgnoreCase("text/tab-separated-values")) { return new tabSeparatedValueHandler(); } else { return null; .tsv 파일을 전송하는 서버가 text/tab-separated-valued 라는 유형을 반환하는지 확인한다

몇몇 컨텐트 핸들러들 Application/x~time 컨탠츠 핸들러는 java.util.Date 객체로 반환 부호있는 32비트 정수를 readInt() 메소드로 자바의 int로 변환 결과값은 getContent()가 반환할 Date 객체를 생성하는데 사용

몇몇 컨텐트 핸들러들(계속) time 컨텐트 핸들러 import java.net.*; import java.io.*; import java.util.*; public class timeContentHandler extends ContentHandler { public Object getContent(URLConnection uc) { Date now = null;

몇몇 컨텐트 핸들러들(계속) try { DataInputStream dis = new DataInputStream(uc.getInputStream()); int theTime = dis.readInt(); // 86400 seconds a day // midnight January 1970 = 2,208,988,800 seconds since midnight January 1, 1900 long secondsSince1970 = theTime - 2208988800L; long millisecondsSince1970 = secondsSince1970 * 1000L; now = new Date(millisecondsSince1970); } catch (IOException e) { return now;