2022. 1. 17. 19:28ㆍ프로그래밍/ETC
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 |