2022.07.14 ~ 2022.07.18 까지 하다가 정리했던 내용인데 매주 토요일이나 일요일에 정리해야지 했는데 막상 주말에 더 바빠서 시간이 없고 평일에 하게 되네요. ㅎㅎ 그리고 쓰다보니까 좀 부족한 내용이 보이긴 하던데 자꾸 추가하고 공부하고 보완하고 하다보면 끝없어 질 것 같아서 여기까지만 하고 일단 마무리를 합니다. ㅎㅎ
최근에 일을 하다가 소스 코드들을 전체적으로 훑어볼 시간이 있어서 보는데
templet_layout.tld
templet_menu.tld
TLD 확장자란?
위 사이트를 참고해서 tld 파일에 대해서 간단하게 정리를 하면 아래와 같습니다.
TLD(Tag Library Descriptor) 태그 라이브러리 디스크립터. 라고 하며
JSP에서 사용되는 “커스텀 태그”나 “JSTL”의 태그들에 대한 설정 파일이다.
태그 핸들러에 대해 “속성”이나 “속성의 타입”, “태그명”, “uri” 등을 정의해두는 설정이 tld 파일이며 *.tld 라는 확장자를 갖는다.
tld 파일의 경우 web.xml 과 마찬가지로 WEB-INF 디렉토리의 하위에 작성해야 인식하며 JSP1.2 버전의 경우 web.xml 파일에 따로 tld 파일에 대한 추가 설정이 필요하지만 JSP 2.0 이상의 경우 WEB-INF 폴더하위에 작성하기만 하면 자동으로 인식한다.
그러니까 tld 파일은 JSP 파일에서 사용할 태그들에 대한 이름, 속성, 타입 등을 미리 설정하는 태그 설정 파일 이라고 볼 수 있습니다.
TLD 파일 만들기
tld 파일은 XML 기반이기 때문에 dtd나 schema 를 tld 파일 상단에 명시해주어야 한다.
이클립스의 경우 XML 파일을 만들기를 해서 NEXT로 넘어가다보면 Create XML file from a DTD file 등의 방법을 이용해서 기본 셋팅이 된 tld 파일을 만들 수 있다고 합니다.
dtd 란? 문서의 구조를 정의하는 규칙의 집합.
문서의 구조화 원소 및 원소의 속성 등을 정의함으로써 작성된 XML 문서가 유효한지 여부를 판단하는데 사용된다.
그러니까 DTD 규칙을 사용해서 XML을 작성하겠다. 라는 파일에 대한 작성 규칙을 선언하는 부분인 것 같은데요. 자세한 내용은 다음에 다시 공부해보기로 하고 일단은 tld 파일로 다시 돌아가겠습니다.
tld 파일 작성 방법
- tld 문서의 전체 설정
- 태그라이브러리의 전체설정
- 커스텀태그의 전체 설정
- 커스텀태그의 인자 설정
<?xml version=“1.0” encoding=“ISO-885901” ?>
<!DOCTYPE taglib
PUBLIC “-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN”
“http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd”>
//여기까지는 파일 생성을 하면 저절로 만들어지며 XML 헤더 정보를 나타냅니다. XML버전, 인코딩 정보, DTD파일 지정 등의 설정이 있습니다.
<taglib>
<tlibversion>1.0</tlibversion> <!— Tag Library의 자체버전, 필수 —>
<jspversion>1.1</jspversion> <!— JSP 스펙의 버전, 생략시 1.1, 필수(?) _ 생략시 1.1 이라고 하는데 설정은 또 필수라고 하는데 필수인데 어떻게 생략 가능한지 잘 모르겠습니다;; —>
<shortname>first</shortname> <!— TagLib의 생략된 이름을 지정, 필수 —>
<uri></uri> <!— 여러개의 tld 파일로 구분하여 사용되는 경우에 이용, 생략 가능 —>
<info>A simple tab library for the examples</info> <!— 정보나 설명을 적는 부분, 생략가능 —>
//여기까지는 태그라이브러리에 관한 전체적인 설정을 작성합니다.
<tag>
<name>list</name> <!—태그의 이름, 이 이름으로 태그를 식별 즉 다음과 같이 사용 가능 <first:list>목록</first:list> —>
<tagclass>sample.common.tag.LabelTag</tagclss> <!— 커스텀 태그를 실제 수행하는핸들러, 필수(자바 파일의 위치라고 보면 될 것 같습니다.) —>
<teiclass> ~~~ </teiclass> <!— 도우미 클래스, 필수 아님 —>
<bodycontent>JSP</bodycontent> JSP에서 커스텀 태그를 사용할 때 시작태그와 끝내그 사이의 컨텐츠의 타입을 기술, empty, tagdependent, JSP등을 사용 그러니까 태그와 태그 사이에 뭐가 들어가냐? 라는 내용인 것 같음 —>
<info>Tag with body and parameter</info> <!— 추가적인 설명을 적는 부분 —>
<attribute>
<name>depth</name> <!— 속성의 이름, 문자열 JSP page 에서는 다음과같이 사용된다. <first:list depth=“1”> 그리고 필수값.
<required>true</required> <!— 필수인지의 여부, true, false 값 입력 —>
<rtexprvalue>true</rtexprvalue> <!— default 값은 false, 이며 정적인 값을 받겠다는 의미. 만약 true 라면 동적으로 처리가능. <first:list name=‘<%request.getParameter(“name” %>’ /> 로 커스텀태그 실행시에 JSP를 사용할 수 있는지를 나타낸다. -->
</attirbute>
</tag>
<tag>
.. .. ..
</tag>
</taglib>
//tag 로 둘러쌓인 부분은 커스텀태그에 관한 설정 부분.
//그리고 <tag> 부분이 이제 아래로 쭉쭉 추가되면서 tag 설정들이 여러개로 늘어납니다
.tag 파일이란?
tld 파일이 태그의 설정에 대한 내용이라면 .tag 는 파일확장자명 그대로 커스텀 태그 파일을 만드는 파일이라고 보면 되겠습니다.
<%@ taglib uri=“/WEB-INF/tld/templet_menu.tld” prefix=“m”%>
//tld 파일을 불러오고 prefix를 설정.
<m:list depth=“1”>
m 과list 부분은 아까 tld 파일과 위의 prefix 에서 설정했던 부분들이고요. 뒤에 있는 depth 부분은 이제 그 태그를 어떻게 처리할지 tasClass 부분에 적은 그 파일에서 처리하는 부분이라고 보면 되겠습니다.
그리고 아까 위에서 jsp2.0 이상이면서 WEB-INF 밑에 tld 파일이 있다면 경로를 안 적어도 된다고 했는데 이 프로젝트에는 web.xml 에서 설정을 하고 있긴 하더라고요.
<jsp-config>
<taglib>
<taglib-uri>jsp 에서 불러올 변수명</taglib-uri>
<taglib-location>/WEB-INF/tld/templet_menu.tld</taglib-location>
</taglib>
</jsp-config>
저 uri 부분은 좀 헷갈리는데요.
web.xml 에서도 uri 설정을 하고 그냥 jsp 파일에서 불러올 때도 설정을 하고..? 근데 이제 이게 2개 다 해야하는건지 1개만 하면 되는건지 잘 모르겠고 게다가 저희 회사는 자체 프레임워크를 사용하는데 저 uri 와 jsp 파일의 prefix 부분의 uri 가 또 다르네요. ㅋㅋ ;;
우선 오늘은 tld 파일이 뭔지 그리고 어떻게 작성하는건지 알았으니까 거기에서 만족해야겠습니다. ㅎㅎ
'개발 일상(Dev)' 카테고리의 다른 글
윈도우 데스크탑, MacBook 2대 컴퓨터 사용 방법 연구기 (0) | 2024.03.15 |
---|---|
맥, 맥북, 아이패드에서 한글 사용하기 - 편집까지 가능 (0) | 2024.03.15 |
jstl _ <c:out> 을 사용하는 이유와 XSS(크로스 사이트 스크립팅) (0) | 2023.04.04 |
[Oracle] Where 절에서 CASE.. WHEN.. THEN 사용하기 (1) | 2022.09.27 |
아이패드로 코딩하기 _ Code App 어플 (0) | 2022.03.05 |