본문 바로가기

6개월 대장정/JSP 개념

60일차 - [JSP] 커스텀 태그

반응형

안녕하세요. pitang입니다.

커스텀 태그에 대해 알아보겠습니다.

 

커스텀 태그

JSP가 기본적으로 제공하는 액션 태그와 JSTL이 제공하는 태그, 스크립트 코드 그리고 EL을 사용해 원하는 기능을 구현했다.

스크립트 요소가 많아지면 많아질수록 JSP 코드는 복잡해지는데 이 것을 해결하는 방법 중 하나는 커스텀 태그를 사용하는 것이다.

 

커스텀 태그를 사용해 얻을 수 있는 장점은 재사용을 할 수 있고, 쉽고 단순한 JSP 코드 작성, 코드의 가독성을 향상할 수 있다.

태그 파일을 이용한 커스텀 태그 구현에 대해 알아볼 것이다.

 

태그 파일은 JSP 페이지와 동일한 JSP문법을 사용해서 커스텀 태그로 동작할 수 있도록 만들어진 소스 코드이다.

즉, JSP 페이지를 작성하듯 태그 파일을 만들 수 있고,

JSP 페이지에서는 커스텀 태그를 사용하는 것과 동일한 방법으로 태그 파일을 사용할 수 있다.

 

태그 파일에서 사용할 수 있는 디렉티브는 다음과 같다.

tag JSP 페이지의 page 디렉티브와 동일. tag 디렉티브는 태그 파일의 정보를 명시한다.
taglib 태그 파일에서 사용할 태그 라이브러리를 명시할 때 사용. 
include 태그 파일에 특정한 파일을 포함시킬 때 사용. 단, 태그 파일에 포함되는 파일은 태그 파일에 알맞은 문법으로 작성.
attribute 태그 파일을 커스텀 태그로 사용할 때 입력받을 속성을 명시.
variable EL 변수로 사용할 변수에 대한 정보를 지정.

 

태그 파일의 위치는 WEB-INF 폴더나 WEB-INF 폴더의 하위 폴더에 위치한다. 

 

태그를 사용하려면 JSP 페이지에 taglib 디렉티브를 추가했어야 했는데,

커스텀 태그는 taglib 디렉티브의 uri 속성 대신 tagdir 속성을 사용해 태그 파일이 위치한 폴더 경로를 입력한다.

<%@ taglib prefix="my" tagdir="/WEB-INF/tags/13tag" %>

 

ex1)

01tag.jsp
t01tag.tag - console


몸체 내용 처리

 

몸체 내용을 전달하는 방법 중 <jsp:doBody> 액션 태그를 이용해 몸체 내용을 출력하거나 EL 변수로 저장할 수 있다.

 

<jsp:doBody /> - 몸체로 전달받은 내용을 그대로 출력한다.

<jsp:doBody var="변수명" scope="영역" /> - 몸체로 전달받은 내용을 var 속성으로 지정한 EL 변수에 저장한다.

 

ex1)

03tag-body.jsp
t03.tag - console

 

ex2)

04body-ex.jsp
t04dangerbutton.tag - console

 

ex3)

06taglib-ex.jsp
t06loopFive.tag - console

-> tag 파일에서 코어 태그와 함수 태그를 사용할 수 있다.


태그 파일의 속성 설정 방법

 

JSTL의 <c:if> 태그나 <c:forEach> 태그를 보면 test, var, items 등의 속성을 이용해 태그를 실행하는 데 필요한 값을 전달받는다.

태그 파일도 속성을 이용해서 태그 파일을 실행하는 데 필요한 값을 전달받는다.

 

태그 파일은 attribute 디렉티브를 사용해서 속성 정보를 설정한다. 

attribute 디렉티브는 커스텀 태그가 허용하는 속성에 대한 정보를 설정한다. attribute 디렉티브의 속성은 다음과 같다.

description 속성에 대한 설명을 입력.
name 속성의 이름을 입력. 
required 속성의 필수 여부를 지정. 기본 값은 false. 필수일 경우 true.
rtexprvalue 속성값을 표현식을 사용할 수 있는지 여부 지정. 기본 값은 true.
type 속성값의 타입을 명시. 기본 값은 java.lang.String 이다.
fragment <jsp:attribute> 액션 태그로 속성값을 전달할 때 이 값을 true로 지정.

 

attribute 디렉티브의 사용방법은 아래와 같다.

<%@ attribute name="이름" type="java.lang.String" %>

<%@ attribute name="이름" type="java.lang.Object" %>

 

ex1)

07attribute.jsp
t07.tag - console

 

ex2)

09attribute-ex.jsp
t09colorAlign.tag
console

 

ex3) String, Integer 타입 

10attribute-type.jsp
t10.tag - console

 

ex4) Integer 타입

11attribute-type-ex.jsp
t11gugudan.tag - console

 

ex5) 배열 타입 

12type-array.jsp
t12.tag - console

 

ex6) 자바 빈 타입

Bean06
13type-object.jsp
t13.tag - console

 

ex7) List 타입

15type-ex.jsp
t15.tag - console

 

ex8) Map 타입

16type-ex.jsp
t16.tag
console


tag 디렉티브는 태그 파일과 관련된  설정 정보를 포함하는데, tag 디렉티브에서 사용할 수 있는 속성은 다음과 같다.

display-name 태그 파일을 도구에서 보여줄 때 사용될 이름을 지정.
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 속성과 동일.

 

이 중에서 dynamic-attributes 예제를 살펴볼 것이다.

위에서 <%@ attribute name="이름" type="java.lang.String" %> 으로 attribute 하나하나 저장해주었는데,

dynamic-attributes를 사용하면 Map 객체로 사용할 이름을 지정해 여러 속성을 저장할 수 있다.

또한, EL에서 변수 이름으로 사용할 수 있다.

 

ex1)

17dynamic-attribute.jsp
t17.tag - console

 

ex2)

18dynamic-attributes-ex.jsp
t18.tag - console


 

태그 파일에서 사용 가능한 기본 객체

 

jspContext - pageContext가 제공하는 setAttribute(), getAttribute() 메서드를 그대로 제공하며, 각 속성과 관련된 작업을 처리한다.

request, response, session, application, out - 모두 JSP 페이지의 기본 객체와 동일하다.

 

ex1)

19request.jsp
t19.tag - console

-> page영역은 저장이 되지 않은 것을 볼 수 있다.

 

 

 

감사합니다.

 

*m1 맥북을 사용 중입니다.*

 

 

728x90
반응형