JSTL
JSTL 개요 Custom Tag의 표준 많은 JSP 어플리케이션을 간단한 태그로 캡슐화 가독성이 좋아짐. 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 <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페이지의 작성이 쉬 움. 디자이너와 프로그래머가 각자의 일을 분담할 수 있어 효율적인 작업이 가능
자바 클래스 파일을 태그로 사용할 수 있도록 등록 JSP페이지에서 사용할 수 있도록 TLD 파일 등록 커스텀 태그 작성 방법 커스텀 태그를 정의하는 자바 파일 작성 자바의 클래스를 커스텀 태그로 사용하기 위해 TLD(Tag Library Descriptor)파일에 등록(정의) JSP 페이지에서 해당 커스텀 태그를 사용할 수 있 도록 하기 위해 wdb.xml에 등록 JSP 페이지에서 해당 커스텀 태그 사용 자바 클래스 파일 (.class) TLD 파일 (.tld) web.xml JSP 페이지 (.jsp) 커스텀태그 정의 (구조, 로직) 자바 클래스 파일을 태그로 사용할 수 있도록 등록 JSP페이지에서 사용할 수 있도록 TLD 파일 등록 커스텀 태그 사용 .java 파일 작성 후 컴파일
파일위치 자바 클래스 파일 TLD 파일 web.xml JSP 페이지 웹 애플리케이션 폴더\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() 끝 태그를 만날 때 실행 doStartTag() 시작 태그를 만날 때 실행 Tag getParent() 부모 태그를 구함 Void Release() 커스텀 태그를 사용하지 않을 때 실행 setPageContext(PageContext pc) 커스텀 태그가 포함된 JSP 페이지의 컨텍스트를 전달받음 void setParent(Tag t) 해당 태그의 부모 태그가 존재할 때 부모 태그를 설정 int doAfterBody() 태그의 body 내용을 처리한 뒤에 실햄 doInitBody() Body를 수행하기 위한 준비를 함 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)