[JSP] 커스텀 태그 개념 및 예제

커스텀 태그

- 스크립트 요소(스크립틀릿, 표현식 등)가 많아질수록 JSP 코드는 복잡해진다.

- 커스텀 태그를 이용하여 위 문제점을 해결

- JSTL이 표준 커스텀 태그인데 이처럼 코드의 가독성을 높여주는 방법

- JSP tag 파일을 생성해서 사용할 수 있음.

 

 

태그파일에서 사용할 수 있는 디렉티브들
디렉티브 설명
tag JSP 페이지의 page 디렉티브와 동일. 태그바일의 정보를 명시.
taglib 태그파일에서 사용할 태그라이브러리를 명시. 사용법은 JSP 페이지와 동일
include JSP 페이지와 마찬가지로 태그 파일에 특정한 파일을 포함시킬 때 사용. 
attribute 태그 파일을 커스텀 태그로 사용할 때 입력받을 속성을 명시.
variable EL 변수로 사용할 변수에 대한 정보 저장.

 

tag디렉티브 속성
속성 설명
display-name 태그파일을 도구에서 보여줄 때 사용될 이름을 지정. 기본값은 확장자 ".tag"를 제외한 태그파일의 나머지이름이다.
body-content 몸체 내용의 종류를 입력. empty, tagdependent, scriptless의 세가지 값중 하나를 사용.
dynamic-attributes 동적 속성을 사용할 때, 속성의 <이름, 값>을 저장하는 Map 객체를 page 범위의 속성에 저장할 때 사용할 이름을 지정한다.
description 태그에 대한 설명
import page 디렉티브에서 import 속성과 동일
pageEncoding page 디렉티브에서 pageEncoding 속성과 동일
isELIgnored page 디렉티브에서 isELIgnored 속성과 동일
deferredSyntaxAllowedAsLiteral page 디렉티브에서 deferredSyntaxAllowedAsLiteral 속성과 동일
trimDirectiveWhitespaces page 디렉티브에서 trimDirectiveWhitespaces 속성과 동일

 

태그파일의 위치와 참조방법
<%@ taglib prefix="tf" tagdir="/WEB-INF/tags/util" %>
...
<tf:태그명 ...>body</tf:태그명>

 

간단한 현재시간을 출력하는 커스텀 태그 예제
<!-- now.tag 파일 -->
<%@ tag body-content="empty" language="java" pageEncoding="UTF-8"%>
<%@ tag import = "java.util.Calendar" %>
<%
	Calendar cal = Calendar.getInstance();
%>
<%=cal.get(Calendar.YEAR)%>년
<%=cal.get(Calendar.MONTH)+1%>월 <!--월의 경우 0인덱스라서 +1 해야됨-->
<%=cal.get(Calendar.DATE)%>일

- body-content 값이 empty이므로 <tf:now></tf:now> 사이에는 아무 값도 오지 않는다는 것.

- 혹은 <tf:now/> 처럼 홑 태그로 쓰던가 할 것임.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix ="tf" tagdir="/WEB-INF/tags" %><!-- 태그파일 위치(부모 폴더까지만 잡는다) -->

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>now</title>
</head>
<body>

오늘의 날짜는 <b><tf:now/></b>입니다.

</body>
</html>

- 오늘의 날짜는 2019년 08월 18일 입니다.

 

프로젝트 개발도중 커스텀 태그를 사용하게 된다면 실질적으로 어떻게 썼는지 활용방안과 함께 사용했던 커스텀 태그를 분석하는 포스팅을 진행하도록 하겠습니다.

 

지금은 아직 이러한 tag 파일을 이용해서 개발자가 직접 커스텀 태그를 제작하여 개발에 활용할 수 있겠구나 라는 느낌만 가져가는 시간이 될것 같습니다.

댓글

Designed by JB FACTORY