티스토리 뷰
Dynamic Web Project로 생성한 워크스페이스 환경에서 JSTL 적용
1. https://tomcat.apache.org/taglibs/standard/ 에서 zip파일 다운로드 압축해제 후 jstl.jar파일을 프로젝트
경로에서 WEB-INF > lib 디렉토리에 붙여 넣는다.
(jstl 버전은 스펙에 맞게 다운로드. 모른다면 최신버전 다룬로드)
2. JSP 파일에서 jstl 사용하기 위해 taglib 지시자를 선언한다.
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
JSTL 사용법
1. c:set(변수선언), c:out(화면에 출력), c:remove(선언한 변수 제거)
<!-- 현재 페이지에서 사용 -->
<c:set var="pageNo" value="1" scope="page"/>
<!-- 현재페이지 요청전달 페이지에서 사용 -->
<c:set var="requestNo" value="2" scope="request"/>
<!-- 해당 세션이 존재하면 사용 -->
<c:set var="sessionNo" value="3" scope="session"/>
<!-- 서버가 종료되기 전까지 응용프로그램 전체에서 사용 -->
<c:set var="applicationNo" value="4" scope="application"/>
${pageNo}
<!-- c:out 태그는 출력태그 하지만 굳이 사용할 이유는 없어 보인다. -->
<c:out value="${requestNo}" />
<!-- c:remove 태그는 c:set에서 선언한 변수를 제거하는 태그 -->
<c:remove var="sessionNo"/>
${sessionNo}
${applicationNo}
var는 변수이름
value는 당연히 값
scope는 변수가 존재하는 영역 (page, request, session, application)을 각각 나타낸다.
2. 조건문(if, (choose, when, otherwise)) 및 반복문(forEach, forTokens)
<c:if> 문은 test속성에 조건식을 넣어주면된다.
<%
int thisNo = 0;
%>
<c:set var="thisNo" value="<%= thisNo %>" scope="page"/>
<c:if test="${ requestNo > thisNo}">
requestNo가 더 큽니다.
</c:if>
<c:choose><c:when><c:otherwise>는 when의 test속성에 조건식을 넣고 일치하면 해당 when안의 문장이 수행되며, 추가적으로 otherwise를 선언해주면 일치하는 when이 없을 때 이 otherwise를 수행한다.
<c:choose>
<c:when test="${requestNo == 1}">
requestNo 값은 1입니다<br>
</c:when>
<c:when test="${requestNo == 2}">
requestNo 값은 2입니다<br>
</c:when>
<c:when test="">
requestNo 값은 1도 아니고 2도 아닙니다<br>
</c:when>
</c:choose>
<c:forEach>는 컬렉션이나 배열을 다루며 사용법은 다음과 같다.
<% String[] subject = {"국","영","수"}; %>
<!-- 배열 데이터 -->
<c:forEach var="arr" items="<%= subject %>" >
${arr}
</c:forEach>
<br>
<%
HashMap<String,String> map = new HashMap<String,String>();
map.put("a", "airplane");
map.put("b", "bear");
map.put("c", "company");
%>
<!-- Map 타입 데이터 -->
<c:forEach var="map" items="<%= map %>" varStatus="mapStatus">
${map.key} >>> ${map.value}<br>
</c:forEach>
<%
List<String> arrList = new ArrayList<>();
arrList.add("java");
arrList.add("jsp");
arrList.add("spring");
arrList.add("tomcat");
arrList.add("MySQL");
arrList.add("javascript");
%>
<!-- List 타입 데이터 -->
<c:forEach items="<%= arrList %>" begin="0" varStatus="listStatus">
${listStatus.index} <!-- 0부터 시작되는 for문의 순번 -->
${listStatus.count} <!-- 1부터 시작되는 for문의 순번 -->
${listStatus.current} <!-- 현재 위치 item값 -->
${listStatus.first} <!-- 현재 반복이 처음반복인지 true,false반환 -->
${listStatus.last} <!-- 현재 반복이 마지막반복인지 true,false반환 -->
<br>
</c:forEach>
각각의 속성을 살펴보자면 다음과 같다.
var | for문안에서 현재 반복위치의 값을 가져올 수 있는 변수 선언 |
items | 여러개의 값을 가지고 있는 배열 및 컬렉션 같은 객체를 선언 |
varStatus | 현재 반복의 상태값을 가지고 있는 변수 선언 varStatus의 속성 index, count, current, first, last, begin, end, step (설명은 표안의 주석 참고) |
begin | 시작 반복 지점 설정 숫자 |
end | 종료 반복 지점 설정 숫자 |
step | 반복문의 루프 증가값 설정 숫자 |
<c:forTokens>는 지정한 구분자를 문자열에 적용시켜 해당 문자열을 분리해서 문자열 배열형식으로 사용해 반복을 수행한다.
<c:set var="tString" value="컴퓨터, 노트북, 마우스; 키보드" />
<c:forTokens var="item" items="${tString}" delims=",;">
${item}<br>
</c:forTokens>
delims속성에 ,;가 선언되어 있다. items속성의 값에서 ,와 ;로 값을 구분해서
컴퓨터
노트북
마우스
키보드
가 화면에 보여진다.