13. 표준 태그 라이브러리(JSTL)
1) JSTL(JSP Standard Tag Library)
- 커스텀 태그 중 자주 사용되는 태그를 모아 표준화한 라이브러리
- 커스텀 태그: JSP에서 필요에 따라 새로운 태그를 추가할 수 있는 기능
- JSTL 다운로드(다운로드 후 WEB-INF/lib 디렉토리에 복사)
https://mvnrepository.com/artifact/javax.servlet/jstl/1.2
2) JSTL이 제공하는 태그
- 코어(c) : 변수 지원, 흐름 제어, URL 처리
- XML(x) : XML 코어, 흐름 제어, XML 변환
- 국제화(fmt) : 지역, 메시지 형식, 숫자 및 날짜 형식
- 데이터베이스(sql) : SQL
- 함수(fn) : 컬렉션 처리, String 처리
* 각각 taglib 디렉티브를 추가해야 함
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/ URI " %>
-> URI 자리에 각각 core, xml, fmt, sql, functions 를 삽입
3) 코어 태그
- 논리 처리에 사용되는 스크립트 코드를 대체하는 태그 제공
- JSP 페이지에 taglib 디렉티브를 추가해야 함
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
*코어 태그 라이브러리
- 변수 지원
set : 변수 설정
remove : 변수 제거
- 흐름 제어
if : 조건에 따라 내부 코드를 수행
choose : 다중 조건 처리시 사용
forEach : 컬렉션이나 Map의 각 항목을 처리할 때 사용
forTokens : 구분자로 분리된 각각의 토큰을 처리할 때 사용
- URL 처리
import : URL을 사용해서 다른 자원의 결과 삽입
redirect : 지정한 경로로 리다이렉트
url : URL을 재작성
catch : Exception을 처리할 때 사용
out : JspWriter에 내용을 출력
4) 변수지원 태그
- JSTL이 지원하는 태그에서 사용할 수 있는 변수를 설정하기 위해 사용
- <c:set> 태그 : EL변수의 값이나 프로퍼티 값을 지정할 때 사용
- <c:set> 태그로 EL변수 생성 형식
<c:set var="변수명" value="값" [scope="영역"] /> // scope 속성에서 지정한 영역에 값 저장
<c:set var="변수명" [scope="영역"]>값</c:set> // scope: page, request, session, application
- <c:set> 태그로 객체의 프로퍼티 값 설정
<c:set target="대상" property="프로퍼티명" value="값" />
<c:set target="대상" property="프로퍼티명">값</c:set>
target: 프로퍼티 값을 설정할 대상 객체 지정(자바빈 객체 or Map)
property: 설정할 프로퍼티의 이름 지정(자바빈 객체의 경우 set 메소드 필수)
value: 프로퍼티의 값 지정
*타겟이 EL변수일 경우 ${EL변수}의 형태로 설정
- <c:set> 태그에서 value 속성의 값을 null로 설정 가능
-> 변수값 설정 태그는 PageContext.removeAttribute()를 이용해서 변수 삭제
-> 프로퍼티 값 설정 태그는 자바빈 객체의 경우 null, Map 객체의 경우 키 삭제
5) <c:remove> 태그
- set 태그로 지정한 변수 삭제시 사용
- 형식: <c:remove var="varName" [scope="영역"] />
*scope 미지정시 동일한 이름으로 저장된 모든 영역의 변수 삭제
6) 조건문 <c:if>, <c:choose> 태그
- <c:if> 태그: 단순한 if 블록 대체
<c:if test="조건" [var="result" scope="sc"]> // 조건 <%=%> 표현식, ${} EL, 정적 문자열 가능
코드 // 조건이 true일 경우 코드 실행
</c:if>
*var, scope는 필수 항목은 아니며 var 속성으로 지정한 EL변수에 연산 결과 저장 가능
- <c:choose> 태그: 자바의 switch와 if-else의 혼합 형태
<c:choose>
<c:when test="조건1">
코드1 // 조건1이 true일 경우 실행
</c:when>
<c:when test="조건2">
코드2 // 조건2가 true일 경우 실행
</c:when>
<c:otherwise>
코드3 // 조건1, 2가 false일 경우 실행
</c:otherwise>
</c:choose>
7) 반복문 <c:forEach>, <c:forTokens> 태그
배열, Collection, Map에 저장된 값을 순차 처리
- <c:forEach> 태그의 속성
var: 사용할 변수명(String)
items: 반복 처리할 데이터(Collection, Iterator, Enumeration, Map, Array)
varStatus: 루프 상태를 저장할 EL 변수명(String)
begin: 시작 인덱스 값(int)
end: 끝 인덱스 값(int)
step: 인덱스 증가 값(int)
* var, varStatus는 표현식/EL 사용 불가
- <c:forEach> 태그의 사용 형태
형태1
<c:forEach var="변수" items="아이템"> // items 속성에 배열, Collection, Map
코드 // 코드 내 ${변수} 사용
</c:forEach>
형태2
<c:forEach var="i" begin="1" end="10"> // 자바의 for 반복문 형태
코드 // ${i} 사용
</c:forEach>
- forEach의 varStatus 속성: 속성에 명시한 변수를 다룰 수 있음
index: 인덱스
count: 반복 횟수
begin: begin 속성값
end: end 속성값
step: step 속성값
first: 첫 번째 실행일 경우에만 true
last: 마지막 실행일 경우에만 true
current: 컬렉션 중 현재 루프에서 사용할 객체
-<c:forTokens> 태그: StringTokenizer 클래스와 같은 기능을 제공하는 태그
- items 속성으로 전달받은 문자열을 구분자를 이용해서 나누고 구분한 각 문자열을 var 속성에 명시한 변수에 저장
- <c:forTokens> 태그의 형태
<c:forTokens var="token" items="문자열" delims="구분자">
${token}의 사용
</c:forTokens>
8) URL 처리 태그
- <c:url> 태그 : URL 생성
<c:url value="URL" [var="varName"] [scope="영역"]> // var 속성 추가시 변수 선언
<c:param name="이름" value="값" /> // 파라미터 추가 가능
</c:url>
- <c:redirect> 태그 : 페이지 이동
<c:redirect url="URL" [context="컨텍스트경로"]>
<c:param name="이름" value="값" />
</c:redirect>
9) 기타 코어 태그
- <c:out> 태그 : JspWriter에 데이터 출력시 사용
<c:out value="value" [escapeXml="(true|false)"] [default="기본값"] />
<c:out value="value" [escapeXml="(true|false)"]>기본값</c:out>
value : JspWirter에 출력할 값, java.io.Reader의 종류일 시 Reader로 읽은 데이터를 출력
escapeXml : true 값을 가질 경우 < > & ' " 특수문자들을 인코딩(기본값 true)
default : value가 null일 때 사용될 값 지정
- <c:catch> 태그 : 발생된 Exception을 EL변수 저장시 사용
<c:catch var="exName">
Exception 발생 가능 코드
</c:catch>
- <c:catch> 태그 사용 예시
<c:catch var="exceptionVar">
Exception 발생 가능 코드
</c:catch>
<c:if test="{ex!=null}">
Exception 발생!
${exceptionVar}
</c:if>
10) 국제화 태그
- 특정 지역에 따라 알맞은 메시지를 출력해야할 때 사용
- Locale 지정 태그
<fmt:setLocale> : 국제화 태그들이 사용할 Locale 지정
<fmt:requestEncoding> : request parameter의 인코딩 지정
- Locale 지정 태그 예시
<fmt:setLocale value="ko" scope="request" />
value: 언어코드_국가코드or두글자 국가코드 // null일시 JVM 기본, web.xml 지정 Locale 사용
<fmt:requestEncoding value="utf-8" />
11) 메시지 처리 태그
- 메시지를 처리할 때 사용
<fmt:bundle> : 태그 몸체에서 사용할 리소스 번들 지정
<fmt:message> : 메시지를 출력
<fmt:setBundle> : 특정 메시지 번들을 사용할 수 있도록 로딩
- 메시지 처리 태그 사용 예시
<fmt:bundle basename="resource.message">
...
<fmt:message key="GREETING" />
...
</fmt:bundle>
- bundle 태그 속성
basename: 리소스 번들 이름
prefix: message 태그의 key 속성의 값 앞에 자동으로 붙게될 문자열
- message 태그 속성
key: 읽어올 메시지의 키
var: 메시지를 저장할 변수명
scope: 변수가 저장되는 영역 지정
bundle: setBundle 태그를 사용해서 로딩한 번들로부터 메시지를 읽어올 때 사용
- <fmt:setBundle> 태그: 리소스 번들을 변수로 저장해서 자유롭게 사용
12) 숫자 및 날짜 포맷팅 처리 태그
- 숫자와 날짜를 포맷팅할 때 사용하는 태그
- <fmt:formatNumber> 태그 : 숫자를 양식에 맞춰 출력
- 사용 형식
<fmt:formatNumber value="숫자값"/>
value: 양식에 맞춰 출력할 숫자 지정
type: 값 타입 지정
pattern: 패턴 지정
currencyCode: 통화 코드 지정
currentSymbol: 통화 표현시 기호 표시
groupingUsed: 단위 구분 기호 사용 여부
var: 결과 저장할 변수 지정
scope: 변수 저장 영역 지정
- <fmt:parseNumber> 태그 : 문자열을 숫자로 변환
- 사용 형식
<fmt:parseNumber value="값"/>
value: 문자열 지정
type: value의 문자열 타입 지정
pattern: 패턴 지정
parseLocale: Locale 지정
integerOnly: 정수 부분만 파싱(기본값 false)
var: 결과 저장할 변수 지정
scope: 변수 저장 영역 지정
- <fmt:formatDate> 태그 : 다양하게 날짜 및 시간 출력
- 사용 형식
<fmt:formatDate value="날짜값" />
value: 값 지정
type: 날짜, 시간 타입 지정 // time, date, both
dateStyle: 정의된 날짜 스타일 지정
timeStyle: 정의된 시간 스타일 지정
pattern: 패턴 지정
timeZone: 시간대를 변경하고 싶을 때 사용
var: 결과 저장할 변수 지정
scope: 변수 저장 영역 지정
- <fmt:parseDate> 태그 : 문자열로 표시된 날짜와 시간 값을 파싱
- 사용 형식 및 속성은 formatDate와 같다.
13) JSTL이 제공하는 EL 함수
- length(obj) : 크기 반환
- toUpperCase(str) : 대문자 변환
- toLowerCase(str) : 소문자 변환
- substring(str, idx1, idx2) : str문자열을 idx1 ~ idx2까지 잘라서 반환
- substringAfter(str1, str2) : str1안에서 str2 이후의 문자열 반환
- substringBefore(str1, str2) : str1안에서 str2 이전의 문자열 반환
- trim(str) : 좌우 공백문자 제거
- replace(str, src, dest) : str의 src를 dest로 변환
- indexOf(str1, str2) : str1에서 str2가 위치한 인덱스 반환
- startsWith(str1, str2) : str1이 str2로 시작할 경우 true
- endsWith(str1, str2) : str1이 str2로 끝날 경우 true
- contains(str1, str2) : str1이 str2를 포함하고 있을 경우 true
- containsIgnoreCase(str1, str2) : 대소문자 구분없이 str1이 str2를 포함하고 있을 경우 true
- split(str1, str2) : str1을 str2 구분자로 분리해서 배열 반환
- join(array, str2) : array에 저장된 문자열을 합치고 값 사이에 str2 구분자 추가
- escapeXml(str) : XML 객체 참조에 해당하는 특수문자 처리
'프로그래밍 > JSP' 카테고리의 다른 글
[JSP 요약 정리] 14. MVC 패턴(Model-View-Controller Pattern) (0) | 2019.02.10 |
---|---|
[JSP 요약 정리] 12. 표현 언어(Expression Language) (0) | 2019.02.09 |
[JSP 요약 정리] 11. 세션(Session) (0) | 2019.02.09 |
[JSP 요약 정리] 10. 쿠키(Cookie) (0) | 2019.02.09 |
[JSP 요약 정리] 9.자바빈과 usbBean 액션 태그 (0) | 2019.02.09 |