커스텀 태그란, JSP에서 기본적으로 제공하는 <jsp: > 태그 외 외부 라이브러리를 가져오고, 지시자를 통해 외부 라이브러리를 지정해준다.
대표적인 커스텀 태그 중 한가지.
JSTL library를 다운 받고, WEB-INF/lib에 넣어 IDE가 라이브러리를 가져올 수 있게 세팅한다.
JSTL Core
: 변수와 url, 조건문, 반복문 등의 로직과 관련된 JSTL 문법을 제공한다.
: <%@ taglib uri="http://java.sun.com/jsp/jstl/core> 를 통해 core library를 인식할 수 있게 작성해 주고, <%@ prefix="c">를 통해 core에 대한 명칭도 지정해줄 수 있다.
JSTL Format
: 메시지 형식이나 숫자, 날짜 형식과 관련된 포맷 방식 제공
: <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
JSTL Function
: trim, substring과 같은 여러 문자열 처리 함수 제공
: <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
1.<c : set>
: 변수를 선언할 때 사용한다.
<c : set var="num" value="1"/>
: 변수 num에 값 1을 선언한다.
<c : set var="str" value="JSP" scope="request"/>
: request영역에 변수 str선언한다.
2.<c : remove>
: 선언된 변수를 제거할 때 사용한다.
<c : remove var="num"/>
: 이전에 선언된 변수 num을 제거한다.
<c : remove var="str" scope="request"/>
: request영역에 존재하는 str을 제거한다.
<c: set> 태그와 <c: remove>태그의 차이점
<c:set>
태그는 영역설정 default값으로 page로 설정되어있지만,
<c : remove>
태그는 영역설정이 default값으로 모든영역으로 설정되어있다.
따라서, <c : remove>
태그에 영역설정을 하지 않으면 지정한 변수 모두가 제거되기 때문에 영역 설정이 반드시 필요하다.
3.<c : if>
: 조건문이 필요할 경우 사용하는 태그
<c : if test="조건">
<c : if test="${Integer.ParseInt(num1) > Integer.parseInt(num2)}">
실행문1
: num1 > num2일 경우 실행문1이 실행된다.
</c : if>
<c : if>
태그를 이용한 문자열 비교
<% 스크립틀릿 %>을 이용한 '=='문자열 비교는 문가능하지만 EL은 가능하다.
<c : if test="${str1 == str2}">
: Java에서 문자열 비교시 '=='비교는 불가능 하지만, EL태그를 이용한 '=='문자열 비교는 가능하다.
<c : if test="${str1 eq ste2}">
: str1 equal str2
<c : if test="${str1 ne ste2}">
: str1 not equal str2
<c: if>태그와 <c: if>태그의 else
<c : if test="num1>num2"> 실행문1 </c:if>
<c : if test="num1<num2"> 실행문2 </c:if>
: <c : if>
태그는 else가 존재하지 않기 때문에 else조건문을 사용해야 할 경우 반대조건은 <c : if>
태그로 작성하여 반대 실행문까지 작성해야한다.
4.<c : choose>
<c : when>
<c : otherwiese>
: 조건문
<c : choose>
<c: when test="조건1"> 실행문1
<c: when test="조건2"> 실행문2
<c : otherwiese> 실행문 3
: 조건1과 조건2가 동시에 충족되지 않을경우 실행된다.
</c : choose>
5.<c: forEach>
: 반복문
<c : forEach var="i" begin="1" end="10"> ${i} </c:forEach>
: 변수 i를 선언하고 변수 i가 1~10까지 1씩 증가하면서 10번 반복한다.
: 1,2,3,4,5,6,7,8,9,10 출력
<c: forEach var="d" begin="2" end="10" step="2"> ${d} </c:forEach>
: 변수 d를 선언하고 변수 d가 2~10까지 2씩 증가, 즉, 5번 반복한다.
: 2,4,6,8,10 출력.
Java : for(int i =10 ; i >= 1 ; i--) { } 비교
<c: forEach>
태그는 역순으로 실행하는것이 불가능하다.
<c: forEach var="r" begin="10" end="1" step="-1">
: 작성시 step >= 0 에러가 발생.
역순으로 출력하고 싶은경우 ${max -i}같은 형식으로 작성해야한다.
<c: forEach var="r" begin="1" end="10" step="1"> ${11-r} </c:forEach>
:10~1까지 역순으로 출력가능하게 한다. 단, 이것은 숫자형식을 출력할 경우에만 사용한다.
6.<c : varStatus>
: 변수에 대한 다양한 정보를 제공하는 태그
<c : var="i" begin="1" end="5" varStatus="vs">
${vs.fisrt}
: 변수 i가 반복문에서 첫 시작일 경우 true반환 // not: false
${vs.last}
: 변수 i가 마지막일 경우 true반환 // not : flase
${vs.index}
: 변수 i가 가지고 있는 index반환
${vs.count}
: 변수 i 를 통해 반복문이 몇번 반복되었는지 count
${vs.current}
: 변수 i의 현재값 반환
7.<c : forTokens>
: 배열에 존재하는 값들을 구분할때 사용하며, 전부 구분이 될때 까지 반복한다.
<c : forTokens items="배열" var="current값이 들어갈 변수명" delis="구분자">
<c : set var="family" value="엄마,아빠,누나,나,동생"/>
<c : forTokens items="family" delis="," var="f">
${f}
</c : forTokens>
: 배열 family의 value로 가족 구성원을 담고 구분자로 ","를 사용했다.
배열 구분자에 의해 변수 f에 각각 저장하게 되고, 반복할때 마다 ${f}
를 통해 해당 값 출력
print : 엄마아빠누나나동생
8.<c : url>
: url관련 태그
<c : url value="xxx.jsp" var="jsp">
: jsp변수에 xxx.jsp로 이동할 수 있는 값을 설정.
<c : url value="초콜릿" name="food"/>
: parameter 'food' 에 초콜릿을 담는다.
<c : url value="콜라" name="beverage"/>
: parameter 'beverage' 에 콜라를 담는다.
<c : url value="빅맥" name="hamburger"/>
: parameter 'hamburger' 에 빅맥을 담는다.
</c : url>
<a href="${jsp}"> jsp로 이동 </a>
: A태그 "jsp로 이동"을 클릭할 시 xxx.jsp로 이동한다.
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt%>
1. <fmt : formatNumber value="1.2345"/>
: 1.235
->소수점4번째자리에서 반올림한다.
2. <fmt : formatNumber value="1.2345" pattern="#,##"/>
: 1.23
3. <fmt : formatNumber value="1.2" pattern="#,00"/>
: 1.20
4. <fmt : formatNumber value="0.06" type="percent"/>
: 6%
5. <fmt : formatNumber value="1000000" type="currency"/>
: #1,000,000
6. <fmt : formatNumber value="1000" type="currency" currencySymbol="$"/>
: $1,000
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c : set var="eng" value="I'm still hungry"/>
1.<fn : toUpperCase(eng)/>
: I'M STILL HUNGRY
2.<fn : toLowerCase(eng)/>
: i'm still hungry
3.<fn : indexOf(eng, "still")
: 4
--> 문자열eng에서 still에 대한 인덱스 반환
4.<fn : replace(eng, "still", "not")/>
: I'm not hugry
--> 문자열 eng에서 "still"을 "not"으로 대체한다.
5.<fn : length(eng)/>
: 16
--> 문자열 eng에 대한 길이를 반환.