JSP에서 자주 사용되거나 공통적으로 사용되는 Java 코드를 표기법을 간단히 태그화 하여 표준으로 제공하는 것.
(if, for, 배열/컬렉션 길이, 문자열 치환, 숫자 데이터 형식 변경, 데이터 파싱, scope 변수 선언 등)
Apache Tomcat® > Taglibs >
webapp/WEB-INF/lib 폴더에 추가
Impl: taglibs-standard-impl-1.2.5.jar (pgp, sha512) Spec: taglibs-standard-spec-1.2.5.jar (pgp, sha512) EL: taglibs-standard-jstlel-1.2.5.jar (pgp, sha512) ojdbc11-21.7.0.0.jar (DB 연결 라이브러리)
(.jsp)
JSTL 사용을 위한 선언 방법
JSP 파일 최상단에 추가하고자 하는 JSTL taglib를 추가
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
prefix : 접두사
uri(Uniform Resource Identifier) : 자원을 구분하는 식별자(주소 형태)
변수를 선언하고 값을 초기화 하는 태그
(원하는 scope의 내장 객체에 값 세팅)
c:set 속성
1) var : 변수명 (setAttribute의 key값)
2) value : 대입될 값
3) scope : 내장 객체 범위 (기본값 : page)
c:set / setAttribute() 로 추가된 값 제거
c:remove 속성
1) var : 삭제할 변수명(key)
2) scope : 삭제할 내장 객체 범위(기본값 : 모든 범위)
<c:set var="test" value="page" scope="page"/>
<c:set var="test" value="request" scope="request"/>
<c:set var="test" value="session" scope="session"/>
<c:set var="test" value="application" scope="application"/>
<!-- 모든 범위 삭제 -->
<%-- <c:remove var="test"/> --%>
<c:remove var="test" scope="request"/>
${pageScope.test} / ${requestScope.test}
/ ${sessionScope.test} / ${applicationScope.test}
<%-- scriptlet 작성법 --%>
<% if(1 == 1) { %>
출력됩니다.
<% } %>
<%-- JSTL 작성법 --%>
<c:if test="${1 == 1}">
JSTL 작성법
</c:if>
session 범위에 세팅된 test의 값이 "session"인 경우
<%--
- 문자열 비교시 (==) 비교연산자 사용 가능
- 문자열임을 표기하는 리터럴 == ''(홑따옴표) / ""(쌍따옴표)
--%>
<c:if test='${ sessionScope.test == "session" }'>
<h4>sessionScope.test == 'session'</h4>
</c:if>
c:choose : when, otherwise를 감싸는 태그
(현재 태그 내부에 if~else if~else를 작성하겠다)
c:when : if/ else if를 나타내는 태그
속성은 test 밖에 없음. (조건 작성 속성)
c:otherwise : else를 나타내는 태그
아무런 속성도 존재하지 않음.
<c:set var="temp2" value="150"/>
<c:choose>
<c:when test="${temp2 > 100}">
100보다 크다
</c:when>
<c:when test="${temp2 < 100}">
100보다 작다
</c:when>
<c:otherwise>
100과 같다.
</c:otherwise>
</c:choose>
- 일반 for + 추가 기능
- 속성
1) var : 현재 반복 횟수에 해당하는 변수 (int i)
2) begin : 반복 시 var 시작 값
3) end : 반복이 종료될 var 값
4) step : 반복 시 마다 var의 증가 값 (기본값 1)
5) items : 반복 접근한 객체(배열, 컬렉션 객체)
6) varStatus : 현재 반복 상태와 관련된 정보를 제공하는 변수 선언
varStatus="변수명"
-> c:forEach 구문 내에서 "변수명"을 통해 원하는 값을 얻을 수 있다.
* varStatus에서 제공되는 값
- current : 현재 반복 횟수(현재 var 값)
또는 현재 반복 접근 중인 객체(컬렉션/배열 요소)
- index : 현재 인덱스값 반환 (0부터 시작)
- count : 현재 몇바퀴째인지 반복 횟수 반환 (1부터 시작)
- first : 첫 번째 반복이면 true, 아니면 false
- last : 마지막 반복이면 true, 아니면 false
<h3>일반 for문 + varStatus</h3>
<table border="1">
<c:forEach var="n" begin="1" end="10" varStatus="vs">
<c:choose>
<%-- choose 내부에 무조건 JSP 주석만 작성 가능 --%>
<%-- 첫번째 반복일 경우 --%>
<c:when test="${vs.first}">
<tr>
<th class="first">${n}</th>
<td class="first">${n}번 게시글 입니다.</td>
</tr>
</c:when>
<%-- 마지막 반복일 경우 --%>
<c:when test="${vs.last}">
<tr>
<th class="last">${n}</th>
<td class="last">${n}번 게시글 입니다.</td>
</tr>
</c:when>
<c:otherwise>
<tr>
<th>${n}</th>
<td>${n}번 게시글 입니다.</td>
</tr>
</c:otherwise>
</c:choose>
</c:forEach>
</table>
c:forEach 향상된 for문 처럼 사용하기
param.lang : 파라미터중에 lang의 값을 얻어와 출력
단, lang 이름의 파라미터가 여러개면 첫번째만 얻어옴
paramValues.lang : lang이라는 이름의 파라미터를 모두 얻어와 배열로 반환
<c:choose>
<%-- 아무것도 체크하지 않은 경우 --%>
<c:when test="${empty paramValues.lang}">
<h1 style="color:orangered;">체크된 값이 없습니다.</h1>
</c:when>
<c:otherwise>
<ul>
<c:forEach var="chk" items="${paramValues.lang}" varStatus="vs">
<li>
index : ${vs.index} <br>
count : ${vs.count} <br>
current : ${vs.current} <br>
first : ${vs.first} <br>
last : ${vs.last} <br>
체크된 값 : ${chk}
</li>
</c:forEach>
</ul>
</c:otherwise>
</c:choose>
객체배열 / 컬렉션 반복 접근하기
<table border="1">
<c:forEach var="person" items="${requestScope.pList}">
<tr>
<th>${person.name}</th>
<td>${person.age}</td>
<td>${person.address}</td>
</tr>
</c:forEach>
</table>