1. JSTL/JSP 라이브러리
JSTL(Jsp Standard Tag Library)
- JSP에서 자주 사용되거나 공통적으로 사용되는 Java 코드(if, for, 변수선언, 형변환)를
스크립틀릿 대신 HTML 태그 형식으로 태그화하여 표준으로 제공하는 라이브러리
- JSTL 다운로드 방법
1) JSTL 다운로드 페이지 이동:
https://tomcat.apache.org/download-taglibs.cgi
2) Jar Files의 Impl, Spec, EL 다운로드
3) /webapp/WEB-INF/lib 폴더에 라이브러리 파일(.jar) 추가
4) JSTL 라이브러리를 사용하고자 하는 JSP 파일 상단에 taglib JSP 지시자 태그 추가

변수 선언(c:set 태그)
- 변수 선언(지정된 scope에 속성 세팅)을 위한 태그
- c:set에 작성 가능한 속성:
1) var: 선언할 변수명(속성 key)
2) value: 대입할 값
3) scope: page, request, session, application 중 하나 지정(기본값 page)
<%
// 스크립틀릿으로 pageScope에 속성 세팅하는 방법
pageContext.setAttribute("num1", 10);
%>
<%-- JSTL(c:set)으로 pageScope에 속성 세팅하는 방법 --%>
<c:set var="num2" value="20" scope="page"/>
num1: ${num1}
num2: ${num2}
변수 제거(c:remove 태그)
- 변수 제거(내장 객체에 세팅된 속성 제거)를 위한 태그
- c:remove에 작성 가능한 속성:
1) var: 삭제할 변수명(속성 key)
2) scope: page, request, session, application 중 하나 지정
(기본값이 모든 scope임에 주의)
변수 출력(c:out 태그)
- 변수 출력 O:
${key} EL 구문과 유사
- 단 escapeXml="true" 설정 시 html 태그 해석 X
escapeXml="false" 설정 시 html 태그 해석 O
<c:set var="temp" scope="session" value="<h1>점심시간</h1>"/>
HTML 태그 해석 X: <c:out value="${temp}"/>
<br>
HTML 태그 해석 O: <c:out value="${temp}" escapeXml="false"/>
<br>
HTML 태그 해석 O: ${temp}
2. JSTL 조건문/반복문
조건문 if(c:if 태그)
- 단독 if문(else 없음)
- c:if에 작성 가능한 속성: test
- 주의사항:
1) test의 속성 값은 무조건 EL 구문으로 작성
2) test의 속성 값은 true 또는 false가 나오는 조건식이여야 함
3) test의 속성 값을 작성하는 "" 내부에는 앞뒤 공백이 존재해서는 안됨
<c:if test="${ money==50000 }">
<h3 style="color:gold">돈이 50000원 있습니다.</h3>
</c:if>
<%-- EL에서 모든 비교는 == 또는 eq / != 또는 ne 사용 --%>
<%-- EL에서 문자열은 ''로 표현 --%>
<c:if test="${name=='홍길동'}">
<h3 style="color:red">이름은 홍길동입니다.</h3>
</c:if>
조건문 choose, when, otherwise(c:choose 태그)
- 1) c:when 태그:
if, else if 역할의 태그
- 2) c:otherwise:
else 역할의 태그, 속성 없음
<c:choose>
<c:when test="${param.val gt 100}">
100 초과
</c:when>
<c:when test="${param.val < 100}">
100 미만
</c:when>
<c:otherwise>
100과 같다
</c:otherwise>
</c:choose>
반복문 forEach(c:forEach 태그)
- 일반 for문 + 추가 기능
- c:forEach에 작성 가능한 속성:
1) var: 현재 반복 횟수에 해당하는 변수
2) begin: 반복 시 var 시작 값
3) end: 반복이 종료될 var 값
4) step: 반복 시 마다 var의 증가 값
5) items: 반복 접근한 객체(배열, 컬렉션 객체)
6) varStatus: 현재 반복 상태와 관련된 정보를 제공하는 변수 선언
- varStatus에서 제공되는 값:
1) current: 현재 반복 횟수(현재 var 값)
또는 현재 반복 접근 중인 객체(컬렉션/배열 요소)
2) index: 현재 인덱스 값 반환(0부터 시작)
3) count: 현재 몇바퀴째인지 반복 횟수 반환(1부터 시작)
4) first: 첫번째 반복이면 true, 아니면 false
5) last: 마지막 반복이면 true, 아니면 false
<h3>일반 for문 형식으로 사용하기</h3>
<c:forEach var="i" begin="1" end="6" step="1">
<h${i}>현재 i 값: ${i}</h${i}>
</c:forEach>
<h3>향상된 for문 형식으로 사용하기</h3>
<c:forEach var="book" items="${bookList}">
${book}<br>
</c:forEach>
<h3>향상된 for문 형식으로 사용하기</h3>
<c:forEach var="book" items="${bookList}" varStatus="vs">
<li>
index: ${vs.index}
count: ${vs.count}
current: ${vs.current}
first: ${vs.first}<br>
last: ${vs.last}<br>
</li>
</c:forEach>
