toggle menu

JSP 정리 - JSTL (Jsp Standard Tag Library)

2012. 8. 22. 11:37 JAVA/JSP

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="#.##"/>

위의 경우 세자리마다 끊어서 쉼표가 출력되고, 아래의 경우 소수점 둘째짜리까지만 출력된다.







JAVA/JSP 관련 포스팅 더보기