JSTLJSTL
JSTL 개요 Custom Tag 의 표준 많은 JSP 어플리케이션을 간단한 태그로 캡슐화 JSTL 을 사용하면 작업을 수행하는 코드들을
태그로 간략화할 수 있음 . 가독성이 좋아짐 . JSTL 은 JSP 페이지의 로직을 담당하는 부분인
if, for, while, 데이터베이스 처리 등과 관련된 표준 커스텀 태그를 제공
모든 태그는 시작태그와 종료태그가 쌍으로 이루어짐 .
비교
JSTL 을 사용하기 위한 환경설정
http://jakarta.apache.org 사이트 접속 Jakarta-taglibs-standard-1.1.2.zip 파일
다운로드 압축 해제 후 lib 폴더에서
jstl.jar,standard.jar 복사 톰갯홈 \webapps\ROOT\WEB-INF\lib 로
붙여넣기
JSTL 1.1 라이브러리
라이브러리 URI 접두어 예시
Core( 코어 )기능 : 변수설정 , 제거 , 흐름제어 , URL 사용
http://java.sun.com/jsp/jstl/core C <c:tagname …>
XML Processing기능 : 변수설정 , 제거 , 흐름제어 , XML 변환
http://java.sun.com/jsp/jstl/xml X <x:tagname …>
|18N capable formatting기능 : 국가에 따른 메시지처리 , 숫자 /날짜 형식
http://java.sun.com/jsp/jstl/fmt fmt <fmt:tagname …>
Datatbase access(SQL)기능 :SQL 쿼리 처리
http://java.sun.com/jsp/jstl/sql sql <sql:tagname …>
Function( 함수 )기능 : 함수 지원
http://java.sun.com/jsp/jstl/functions
fn fn:functionName(…)
JSTL core
core( 코어 ) 변수선언 , 삭제 등 변수와 관련된 작업 및 if 문 , for
문 등과 같은 제어문 , URL 처리등에 사용
코어 태그 라이브러리 사용 <%@ tablib prefix=“c” uri=
http://java.sun.com/jsp/jstl/core” %> 태그 라이브러리 정보
Display Name : JSTL core Version : 1.1 Short Name : c URI : http://java.sun.com/jsp/jstl/core
Jstl core Tag Summary (1)
태그 설명
Catch ∙ body 위치에서 실행되는 코드의 예외를 잡아냄 .∙ <c:catch> 태그로 사용됨 .
Choose ∙ 자바의 switch 문과 같지만 , 조건에 문자열 비교도 가능∙ 한 개 이상의 <when> 과 한 개의 <otherwise> 서브 태그를 가짐 .∙ <c:choose> 태그로 사용됨 .
if ∙ 조건문 사용시 씀 .∙ <c:if> 태그로 사용됨 .
import ∙ 웹 애플리케이션 내부의 자원과 http, ftp 와 같은 외부에 있는 자원을 가져옴 .∙ 자원을 가공할 수도 있고 , 편집도 가능 .∙ <c:import> 태그로 사용됨 .
forEach ∙ 객체 전체에 걸쳐 반복 실행시 사용∙ <c:forEach> 태그로 사용됨 .
forTokens ∙ 자바의 StringTokenizer 클래스와 동일∙ <c:forToken> 태그로 사용됨 .
out ∙ JSP 표현식을 대체하는 것으로 사용됨 .∙ <c:out> 태그로 사용됨 .
Jstl core Tag Summary (2)
태그 설명
otherwise ∙ <choose> 의 서브 태그로 <when> 태그 다음에 표시되는 것으로 조건을 만족하지 못하는 경우에 사용∙ <c:otherwise> 태그로 사용됨
param ∙ <import> 태그의 URL 뒤에 파라미터로 붙여서 사용할 수 있음 . ∙ <c:param> 태그로 사용됨 .
redirect ∙ response.sendRedirect() 를 대체하는 태그로 , 지정한 다른 페이지로 이동
∙ <c:redirect> 태그로 사용됨 .
remove ∙ JSP 의 removeAttribute() 와 같은 역할 ∙ (page|request|session|application) 범위의 변수 ( 속성 ) 를 제거 함 . ∙ <c:remove> 태그로 사용됨 .
set ∙ JSP 의 setAttribute() 와 같은 역할 ∙ (page|request|session|application) 범위의 변수 ( 속성 ) 를 설정 함 . ∙ <c:set> 태그로 사용됨 .
url ∙ 쿼리 파라미터로부터 URL 을 생성함 . ∙ <c:url> 태그로 사용됨 .
when ∙ <choose> 의 서브 태그로 조건을 만족하는 경우에 사용 함 . ∙ <c:when> 태그로 사용됨 .
jstlEx1.jsp
9
<c:set var=“varName” value=“${value}” /><c:set var=“varName” value=“${value}” scope=“request” />
jstlEx2.jsp
jstlEx3.jsp
<c:forEach var=:k: begin=“1” end=“100”> <c:out value=“${k%2==0}”/></c:forEach>
jstlEx4.jsp
<c:forTokens var=“color” items=“red,yellow,black” delims=“,”> <c:out value=“${color}” /></c:forTokens>
jstlEx5.jsp
JSTL XML
xml 을 처리하기 위한 것으로 xml 출력 , 흐름제어 , XML 변환등의 작업에 사용
XML 태그 라이브러리 사용 <%@ taglib prefix=“x”
uri=http://java.sun.com/jsp/jstl/xml” %> 태그 라이브러리 정보
Display Name : JSTL xml Version : 1.1 Short Name : x URI : http://java.sun.com/jsp/jstl/xml
XML Tag Summary(1)
태그 설명
choose <x:choose> <x:when select=“XPathExpression”>body 내용 </x:when> <x:otherwise>body 내용 </x:otherwise></x:choose>
out ∙ Xpath 에 지정한 패턴에 따라 xml 내용 출력<x:out select=“XPathExpression” [escapeXml=“{true|false}”]/>
if ∙ 조건문에 사용 <x:if select=“XPathExperssion” var=“varName” [scope=“{page|request|session|application}”]/>
forEach ∙ Xpath 에 따라서 해당하는 엘리먼트 수만큼 반복 수행<x:forEach [var=“varname”] seelct=“XPathExpression”> body 내용</x:forEach>
otherwise ∙ 조건이 false 일 때 수행
param ∙ 파라미터 사용 시에 씀 . <x:param name=“name” />
XML Tag Summary(2)
태그 설명
parse ∙ xml 문서를 읽어서 파싱함 .
<x:parse xml=“XMLDocument” {var=“var” [scope=“scopeName”]|varDom=“var” [scopeDom=“scopeName”]}
[systemid=“systemid”] [filter=“filter”]/>
set ∙ Xpath 에 따라 선택된 내용을 변수에 저장
<x:set select=“XPathExpression” var=“varName” [scope=“{page|request|session|application}”]/>
transform ∙ xml 과 xslt 파일을 결합해서 새로운 형식의 문서를 생성 함 .
<x:transform xml=“XMLDocument” xslt=“XSLTStylesheet” [xmlSystemid=“XMLSystemid”] [xsltSystemid=“XSLTSystemid”][{var=“varName” [scope=“scopeName”]|result=“resultObject”}]/>
when ∙ 조건이 true 일 때 수행 함 .
jstlEx10.jsp
커스텀 태그
사용자가 직접 자신만의 태그를 만들어 사용할 수 있는 기술
커스텀 태그 라이브러리 사용자가 정의한 커스텀 태그를 모아 놓은 것 .
이점 한 번 작성하면 언제든지 필요한 곳에서 재사용이 가
능 , 타 사용자에게 배포하여 재사용될 수 있음 프로그램의 가독성 향상 JSP 의 스크립트를 사용하지 않으므로 자바 문법에 거의
의존하지 않기 때문에 JSP 페이지의 작성이 쉬움 . 디자이너와 프로그래머가 각자의 일을 분담할 수 있어
효율적인 작업이 가능
커스텀 태그 작성 방법① 커스텀 태그를 정의하는 자바 파일 작성② 자바의 클래스를 커스텀 태그로 사용하기 위해
TLD(Tag Library Descriptor) 파일에 등록 ( 정의 )③ JSP 페이지에서 해당 커스텀 태그를 사용할 수
있도록 하기 위해 wdb.xml 에 등록④ JSP 페이지에서 해당 커스텀 태그 사용
자바 클래스 파일
(.class)
TLD 파일(.tld)
web.xmlJSP 페이지
(.jsp)
커스텀태그 정의( 구조 , 로직 )
자바 클래스 파일을 태그로 사용할 수
있도록 등록
JSP 페이지에서 사용할 수 있도록 TLD 파일 등록 커스텀 태그 사용
.java 파일 작성 후 컴파일
파일위치 자바 클래스 파일
웹 애플리케이션 폴더 \WEB-INF\classes 폴더 내에 위치 ( 모든 자바 클래스 파일은 이 위치에 존재해야 함 )
TLD 파일 웹 애플리케이션 폴더 \WEB-INF\tlds 폴더 내에 위치
web.xml 웹 애플리케이션 폴더 \WEB-INF 폴더 내에 위치 이 파일을 수정해서 사용함 .
JSP 페이지 웹 애플리케이션 폴더 \폴더
환경설정
Javax.servlet.jsp.tagext 패키지가 필요하며 이 패키지는 jsp-api.jar 파일이 필요한데 톰캣이 기본적으로 제공
톰캣홈 \common\lib 폴더 내에 jsp-api.jar를 복사
자바폴더 \lib 에 붙여넣기 제어판에서 환경변수 CLASSPATH 편집
~\jdk1.5.07\lib\jsp-api.jar 를 추가
커스텀 태그의 설명 및 작성
커스텀 태그 작성 Tag, InterationTag 인터페이스를 미리 구현해놓은 TagSupport 클래스 또는
BodyTag 인터페이스를 미리 구현해놓은 BodyTagSupport 클래스를 상속받아 사용
Tag Interface Method Summary
Int doEndTag() 끝 태그를 만날 때 실행
Int doStartTag() 시작 태그를 만날 때 실행
Tag getParent() 부모 태그를 구함
Void
Release() 커스텀 태그를 사용하지 않을 때 실행
Void
setPageContext(PageContext pc)
커스텀 태그가 포함된 JSP 페이지의 컨텍스트를 전달받음
void setParent(Tag t) 해당 태그의 부모 태그가 존재할 때 부모 태그를 설정
int doAfterBody() 태그의 body 내용을 처리한 뒤에 실햄
void doInitBody() Body 를 수행하기 위한 준비를 함
void setBodyContent(BodyContent b)
Bodycontent 속성을 지정
WelcomeTag.java
WelcomeTag.tld
태그라이브러리에 대한 설명부분
태그라이브러리 버전 : 필수요소태그라이브러리 이름 : 필수요소
∙ 커스텀 태그당 1 개씩 매핑됨 . ∙ <body-content> 태그는
커스텀 태그의 body 가 존재하지 않을 때 empty 로 입력 . 필수조건
web.xml
web.xml
welcomeTag.jsp
참고문헌 JSP 2.0 웹프로그래밍 , 삼양미디어 , 김은옥 저
16 장 JSTL(JSP Standard Tag Library) 17 장 커스텀 태그 (Custom Tag)