본문 바로가기

Dev.../플밍 관련 자료

[펌] Custom Tag Library (2) - Tag Library Descriptor

Custom Tag Library (2) - Tag Library Descriptor
 

 

<출처 : www.hanajava.net>

 

Tag Library Descriptor(태그 라이브러리 설명자)

태그 핸들러 클래스를 만들었다면 이제 아래의 소스 5.2와 같이 태그 라이브러리 설명자 파일을 만들어야 한다.

소스 5.2 taglibExample.tld


<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE taglib
PUBLIC "-//Sun MicroSystems, Inc. //DTD JSP Tag Library 1.1//EN"
"http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">

<taglib> <tlibversion>1.0</tlibversion> <jspversion>1.1</jspversion> <shortname>jspace</shortname> <uri/> <info> JavaServer Pages tag library Example </info> <tag> <name>test</name> <tagclass>com.boolpae.jsp.CustomTagEx</tagclass> <info>Simple example</info> <bodycontent>empty</bodycontent> </tag> </taglib>

보시다시피 소스 5.2의 태그라이브러리 설명자 파일은 xml 문서이다. xml에 대해서 여기서는 설명하지 않을 것이며 커스텀 태그를 사용하기 위해서 xml을 모두 알 필요는 없다. 정말로 어렵지 않은 부분이다. Html 태그보다도 쉽다. 왜냐면, 정의된 태그가 얼마 없으니깐!

xml 파일이라는 것은 선언하는 부분이 맨 윗줄에 나와있는 <?xml version="1.0" ?> 부분이다. encoding 속성은 선택 사항이다. DTD는 썬(Sun)에서 이미 정의해 놓았다. DTD는 태그의 문법을 정의하는 것으로 소스 5.2에서 보는 바와 같이 그냥 쓰면 된다.

다음으로 이 xml 파일은 루트요소 태그로써 <taglib>를 가진다. Html에서 <html> 태그와 같다고 생각하면 된다. <taglib> 내에는 여러가지 설명을 위한 태그가 있고 중요한 것은 <tag>의 내부 태그들이다.

<tlibversion>은 태그라이브러리 버전을 가리키며 현재는 1.0이다. <jspversion>도 jsp 버전을 나타내는 것으로 현재 1.1 스펙까지 나와 있으므로 이 스펙에 따를 것이기 때문에 1.1이라고 쓰면 된다. <shortname>은 태그 라이브러리의 유일무이한 식별을 위해서 쓰는 것이다. 똑같은 이름의 태그는 네임 스페이스로 구분해야 하는데 jsp 페이지 내에서 접두어(prefix)로 지정하는 네임 스페이스의 이름이라고 생각하면 된다.
이 태그 내의 이름이 jsp 페이지 내에서 taglib 지시자에서 디폴트 네임 스페이스로 사용된다.

taglib 지시자가 기억이 나지 않는가? 아래와 같다.

<%@ taglib uri="tagLibraryURI" prefix="tagPrefix" %>

<tag> 전에 나오는 다섯가지 태그 중에 반드시 써야하는 것은 <tlibversion>와 <shortname> 태그 뿐이다. <uri>는 특별히 이 태그 라이브러리에 대한 설명이 있는 uri 경로이며, <info>는 간단한 설명을 붙이는 것이다.

그럼 <tag> 내의 자식 태그들은 무엇을 의미하는지 보자. 소스 5.2에는 네 가지가 나와 있는데 대개의 태그 라이브러리 설명자 파일의 형태는 비슷하다.

<name>은 taglib 지시자에서 정의하는 접두어 다음에 붙을 태그의 이름이다. 예를 들어 <name>test</name>으로 몸체에 test라는 이름을 정의하고, taglib 지시자에서 prefix="jspace" 로 설정했다면, jsp 페이지 내에서는 <jspace:test>와 같이 사용한다. xml 문법을 따르므로 몸체가 없다면 축약형으로 <jspace:test/>와 같이 사용할 수 있다.
<tagclass>는 태그핸들러 클래스를 몸체에 쓰면 된다. test라는 이름의 태그는 이제 <tagclass>의 몸체에 쓰여진 클래스를 찾아서 처리를 하게 된다. 소스 5.2의 예처럼 <tagclass>com.boolpae.jsp.CustomTagEx</tagclass>라고 쓰면 된다. 패키지까지 포함해서 클래스의 전체 이름을 써 주어야 한다.
<info>는 역시나 단순히 이 태그를 설명하는 간단한 문장을 쓰면 된다.
<bodycontent>는 이 태그의 몸체를 정의하는 것인데 EMPTY, JSP, TAGDEPEDENT 중 하나를 쓰면 된다. EMPTY는 몸체가 없는 태그라는 의미이며, JSP는 JSP 문장으로 해석하라는 것이고 TAGDEPENT는 태그의 정의에 따라 태그 핸들러에서 처리한다는 의미이다.