커스텀 태그는 JSP 특징적 요소로, 고급 웹 프로그래밍을 하려면 꼭 알아둬야한다.
커스텀 태그는 JSTL 의 기본이 되는 개념이다. 완전한 MVC 패턴을 구현하려면 꼭 필요한 요소다.
커스텀 태그?
커스텀 태그란 원래 JSP 페이지에서 반복적인 프로그램 로직을 캡슐화하려고 고안된 것으로, 기본적으로 제공되는 태그 이외에 사용자가 확장한 태그라는 의미에서 붙여진 이름이다. JSP 서버에서는 커스텀 태그를 구현할 수 있다.
일반적으로 스크립트릿을 많이 사용하면 프로그램 로직과 디자인 부분이 섞여서 소스가 복잡해지고 관리하기가 어려워진다. 이를 해결하기 위해 나온 것이 '빈즈' !
하지만 빈즈는 소위 비지니스 로직에 해당하는 부분들에 대한 처리를 캡슐화는 할 수 있지만,
데이터를 화면에 표시하기 위해 필요한 프로그램적인 요소를 줄이는데는 크게 도움이 안된다.
커스텀 태그를 사용하는 이유?
1. 비즈니스 로직으로부터 화면 표현을 분리할 수 있다.
2. 비즈니스 로직의 캡슐화할 수 있다.
3. 보다 완벽한 MVC패턴을 구현할 수 있다.
캐스텀 태그 개발하는 방법
1. 태그 파일 기반의 개발 방법
2. 태그 핸들러 클래스 기반의 개발 방법
태그 기본 구조: 태그, 속성, 태그 바디
taglib 지시어
: jsp 지시어의 한 종류다. JSP 페이지에 공통으로 필요한 정보들을 기술하는 부분으로 , taglib 지시어는 커스텀 태그 사용을 위한 태그 파일 혹은 태그 라이브러리 기술자의 위치 등을 설정한다. 따라서 커스텀 태그를 사용하는 모든 JSP 페이지에 taglib지시어를 사용해야한다.
<%@ taglib uri="/" prefix=""%>
uri => tld 파일의 위치를 지정한다. 대개 태그 라이브러리를 관리하는 단체 uri 가 온다. 로컬 디렉터리에 태그 라이브러리 기술자 파일이 위치하는 경우 경로를 넣어주면 된다.
태그 파일로 구현된 커스텀 태그를 사용하려면 uri 대신 tagdir 을 쓴다
prefix=> 커스텀 태그를 구분하기 위한 이름으로, 한 페이지에 커스텀 태그를 사용할 경우 prefix를 이용하면 혼동을 피할 수 있다.
본문에서는
<prefix:태그이름>태그바디</prefix:태그이름>
- 태그 파일 기반 커스텀 태그
태그 파일을 이용하면 비교적 간단하고 JSP 페이지 개발과 유사한 구조로 태그 파일을 만들 수 있어 간단한 태그를 구현하는 데 많이 이용된다. 태그 파일 기반의 커스텀 태그는 태그 파일만 구현하면 되는 간단한 구조로 JSP 파일에서는 taglib 지시어만 추가하면 사용할 수 있다. JSP 파일과 거의 동일한 구조로, JSTL 을 함께 사용한다.
- 태그 파일: .tag 파일로서, 몇 가지 제약 사항을 제외하고는 대부분의 JSP 파일과 구성이 동일하다. -JSP 파일: 커스텀 태그를 사용하려면 JSP 파일에 taglib 지시어를 설정한 후 커스텀 태그를 사용한다.
태그 파일의 구조태그 파일은 실제 태그의 기능을 구현하는 파일! JSP 와 유사한 방식으로 기술할 수 있다.
태그 파일에서 사용하는 지시어
taglib | JSP 에서의 taglib 지시어와 동일하다. 현재 태그 파일에서 다른 커스텀 태그나 JSTL 등을 사용하려면 해당 태그 라이브러리를 사용하기 위한 taglib 지시어를 작성한다. |
include | JSP에서 include 지시어와 동일하지만 포함되는 파일의 구조가 태그 파일의 구조를 따라야한다. |
tag | 새로운 지시어, page지시어와 유사. 현재 파일이 태그 파일이라는 것을 알리고 옵션을 설정한다. |
attribute | 작성하는 태그에 포함될 속성등을 정의한다. |
variable | 태그 내용에 필요한 표현 언어 변수를 선언한다. |
- 태그 핸들러 기반 커스텀 태그
태그 핸들러란? 커스텀 태그를 처리하는 객체
즉, 태그를 처리하는 별도의 자바 클래스를 이용해 커스텀 태그를 구현하는 방법이다.
태그 핸들러 기반 커스텀 태그 구성요소
구성요소 | 비고 |
태그 핸들러 클래스 ( Tag Handler Class) | 태그 파일의 경우, 별도 핸들러 클래스가 없다. |
태그 라이브러리 기술자 ( Tag Library Descriptor ) | 태그 파일의 경우 태그 파일이 기술자를 겸한다. |
taglib 지시어 ( taglib Directives) | 커스텀 태그를 사용하는 모든 JSP 에서 선언해야한다. |
태그 핸들러 클래스: 커스텀 태그를 실제 구현한 자바 클래스다. 태그 라이브러리 기술자에서 설계된 내용을 구현해야한다. 태그 라이브러리 기술자와 마찬가지로 태그 파일 기반의 커스텀 태그에서는 필요가 없다.
태그 라이브러리 기술자: xml 규격으로 커스텀 태그에 대한 구조를 정의하는 파일이다. .tld 파일로 만들어지며 태그 파일 기반의 커스텀 태그에서는 필요하지 않다.
taglib 지시어 : jsp 지시어의 한 종류, JSP 페이지에 공통으로 필요한 정보를 기술하는 부분이다. 커스텀 태그 사용을 위한 태그 파일 혹은 태그 라이브러리 기술자의 위치등을 설정한다. 따라서 커스텀 태그를 사용하는 모든 JSP 페이지에 taglib 지시어를 사용해야한다.
태그 핸들러 클래스의 구조
: 기본적으로 커스텀 태그 개발은 SimpleTag 인터페이스를 구현하는 것이지만, 보통은 SimpleTag 인터페이스를 구현하고 있는 SimpleTagSupport 클래스를 상속받아 자신만의 커스텀 태그를 만들게 된다.
SimpleTagSupport 클래스의 주요 메서드
메서드 | 설명 |
void doTag() | 시작 태그를 만나면 호출되는 메서드, 즉 실제 태그 기능을 정의하는 메서드이다. |
JspFragment getJspBody() | 태그 바디를 처리하려고 JSPFragment를 얻어오기 위한 메서드이다. JSPFragment 객체를 이용해 바디를 처리한다. |
JspContext getJspContext() | JspContext 를 얻어오는 메서드로써, out 객체의 참조 등 해당 JSP 로부터 다양한 정보를 얻을 수 있다. |
'프로그래밍언어 > WEB' 카테고리의 다른 글
JSTL (0) | 2020.06.26 |
---|---|
표현언어 (0) | 2020.06.26 |
빈즈 (0) | 2020.06.04 |
JSP-Servlet (0) | 2020.05.10 |
JSP : 내장객체 -session (0) | 2020.04.17 |