와니_ 2019. 8. 19. 15:11

커스텀 태그는 이름에서 알 수 있듯 사용자 목적에 맞게 새로운 태그를 생성하여 사용할 수 있는 태그이다.

보통 스크립트 요소가 많아져서 코드가 복잡해지는 것을 막기 위해 사용한다.

한 번 작성한 커스텀 태그는 다른 JSP 컨테이너에서도 사용할 수 있기 때문에 재사용이 용이하다.

 

 

다음 네 가지는 https://tomcat.apache.org/download-taglibs.cgi 에서 다운로드한 jar 파일들이다.

개발자들이 공통으로 사용할 수 있는 커스텀 태그를 이용할 수 있다.

 

taglibs-standard-compat-1.2.5.jar
0.05MB
taglibs-standard-impl-1.2.5.jar
0.20MB
taglibs-standard-jstlel-1.2.5.jar
0.16MB
taglibs-standard-spec-1.2.5.jar
0.04MB

 

파일을 복사해  웹 프로젝트 > WEB-INF > lib  에 붙여넣기 하면 자동으로 빌드된다.

 

 

< 커스텀 태그 사용하는 방법 >

 

1) 태그 클래스를 만든다

--> 태그 클래스란? : JSP 문서에서 커스텀 태그를 사용할 경우 원하는 기능을 제공해주는 클래스

 

2) 인터페이스를 상속받는다

---> TagSupport, BodyTagSupport, SimpleTagSupport 등

 

3) 부모 메소드 오버라이드

---> doStartTag(), doEndTag()

 

tld 파일

tld란? : tag library desripter 의 약자.

 

tld 파일은 xml 파일을 이용해 만들어야 하는데, 태그를 만들어주기 위한 여러 규칙들이 필요하므로 그냥 만들면 안 된다! >> new > xmlfile> 파일명.tld > finish 말고 next 눌러 Create XML file from an XML schema file 을 체크 > next 누르면 Select XML Catalog entry 클릭하면 기본적으로 WAS가 제공해주는 스키마 파일들이 나옴(?) > http://java.sun.com/xml/ns/web-jsptaglibrary 어쩌구를 클릭 > next 누르면 Namespace Information 중에서 javaee 를 선택하고 edit > Prefix에 적힌 것 지워주기(얘가 붙으면 tld 파일 사용시 몇 가지 제약이 생기므로 no prefix로 만들어줌) > finish

 

<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.1" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd ">
  <tlib-version>token</tlib-version>
  <short-name>NMTOKEN</short-name>
</taglib>



<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.1" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd ">
	<description></description> : 커스텀 태그에 대한 설명
	<tlib-version>1.0</tlib-version> : 몇 번 고쳤는지
    <short-name>simple</short-name> : 간단한 이름 부여
</taglib>

** 스키마 파일은 굉장히 강력한 규칙을 제공하므로, 선언해주는 내용의 순서까지도 지켜줘야 함

 

<description> : tld 파일에 등록된 커스텀 태그에 대한 설명을 설정하는 엘리먼트

<tlib-version> : tld 파일의 버전 정보를 설정하는 엘리먼트

<short-name> : tld 파일의 이름을 설정하는 엘리먼트

 

url : JSP 문서에서 tld 파일을 불러 사용하기 위한 고유값을 설정하는 엘리먼트

=> 다른 tld 파일의 uri 엘리먼트갑소가 중복될 경우 에러 발생

 

<tag> : 태그 클래스를 커스텀 태그로 설정하기 위한 상위 엘리먼트

--- <name> : 커스텀 태그명을 설정하기 위한 엘리먼트

--- <tag-class> : 커스텀 태그를 사용할 경우 실행될 태그 클래스를 설정하기 위한 엘리먼트

--- <body-content> : 커스텀 태그의 내용을 설정하기 위한 엘리먼트

>> 바디 컨텐트 태그 안에 empty라고 써주게 되면 태그 내용이 없는 커스텀 태그를 설정하겠다는 뜻

--- <attribute> : 커스텀 태그 속성을 설정하기 위한 상위 엘리먼트

----- <name> : 커스텀 태그의 속성명을 설정하기 위한 엘리먼트

----- <required> : 필수 속성 여부를 설정하기 위한 엘리먼트(* false : 선택속성(기본), true : )

 

 

태그를 등록하고 난 뒤 WAS를 restart 시켜주어야 tld 파일을 읽어들일 수 있다.

 

 

 

 

 

 

참고 블로그

https://bravesuccess.tistory.com/128