안녕하세요. 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)
몸체 내용 처리
몸체 내용을 전달하는 방법 중 <jsp:doBody> 액션 태그를 이용해 몸체 내용을 출력하거나 EL 변수로 저장할 수 있다.
<jsp:doBody /> - 몸체로 전달받은 내용을 그대로 출력한다.
<jsp:doBody var="변수명" scope="영역" /> - 몸체로 전달받은 내용을 var 속성으로 지정한 EL 변수에 저장한다.
ex1)
ex2)
ex3)
-> 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)
ex2)
ex3) String, Integer 타입
ex4) Integer 타입
ex5) 배열 타입
ex6) 자바 빈 타입
ex7) List 타입
ex8) Map 타입
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)
ex2)
태그 파일에서 사용 가능한 기본 객체
jspContext - pageContext가 제공하는 setAttribute(), getAttribute() 메서드를 그대로 제공하며, 각 속성과 관련된 작업을 처리한다.
request, response, session, application, out - 모두 JSP 페이지의 기본 객체와 동일하다.
ex1)
-> page영역은 저장이 되지 않은 것을 볼 수 있다.
감사합니다.
*m1 맥북을 사용 중입니다.*
'6개월 대장정 > JSP 개념' 카테고리의 다른 글
62일차 - [JSP] Servlet , MVC 패턴 (0) | 2021.11.23 |
---|---|
61일차 - [JSP] Bootstrap (0) | 2021.11.23 |
59일차 - [JSP] 코어 태그(2), 함수 태그 (0) | 2021.11.18 |
58일차 - [JSP] 표준 태그 라이브러리(JSTL), 코어 태그(1) (0) | 2021.11.17 |
57일차 - [JSP] 표현 언어(el) - 연산자 (0) | 2021.11.17 |