자주 사용하는 기능을 커스텀 태그로 구현하고 표준화한 커스텀 태그의 라이브러리
변수의 생성/출력/제거, 조건문, 순환문
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl.core" %>
변수를 선언하고 값을 초기화함
<c:set var="변수명" value="값" [scope="page|request|session|application"] />
<!-- EL과 함께 사용하는 경우 -->
<c:set var="context" value="${pageContext.request.contextPath}">
<a href="${context}/cSet1.jsp">
<!-- JSTL 변수는 -->
<c:set var="math" value="98"/>
<!-- 스크립트 요소 내에선 사용할 수 없고 -->
<%=math %>
<!-- EL에서는 사용 가능 -->
${math}
<!-- 스크립트릿에서 생성된 자바 변수는 -->
<% int score=94; %>
<!-- EL에서 바로 사용 불가능 -->
${score}
<!-- JSTL 변수로 변경해 사용 -->
<c:set var="score" value=<%=score %>"/>
변수, 숫자, 문자열 출력
<c:put value="출력 대상" default="기본값" [ escapeXml="특수문자 코드 처리방법" ] />
생성된 변수를 제거
<c:remove var="제거할 변수" [ scope="page|request|session|application" ] />
예제
<c:set var="hero" value="이순신" scope="request"/>
<c:set var="hero" value="강감찬" scope="session"/>
1. hero : <c:out value="${hero}"/> <br>
2. hero : <c:out value="${sessionScope.hero}"/> <br>
<c:remove var="hero" scope="request" />
3.hero : <c:out value="${hero}"/> <br>
<!-- 출력물
1. hero : 이순신
2. hero : 강감찬
3. hero : 강감찬
-->
단일 조건문 (if문과 유사) | 제어태그
<c:if test="조건식" [var="변수명"] [scope="page|request|session|application" ] />
다중 조건문 (if-else문과 유사) | 제어태그
<c:choose>
<c:when test="조건식1">
<!-- true면 수행되는 라인 -->
</c:when>
'''
<c:otherwise>
<!-- false면 수행되는 라인 -->
</c:otherwise>
</c:choose>
순환문 (for문과 유사) | 순환태그
1) 반복횟수를 지정하는 형식
<c:forEach [var="변수"] begin="시작 값" end="마지막 값" step="증가 값">
</c:forEach>
2) 순환문을 작성하는 태그
<c:forEach var="변수" items="컬렉션" [varStatus="상태정보"] [begin="시작값"] [end="마지막값"] [step="증가값"]>
<!-- 반복처리할 내용 -->
</c:forEach>

문자열을 특정 문자로 구분해 분리한 후 분리된 문자만큼 순환 | 순환태그
<c:forTokens [var="변수"] items="문자열" delimiter="분리자" [varStatus="상태정보"] [begin="시작값"] [end="마지막값"] [step="증가값"]>
<!-- 반복 처리할 내용 -->
</c:forTokens>
(try문과 유사) | 오류처리
지정한 URL로 포워딩을 수행
<c:redirect url="오쳥할 문서">
<c:param name="파라미터1" value="값1"/>
'''
</c:redirect>
<c:redirect url="요청할 문서">
<c:param name="파라미터1"> 값1 </c:param>
'''
</c:redirect>
포워딩할 url 정보를 저장하는 변수 선언
<c:url var="변수" value="URL 정보">
<c:param name="파라미터1" value="값1"/>
'''
</c:url>
<c:url var="변수" value="URL 정보">
<c:param name="파라미터1"> 값1 </c:param>
'''
</c:url>
<c:url>은 포워딩할 문서의 정보만 저장할 뿐 포워딩은 수행하지 않음
포워딩 하려면 <c:redirect> 태그를 함께 사용해야 함
실행결과를 현재 문서에 포함하는 기능
<c:import url="URL 정보">
<c:param name="파라미터1" value="값1" />
'''
</c:import>
<c:import url="URL 정보">
<c:param name="파라미터1"> 값1 </c:param>
'''
</c:import>
숫자, 날짜의 출력 형식을 지정
<%@ taglib prefix="fmt" uri="http://java.sum.com/jsp/jstl/jmt" %>
날짜와 시각 정보를 다양한 형식으로 출력
<fmt:formatDate value="Date객체" type="출력정보" dateStyle="값" timeStyle="값" pattern="값" />
숫자의 출력 형식 지정
<fmt:formatNumber value="숫자정보" type="출력형식" groupingUsed="천단위 기호" currencyCode="통화코드" currencySymbol="통화기호" pattern="패턴" />
지정한 국가에서 사용되는 날짜, 시간, 통화
<fmt:setLocale value="로케일 코드" />
<fmt:setLocale>은 마지막 태그가 없음
날짜, 시간 정보를 지정한 로케일의 시간대로 계산해 출력
<fmt:timeZone value="지역이름">
<!-- 출력할 내용 -->
</fmt:timeZone>
지역이름은 java.util.timeZone 객체의 getAvailableDs() 메서드를 사용해 추출할 수 있음.
마지막 태그가 없으면 태그의 다음 라인부터 지정한 지역의 형식이 적용
-> 다른 <fmt:setTimeZone> 태그가 나타나면 그위치부터 새로 지정된 지역 적용
Post 방식으로 전달되는 데이터를 인코딩할 수 있음
<fmt:requestEncoding value="문자집합" />
주로 문자열을 다루는데 사용
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
함수 라이브러리의 함수는 EL을 사용해 표현
-> ${fn:함수}
