JSP 문서에서 JSTL을 사용하기 위한 선언 방법
<%@ taglib uri="http://java.sun.com/sjp/jstl/core" prefix="c" %>
c라는 프리픽스로 시작하는 태그는 위의 URI에서 가져오는 태그다.. 라고 알려주어야 함.
<c:set>
이 녀석은 변수를 선언하는 태그이다.
<c:set var="변수이름" value="값" />
이렇게 선언하면, ${변수이름} 으로 사용할 수 있다.
다른 영역에 저장하고 싶다면, scope="session" 을 추가하면 된다.
그런데 이 변수는 내부적으로 자바 변수로 선언되는게 아니라 page 데이터 영역의 애트리뷰트이로 선언되기 때문에 <%=변수이름%> 형태로 출력될 수 없다!!
<c:remove>
이 태그는 변수를 제거할 때 사용하게 된다.
<c:remove var="변수이름" />
이렇게 사용하면 해당 이름의 변수가 사라진다. 그런데 이렇게 선언할 경우 모든 scope에서 해당 이름을 가진 변수는 다 제거하게 된다. 특정 영역의 변수만 제거하고 싶다면,
<c:remove var="변수이름" scope="request" />
와 같이 특정 영역의 변수만 제거할 수 있다.
<c:out>
이 태그는 변수 내용을 출력할 때 사용되는 태그이다. EL로도 출력할 수 있지만, 아래와 같이 태그가 포함된 변수를 escapeXml 항목을 true/false 지정해서 태그를 포함해서 출력할지 적용해서 출력할지 결정할 수 있다.
<c:set var="aaa" value="<font color=red>ㅋㅋㅋ</font>"></c:set> <c:out value="${aaa}" escapeXml="true"></c:out>
<c:if test="true|false">
test 안의 내용이 true이냐 false이냐에 따라서 내용을 출력하거나 출력하지 않는다. 따라서 EL형태를 응용해서, <c:if test="${ 10 > 0 }" > 이렇게 표현한다면 EL은 true/false를 리턴할 것이고 그 값에 따라 JSTL도 동작하게 되는 형태이다.
<c:remove var="aaa"/> <c:if test="${empty aaa ? true : false}" var="result"> 없다네ㅋㅋㅋ<br> </c:if> ${result}
실행 결과는,
없다네ㅋㅋㅋ
true
가 된다 ^^
test 안에 넣을 부분을 EL을 사용해서 좀더 구체적으로 활용할 수 있다.
<c:if test="${(!empty param.id) && (!empty param.password) ? true : false}" var="result"> 두 값 모두 존재해요!!<br> </c:if> ${result}
이런 id값과 password 모두가 들어왔는지 체크해서 처리하는 루틴도 고려해볼 수 있다.
<c:choose>
일종의 스위치문이다. 아래의 예를 보면 확연히 이해된다.
<c:choose> <c:when test="${1 > 0}"> 1은 0보다 큽니다.<br> </c:when> <c:when test="${2 > 0}"> 2도 0보다 큽니다.<br> </c:when> <c:otherwise> 왠만한 숫자는 0보다 크지요<br> </c:otherwise> </c:choose>
결과는 "1은 0보다 큽니다." 만 출력된다. switch문의 특성답게 처음 일치하는 것만 출력되는 것이다.
조금더 choose를 응용한 내용을 살펴보자. 선택한 내용을 출력해준다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title></title> <style></style> <script type="text/javascript"></script> </head> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <body> <form action="jstl.jsp"> <select name="name"> <option value="장동건">장동건</option> <option value="권상우">권상우</option> </select> <input type="submit" value="전송"> </form> <c:choose> <c:when test="${param.name == '장동건'}"> ${param.name} </c:when> <c:when test="${param.name == '권상우'}"> ${param.name} </c:when> <c:otherwise> 선택 안했네.. </c:otherwise> </c:choose> </body> </html>
<c:forEach>
이번에는 for문과 비슷한 forEach를 살펴보자.
간단하게 1부터 10까지 출력하는 예제를 보면 이해가 쉽다.
<c:forEach var="임시변수명" begin="1" end="10"> ${임시변수명}<br> </c:forEach>
이번에는 1, 3, 5, 7.. 순으로 증가하도록 증가치를 지정해보자.
<c:forEach var="임시변수명" begin="1" end="10" step="2"> ${임시변수명}<br> </c:forEach>
이번에는 배열의 내용을 순서대로 출력하는 예제를 살펴보자. 이 방식은 새로운 for문과 매우 비슷해 보인다.
<c:forEach var="배열 요소를 저장할 임시변수 이름" items="${배열이름}"> ${배열 요소를 저장할 임시변수 이름}<br> </c:forEach>
<c:forTokens>
문자열에 포함된 토큰을 분리해서 각각의 토근에 대해 반복 처리를 수행하도록 만드는 기능이다.
<c:forTokens var="temp" items="ㅋㅋㅋ ㅎㅎㅎ ㅉㅉㅉ" delims=" "> ${temp}<br> </c:forTokens>
그런데 구획문자(나누는 문자)는 하나만 가능한 것이 아니다. 여러개를 넣으면 여러개가 가능하다.
아래 예를 살펴보자.
<c:forTokens var="temp" items="ㅋㅋㅋ^ㅎㅎㅎ@ㅉㅉㅉ!ㅍㅍㅍ^ㄷㄷㄷ" delims="^@!"> ${temp}<br> </c:forTokens>
결과는 ㅋㅋㅋ, ㅎㅎㅎ, ㅉㅉㅉ 등이 따로 분리되어 출력된다.
날짜와 관련된 태그
<fmt:formatDate value="<%=new Date() %>" type="both"/>
위와 같이 할경우, 날짜와 시간이 모두 출력되게 된다. type에 date, time 둘 중 하나를 쓰면 하나만 나오게 된다.
숫자와 관련된 태그
<fmt:formatNumber value="12345678" groupingUsed="true"/><br> <fmt:formatNumber value="3.141592" pattern="#.##"/>
위의 경우 세자리마다 끊어서 쉼표가 출력되고, 아래의 경우 소수점 둘째짜리까지만 출력된다.