Core 태그 라이브러리 기능
JSP에서는 변수 선언, 조건식, 반복문 기능은 자바 코드를 이용해서 구현 ->
코어 라이브러리를 사용하면 이런 자바 기능을 태그로 대체할 수 있다.
톰캣에서는 JSTL 라이브러리를 기본으로 제공하지 않고 외부 라이브러리에서 가져와 기능을 수행
따라서 JSP 페이지 상단에 다음과 같이 taglib 디렉티브 태그를 추가해야한다!
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
Core 태그 라이브러리 기능 정리
기능 | 태그 | 설명 |
변수 지원 | <c:set> | JSP 페이지에서 변수를 지정 |
<c:remove> | 지정된 변수 제거 | |
흐름 제어 | <c:if> | 조건문 |
<c:choose> | switch문 사용 <c:when> , <c:otherwise> 서브 태그 |
|
<c:forEach> | 반복문 사용 | |
<c:forTokens> | 구분자로 분리된 각각의 토큰 처리 | |
URL 처리 | <c:import> | URL 이용 -> 다른 자원 JSP 페이지 추가 |
<c:redirect> | response.sendRedirect() | |
<c:url> | 요청 매개변수로부터 URL 생성 | |
기타 태그 | <c:catch> | 예외 처리에 사용 |
<c:out> | JspWriter에 내용 처리 후 출력 |
<c:set>
변수 선언 형식
<c:set var="변수이름" value="변수값" [scope="scope 속성 중 하나"]/>
변수 스코프 - page, request, session, application
실습
<c:set var="id" value="hong" scope="page"/>
<c:set var="pwd" value="1234" scope="page"/>
<c:set var="name" value="${'홍길동' }" scope="page"/>
<c:set var="age" value="${22 }" scope="page"/>
<c:set var="height" value="${177 }" scope="page"/>
<c:set> 태그를 이용해 변수를 선언한다.
value 속성에는 표현 언어를 사용해서 초기화할 수 있다
<td>${id }</td>
<td>${pwd }</td>
<td>${name }</td>
<td>${age }</td>
<td>${height }</td>
표현 언어로 변수에 바로 접근하여 값을 출력한다.
<c:remove>
사용 형식
<c: remove var="age"/>
변수 age를 삭제한다
<c:if>
사용 형식
<c:if test="${조건식}" var="변수이름" [scope="scope 속성 중 하나"]/>
실습
<body>
<c:if test="${true }">
<h1>항상 참입니다.</h1>
</c:if>
<c:if test="${11==11 }">
<h1>두 값은 같습니다.</h1>
</c:if>
<c:if test="${(id=='hong') && (name=='홍길동')}">
<h1>아이디는 ${id }이고, 이름은 ${name }입니다.</h1>
</c:if>
</body>
<c:choose>
사용 형식
<c:choose>
<c:when test="조건식1">본문내용1</c:when>
<c:when test="조건식2">본문내용2</c:when>
...
<c:otherwise>본문내용</c:otherwise>
</c:choose>
첫번째 <c:when> 태그의 조건식1을 체크해서 참이면 본문내용1을 수행하고,
만약 거짓이면 다음 <c:when>의 조건식2를 체크해서 참이면 본문내용2 수행.
모든 조건이 거짓이면 otherwise 태그의 본문내용을 수행
실습
<c:choose>
<c:when test="${empty name }">
<tr align="center">
<td colspan=5> 이름을 입력하세요 !! </td>
</tr>
</c:when>
<c:otherwise>
<tr align="center">
<td>${id }</td>
<td>${pwd }</td>
<td>${name }</td>
<td>${age }</td>
<td>${height }</td>
</tr>
</c:otherwise>
</c:choose>
"${empty name}" 변수 name이 null이거나 빈 문자열인지 체크
name이 정상적이면 otherwise 태그의 본문내용을 수행
<c:forEach>
사용 형식
<c:forEach var="변수이름" items="반복할객체이름" begin="시작값" end="마지막값"
step="증가값" varStatus="반복상태변수이름">
...
</c:forEach>
*varStatus의 속성
속성 | 값 | 설명 |
index | int | index 번호. 0부터 시작 |
count | int | 몇 번째 반복인지. 1부터 시작 |
first | boolean | 첫 번째 반복인지 나타냄 |
last | boolean | 마지막 반복인지 나타냄 |
실습
<c:forEach var="i" begin="1" end="10" step="1" varStatus="loop">
i = ${i } 반복횟수: ${loop.count } <br>
</c:forEach>
<br>
<c:forEach var="i" begin="1" end="10" step="2">
5 * ${i } = ${5*i }<br>
</c:forEach>
<c:forEach var="data" items="${list }">
${data }<br>
</c:forEach>
#1 반복 변수 i를 1부터 10까지 1씩 증가시키며 반복문 수행
#2 반복 변수 i를 1부터 10까지 2씩 증가시키며 반복문 수행
#3 ArrayList 같은 컬렉션 객체에 저장된 객체를 반복해서 반복 변수 data에 하나씩 가져와 처리
+)<c:forTokens>
<c:set var="fruits" value="사과, 파인애플, 바나나, 망고, 귤" />
<c:forTokens var="token" items="${fruits }" delims=",">
${token }<br>
</c:forTokens>
구분자(delims)를 이용해 문자열을 분리하여 출력
<c:redirect>
사용 형식
<c:redirect url="redirect할 URL">
[ c:param name="매개변수이름" value="전달값" /> ]
</c:redirect>
실습
<c:redirect url="member1.jsp">
<c:param name="id" value="${'hong' }"/>
<c:param name="pwd" value="${'1234' }"/>
<c:param name="name" value="${'홍길동' }"/>
<c:param name="email" value="${'hong@test.com' }"/>
</c:redirect>