12 ███████████ 12.

Slides:



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

목 차 C# 언어 특징 .NET 프레임워크 C# 콘솔 프로그램 C# 윈도우 프로그램 실습 프로그래밍세미나 2.
Java Web Programming 5일차.
Chapter 16 : Struts 프레임워크 2. chapter 16 : Struts 프레임워크 2.
10. 예외 처리.
CHAP 19. 구글맵.
최윤정 Java 프로그래밍 클래스 상속 최윤정
Internet Computing KUT Youn-Hee Han
Chapter 14 : JSP 고급4. chapter 14 : JSP 고급4 학습목표 커스텀 태그 종류 JSTL ( JSP Standard Tag Library ) 사용자 커스텀 태그 커스텀 태그 작성 클래스 기반 커스텀 태그 작성 태그 파일 기반 커스텀 태그 작성.
제 08 장 자바 빈즈 학기 인터넷비즈니스과 강 환수 교수.
Ch.07-5 xml-rpc 사용하기 김상엽.
12 커스텀 액션.
4장. JSP의 구성요소와 스크립팅요소 제4장.
JAVA 언어로 배우는 디자인 패턴 입문 chap. 1-2.
7장 배열 ②.
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
10장 함수.
4장. 웹로직 서버상에서의 JDBC와 JTA의 운용
Lesson 6. 형변환.
CHAPTER 02 OpenCV 개요 PART 01 영상 처리 개요 및 OpenCV 소개.
컴퓨터응용과학부 Java Enterprize(DB) 제 12 주
Chap08 다중 스레드 8.1 스레드 개요 8.2 Thread 클래스와 스레드 생명주기 8.3 스레드 생성과 사용
3.2 SQL Server 설치 및 수행(계속) 시스템 데이터베이스 master
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
자바 5.0 프로그래밍.
패키지와 접근 제어 패키지에 대하여 접근 제어에 대하여.
제 13 장 JSTL 학기 인터넷비즈니스과 강 환수 교수.
JSTL.
컴퓨터 프로그래밍 실습 #6 제 4 장 클래스 작성.
10장. 예외처리.
자바 5.0 프로그래밍.
[INA470] Java Programming Youn-Hee Han
10강. JSP 본격적으로 살펴보기-II 스크립트릿, 선언, 표현식 지시자 주석 Lecturer Kim Myoung-Ho
7장 인터페이스와 추상 클래스.
Java 9장. 인터페이스와 예외처리 public class SumTest {
Method & library.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
CHAP 13. 방명록 만들기 실습.
전자정부 표준프레임워크 호환성 가이드 전자정부 표준프레임워크 사업단 실행환경 개발팀.
HTTP 프로토콜의 요청과 응답 동작을 이해한다. 서블릿 및 JSP 를 알아보고 역할을 이해한다.
제 14 장 커스텀 태그 학기 인터넷비즈니스과 강 환수 교수.
표현언어와 커스텀태그 표현 언어의 개념을 이해한다. JSP1.2 커스텀 태그 개발 방법을 익힌다.
Lesson 2. 기본 데이터형.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
27강 JAVA Collections - II - Map계열 컬렉션 클래스 살펴보기 - Set계열 컬렉션 클래스 살펴보기
15장 컬렉션 프레임워크 Section 1 컬렉션 프레임워크의 개요 Section 2 리스트 Section 3 셋
웹디자인
Part 4 클래스 라이브러리 Chapter 10 : 다중 스레드 Chapter 11 : 패키지와 주요 클래스
자바 5.0 프로그래밍.
자바 가상 머신 프로그래밍 Chap 10. 자바 컴파일링의 안쪽 ② Pslab 오민경.
Power Java 제11장 상속.
빌드 성공.
Fucntion 요약.
CHAP 21. 전화, SMS, 주소록.
18강. 인터페이스 – II - 인터페이스와 다중상속 - 인터페이스를 통한 로봇 장남감 만들기 프로그래밍
OpenCV 설정 2.21 만든이 딩딩.
안드로이드 앱 개발과정 Step1. 기초과정 강사 : 정 훈 희.
3. 모듈 (5장. 모듈).
JSP Programming with a Workbook
함수, 모듈.
9 브라우저 객체 모델.
Android -Data Base 윤수진 GyeongSang Univ. IT 1.
2.가상머신의 탐험 도구, Oolong에 대하여 ps lab 김윤경.
동적메모리와 연결 리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
JSP Programming with a Workbook
트위치 트게더 Twitogether 김준희.
프로젝트 결과 발표 네트워크정보통신과 강동성 이현미.
CHAP 5. 메뉴와 대화상자.
7 생성자 함수.
6 객체.
Presentation transcript:

12 ███████████ 12

Powered by http://www.jabook.org 이 명 진, 최 영 관 Powered by http://www.jabook.org 2nd Edition 소설같은 JSP 12장 부록 : 커스텀 태그

12.1 커스텀 태그 소개

12.1.1 커스텀 태그 커스텀 태그(Custom Tag)란? 태그 라이브러리(Tag Library) 커스텀 태그의 장점 사용자가 직접 정의해서 사용하는 태그 태그 라이브러리(Tag Library) 사용자가 정의한 커스텀 태그들을 모아 라이브러리 형태로 만든 것 커스텀 태그의 장점 한번 작성한 커스텀 태그는 어디서든 사용 가능하다. JSP 페이지 내에 스크립트 코드를 줄임으로써 가독력을 높일 수 있다. 태그 라이브러리를 잘 정의함으로써 JSP를 모르는 디자이너도 쉽게 동적인 페이지를 만들 수 있다. JSP 차원에서 지원하는 커스텀 태그가 바로 액션 태그이다.

12.1.2 태그 라이브러리의 구성 태그 핸들러 클래스(Tag Handler Class) 커스텀 태그의 기능을 정의한 클래스 태그 라이브러리 서술파일(Tag Library Descriptor, TLD) XML 표준을 따르는 XML 형식의 문서 커스텀 태그를 정의하고 태그 핸들러 클래스와 연결하여 처리를 실행 태그를 사용하는 JSP 파일 사용할 TLD를 정의하고 커스텀 태그를 사용 2 TDL에 등록 TLD(Tag Library Descriptor) 태그 라이브러리 URI 지정 및 커스텀 태그 사용 3 접두어와 name으로 해당 클래스 호출 4 JSP Tag Handler Class 1 태그 핸들러 클래스 작성 5 해당 태그 처리 및 결과 반환

12.2 간단한 커스텀 태그의 구현

12.2.1 태그 핸들러 클래스 태그 핸들러 클래스(Tag Handler Class) 커스텀 태그 구현 절차 태그 핸들러 클래스 작성 TLD 작성 태그 핸들러 클래스(Tag Handler Class) 커스텀 태그의 동작을 정의한 클래스 태그 핸들러 클래스 구현을 위한 자바 클래스 태그 라이브러리 등록 커스텀 태그 사용 JspTag Interface Body 내용을 처리하지 않는 간단한 태그를 만들 때 extends extends Tag Interface SimpleTag Interface implements extends implements TagSupport Class IterationTag Interface SimpleTagSupport Class implements extends BodyTagSupport Class BodyTag Interface Body 내용을 처리하는 태그를 만들 때

12.2.2 Tag 인터페이스를 이용한 구현 Tag 인터페이스 Tag 인터페이스를 이용한 구현 커스텀 태그의 기능을 정의하기 위한 기본적인 프로토콜과 메소드를 제공하는 인터페이스 Tag 인터페이스를 이용한 구현 Tag 인터페이스에 정의되어 있는 모든 메소드를 정의해서 구현 JSP 페이지에서 커스텀 태그를 만나면 doStartTag()와 doEndTag() 메소드가 자동으로 호출된다. public class HelloTagUseInterface implements Tag { public int doStartTag() throws JspException { ... } public int doEndTag() throws JspException { ... } public void release() { ... } public void setPageContext(PageContext pg) { ... } public void setParent(Tag p) { ... } public Tag getParent() { ... } } public int doStartTag() throws JspException { ... } 시작 태그를 만났을 때 호출되는 메소드 public int doEndTag() throws JspException { ... } 종료 태그를 만났을 때 호출되는 메소드

12.2.3 TagSupport 클래스를 이용한 구현 TagSupport 클래스 TagSupport 클래스를 이용한 구현 Tag 인터페이스와 IteratorTag 인터페이스가 구현된 클래스 커스텀 태그를 이용하는데 기본이 되는 클래스 TagSupport 클래스를 이용한 구현 필요한 메소드만 정의해서 사용하면 된다. TagSupport 클래스를 이용하면 필요한 메소드만 정의해서 구현하면 되기 때문에 인터페이스를 이용하는 것보다 편하다. public class HelloTag extends TagSupport { public int doStartTag() throws JspException { ... } public int doEndTag() throws JspException { ... } }

12.2.4 태그 라이브러리 서술파일 태그 라이브러리 서술파일 (Tag Library Descriptor, TLD) 커스텀 태그 구현 절차 태그 핸들러 클래스 작성 TLD 작성 태그 라이브러리 서술파일 (Tag Library Descriptor, TLD) XML 문서 형태로 작성 커스텀 태그의 이름과 태그의 기능이 구현된 태그 핸들러를 연결하는 역할 TLD의 작성 TDL 파일의 <tag> 태그를 이용해서 하나의 커스텀 태그를 정의 TLD의 저장 어디에 저장해도 상관없지만 일반적으로 WEB-INF 디렉터리 하위에 저장한다. 태그 라이브러리 등록 커스텀 태그 사용 필자는 /WEB-INF 하위에 tlds라는 폴더를 만들어서 그곳에 저장하였다.

12.2.5 태그 라이브러리의 정보 설정 커스텀 태그 구현 절차 태그 핸들러 클래스 작성 TLD 작성 web.xml 태그 라이브러리 사용을 위한 정보를 web.xml 파일의 루트 엘리먼트인 <web-app> 엘리먼트 하위에 추가한다. 태그 라이브러리 등록 커스텀 태그 사용 <web-app> ... <taglib> <taglib-uri> 태그 라이브러리 구분을 위한 식별자 </taglib-uri> <taglib-location> TLD 파일의 위치 </taglib-location> </taglib> </web-app> <web-app> ... <taglib> <taglib-uri>http://localhost/hellotag</taglib-uri> <taglib-location>/WEB-INF/tlds/HelloTag.tld</taglib-location> </taglib> </web-app>

12.2.6 커스텀 태그의 사용 커스텀 태그의 지시문 선언 커스텀 태그의 사용 커스텀 태그 구현 절차 태그 핸들러 클래스 작성 TLD 작성 커스텀 태그의 지시문 선언 커스텀 태그의 사용 태그 라이브러리 등록 커스텀 태그 사용 <%@taglib uri="http://localhost/hellotag" prefix="novel"%> web.xml에 정의된 태그 라이브러리 식별자 커스텀 태그의 접두어 정의 < : /> novel hello TLD에 정의된 태그 이름 휴~

12.3 다양한 형태의 커스텀 태그

12.3.1 어트리뷰트를 갖는 커스텀 태그 (1) 태그 핸들러 클래스 작성 TLD 작성 어트리뷰트 이름으로 된 setter 메소드를 작성 TLD 작성 커스텀 태그를 정의하는 <tag> 엘리먼트 하위에 어트리뷰트를 선언 <novel:welcome name="Grace" /> public class WelcomeTag extends TagSupport { private String name = ""; public void setName(String name) { this.name = name; } 커스텀 태그의 어트리뷰트 이름에 맞는 setter 메소드를 작성함으로써 어트리뷰트를 갖는 커스텀 태그를 지원할 수 있다. <tag> ... <attribute> <name> name </name> <required> true </required> <type> java.lang.String </type> </attribute> </tag> <type> 엘리먼트를 생략할 경우 기본 값은 String이다. 어트리뷰트의 이름 어트리뷰트의 사용 여부 어트리뷰트의 데이터 타입

12.3.2 어트리뷰트를 갖는 커스텀 태그 (2) 태그 라이브러리의 정보 설정 - web.xml 커스텀 태그의 사용 커스텀 태그의 지시문 선언 <taglib> <taglib-uri>http://localhost/welcometag</taglib-uri> <taglib-location>/WEB-INF/tlds/WelcomeTag.tld</taglib-location> </taglib> 커스텀 태그의 어트리뷰트를 만나면 태그 핸들러 클래스의 setter 메소드가 호출된다. <%@taglib uri="http://localhost/welcometag" prefix="novel"%> web.xml에 정의된 태그 라이브러리 식별자 커스텀 태그의 접두어 정의 <novel:welcome /> name="Grace" nation="America" 커스텀 태그의 어트리뷰트

<novel:fontMagic>기본 값 글자</novel:fontMagic> 12.3.3 내용을 갖는 커스텀 태그 태그 핸들러 클래스 작성 doStartTag() 메소드의 리턴 값 SKIP_BODY : 커스텀 태그의 내용을 무시하고 doEndTag() 메소드를 호출 EVAL_BODY_INCLUDE : 커스텀 태그의 내용을 포함하여 처리 doEndTag() 메소드의 리턴 값 EVAL_PAGE : 종료 태그 이후의 나머지 코드를 실행 커스텀 태그의 사용 doStartTag() 메소드의 리턴 값을 EVAL_BODY_INCLUDE로 지정하면 커스텀 태그의 내용을 포함하여 처리한다. <novel:fontMagic>기본 값 글자</novel:fontMagic> <novel:fontMagic color="blue" size="5">파란색 글자 5</novel:fontMagic> <novel:fontMagic color="red" size="7">빨강색 글자 7</novel:fontMagic> <novel:fontMagic>기본 값 글자</novel:fontMagic> <tag> <name>fontMagic</name> <tag-class>customtags.FontMagicTag</tag-class> <attribute> <name>color</name> <required>false</required> </attribute> <name>size</name> </tag> TLD에서 어트리뷰트 정의 시 <required>의 값을 false로 선언했기 때문에 어트리뷰트를 사용하지 않아도 된다.

12.3.4 내용을 반복하는 커스텀 태그 태그 핸들러 클래스 작성 doAfterBody() 메소드 커스텀 태그의 내용을 처리한 후 호출되는 메소드 doAfterBody() 메소드의 리턴 값 EVAL_BODY_AGAIN 다시 커스텀 태그의 내용을 처리하기 위한 상수 <novel:repeatBody repeat="5"> 반복되는 커스텀 태그 작성 </novel:repeatBody> public class RepeatTag extends TagSupport { public int doStartTag() { return EVAL_BODY_INCLUDE; } public int doAfterBody() { if(반복 조건) return EVAL_BODY_AGAIN ; else return SKIP_BODY; 커스텀 태그의 내용이 처리된 후 doAfterBody() 메소드 호출 doAfterBody() 내용을 다시 처리 EVAL_BODY_AGAIN EVAL_BODY_AGAIN은 커스텀 태그의 내용을 다시 처리하라는 의미이다. 따라서 커스텀 태그의 내용이 처리된 후 다시 doAfterBody() 메소드가 호출된다. 태그의 내용이 처리된 후 호출되는 메소드이다. 내용 처리 종료

12.3.5 BodyTagSupport 클래스 BodyTagSupport 클래스 커스텀 태그의 내용을 수정해서 출력해야 할 경우에 사용 내용을 처리하기 위한 BodyTagSupport 클래스의 메소드 getBodyContent() 메소드 BodyContent getBodyContent() 커스텀 태그의 내용을 리턴한다. BodyContent 클래스 JspWriter를 상속 받은 클래스 커스텀 태그의 내용을 처리할 수 있는 다양한 형태의 메소드를 제공

12.3.6 BodyTagSupport 클래스의 활용 doStartTag() 메소드의 리턴 값 EVAL_BODY_BUFFERED 커스텀 태그의 내용을 담은 버퍼를 생성한다. 내용을 처리하기 위한 이벤트 메소드 구현 doAfterBody()나 doEndTag() 메소드를 이용해서 구현 public class UseContentsTag extends BodyTagSupport { } BodyTagSupport 클래스는 커스텀 태그의 내용을 가져와서 수정을 가한 후 출력하고자 할 경우 이용한다. public int doStartTag() throws JspException { return EVAL_BODY_BUFFERED; } <novel:editBody> 123456789 </novel:editBody> public int doEndTag() throws JspException { // doAfterBody() BodyContent body = getBodyContent(); String content = body.getString(); ... } String content = body.getString();

End ███████████ End