[JSTL] Core Tag 사용방법 (c:set, c:out, c:if, c:choose, c:forEach)

2022. 1. 17. 19:28Web/JSTL

728x90

JSTL 이란?

JSP 에서 java 코드가 들어갈 때마다 <% ~~ %>  태그를 사용하기에 불편함이 있고 가독성도 좋지 않아 등장한 라이브러리가 JSTL입니다.


Core Tag 란?

JSTL의 태그 라이브러리 중 하나로 변수 지정, 제어문, 페이징 처리 등을 할 수 있는 기능을 제공해줍니다.

 

먼저 코어 태그를 사용하기 전에 JSP 파일 상단에 선언해줘야 합니다.

1
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %>
cs

 


Core Tag 의 종류

태그명 설명
set 사용될 변수를 설정해 값을 저장하는 태그
out 페이지에 값을 출력하는 태그
if 조건에 따라 내부 코드를 수행하는 코드, test 속성에 조건을 넣어 비교
choose 다중 조건을 처리하는 코드, if, else문과 비슷하며 <c:choose> 내부에 <c:when>, <c:otherwise> 태그를 사용
forEach 반복문을 수행하는 태그
for Tokens 구분자로 분리된 각각의 토큰을 처리할 때 사용하는 태그
url 변수에 url 값과 쿼리스트링 값을 저장하고 호출할 수 있게 하는 태그
redirect 페이지를 재요청하는 태그

<c:set>

변수를 선언해 초깃값을 넣을 수 있는 태그입니다.

1
<c:set var="변수명" value="초깃값" scope="변수의 범위"/>
cs

 

<c:set> 예시

1
2
<c:set var="result" value="Y"></c:set>
${result}  <!-- Y -->
cs

 


<c:out>

데이터를 출력하기 위한 태그입니다.

1
<c:set value="출력할 데이터" default="출력할 데이터 기본값"/>
cs

 

<c:out> 예시

1
2
3
4
<c:set var="result" value="Y"/>
<c:if test="${result eq 'Y'}">
    <c:out value="${result}"></c:out> <!-- Y -->
</c:if>
cs

※ c:set 의 예시에서처럼 c:out 을 사용하지 않아도 데이터를 출력할 수 있는데 굳이 c:out 을 사용하는 이유는?

웹사이트에 스크립트 코드를 주입하는 공격을 대비하기 위해 html 코드를 해석하지 못하게 하기 위해 사용합니다.

 


<c:if>

다른 언어의 조건문 if문과 동일한 역할을 하며 차이점으로는 else 조건이 존재하지 않습니다.

test 속성에 조건을 선언합니다.

1
<c:if test="판별할 조건" var="변수명" scope="조건의 범위"/>
cs

 

<c:if> 예시

1
2
3
4
<c:set var="result" value="Y"/>
<c:if test="${result eq 'Y'}">
    <c:out value="${result}"></c:out> <!-- Y -->
</c:if>
cs

 


<c:choose>

분기처리할 때 주로 쓰이는 태그로 if, else문과 같이 when 조건에 해당되면 when의 안의 로직을 실행하고 when에 해당되는 조건이 없다면 otherwise 안의 로직을 실행합니다.

 

<c:choose> 예시

1
2
3
4
5
6
7
8
9
10
11
<c:choose>
    <c:when test="${result eq 'N'}">
        <div>N일 때 출력</div>
    </c:when>
    <c:when test="${result eq 'Y'}">
        <div>Y일 때 출력</div> <!-- Y일 때 출력 -->
    </c:when>
    <c:otherwise>
        <div>둘 다 아닐 때 출력</div>
    </c:otherwise>
</c:choose>
cs

 


<c:forEach>

반복문 for문과 동일한 기능을 합니다.

items 속성은 반복할 값들이 있는 배열이나 리스트가 들어가고 var 속성은 c:forEach문 안에서 반복될 변수명입니다.

1
2
3
<c:forEach items="배열or리스트" var="변수명" varStatus="상태용 변수">
${변수명}
</c:forEach>
cs

 

varStatus는 상태용 변수로 varStatus="status" 로 지정했다면 아래와 같이 활용할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
${status.current} 현재 for문의 해당하는 번호
 
${status.index} 0부터의 순서
 
${status.count} 1부터의 순서
 
${status.first} 첫 번째인지 여부
 
${status.last} 마지막인지 여부
 
${status.begin} for문의 시작 번호
 
${status.end} for문의 끝 번호
 
${status.step} for문의 증가값
cs

 

<c:forEach> 예시

1
2
3
4
5
6
7
<%
        String[] fruit = {"사과""바나나""오렌지"};
        pageContext.setAttribute("fruit", fruit);
%>
        <c:forEach var="fruit" items="${fruit}" varStatus="status">
            <span>${status.index} : ${fruit}</span> <!-- 0 : 사과 1 : 바나나 2 : 오렌지 -->
        </c:forEach>
cs