관리 메뉴

I LOVE EJ

JSP태그라이브러리 본문

Web Development/JSP

JSP태그라이브러리

BeOne 2007. 10. 15. 15:35

JSP태그라이브러리


개요
웹프로그래밍에서의 가장 큰 문제점은 HTML소스와 자바소스가 뒤죽박죽되어 코드의 가독성이 떨어지고
유지보수가 어렵다는 점이다. 다시 말해 보여주기와 구현하기를 나누어 주는 것이 좋다는 말이다.
JSP에서는 빈즈와 커스텀 태그를 사용해서 프로그램 부분을 나눌 수 있는데 특히 데이터 처리보다는
프리젠테이션 로직에 들어가는 코드를 보기 쉬운 태그로 줄여주는 커스텀 태그에 대해 알아보자.



커스텀 태그의 정의
정식명칭은 JSP 태그 라이브러리(JSP Tag Library)이다. 또는 커스텀 태그(Custom tags)라고 불리기도
한다. JSP소스 속에 박혀 있었던 스크립틀릿을 들어내어 태그 핸들러 속에 집어넣은 것으로
JSP페이지에서 커스텀 태그를 사용할 때는 해당 태그 핸들러를 호출해서 동작한다.



태그의 동작구조
JSP페이지의 처리 과정은 다음과 같다.


1.파싱 → 2.검증 → 3.변환 → 4.실행



커스텀 태그 동작 구조 다이어그램


jsp소스가 서블릿으로 변경되는 시점에서 커스텀 태그가 나오면 taglib 지시자에 지정된 tld에서 해당
태그 핸들러를 찾아서 연결한다.
태그가 열릴 때 태그 핸들러의 doStartTag()메소드가 실행된다.
여는 태그와 닫는 태그 사이에 몸체가 있을 경우 doAfterBody()메소드가 이 부분을 처리한다.
이것을 실행하기 위한 조건은 tld에서 <body-content>태그에 "empty"가 아닌 다른 것이 있어야 되고,
태그 핸들러의 doStartTag()메소드에서는 SKIP_BODY가 반환되지 않아야 한다.
EVAL_PAGE가 호출된 경우 doEndTag() 이후의 나머지 부분을 처리한다.



EVAL_BODY_INCLUDE와 EVAL_BODY_BUFFERED의 차이는 기존의 출력 스트림을 사용하느냐 아니면 새로운
버퍼를 만들어서 출력시키느냐이다.
EVAL_BODY_INCLUDE가 호출된 후에는 바로 doAfterBody()와 doEndTag()가 차례로 실행된다.
EVAL_BODY_BUFFERED가 호출된 후에는 setBodyContent()와 doInitBody()가 실행되고, 이어서
doAfterBody()와 doEndTag()가 실행된다.



body부분을 반복하여 실행하려면 doAfterBody()메소드를 실행한 뒤 EVAL_BODY_AGAIN을 반환한다.
일정조건에 따라 반복을 마칠 경우에는 SKIP_BODY를 반환한다.