JSP에서 자주 사용되거나 공통적으로 사용되는 Java 코드를 쉽고,
표기법을 간단히 할 수 있도록 태그화(Tag Library) 하여 표준(Standard)으로 제공함
(if, for, scope 변수 선언, 데이터 파싱 등)
webapp 폴더
는 서버 구동 시 인터넷에 배포되는 폴더webapp 폴더
내부에 저장함JSTL을 사용하고자 하는 JSP가 있을 경우 해당 JSP 최상단에 JSTL 라이브러리를 추가하는 지시자 taglib를 작성해야 한다.
prefix : 접두사 - 다른 태그와 구별할 수 있는 namespace(태그 앞에 붙는 태그명)
인터넷에서 특정 자원 위치 지정(주소)
네트워크 상에서 자원을 구별하는 식별자 (자원을 구분하는 유일한 주소)
-> uri에 작성하는 주소는 네트워크 상의 주소가 아닌 다운로드받은 라이브러리 내부 구분 주소
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
변수를 선언하고 값을 초기화하는 태그(초기화는 무조건 수행)
-> c:set 태그로 선언된 변수는 EL을 이용해서 출력할 수 있음
변수명
대입될 값
변수 범위 (기본값 : page)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>JSTL_1</title>
</head>
<body>
<!-- <태그명 /> : 태그가 시작되자마자 종료 == 내용이 없는 요소 -->
<c:set var="num" value="100"/> <!-- page -->
<c:set var="num" value="200" scope="request"/>
<!-- scope 미지정 시 좁은 범위부터 탐색(우선순위) -->
${ num } + ${ requestScope.num } = ${ num + requestScope.num }
.
.
.
지정한 변수(c:set / setAttribute() 추가된 변수) 삭제
- scope 선택 가능
- scope 미작성 시 모든 scope에서 일치하는 변수명 모두 제거됨
삭제할 변수명
삭제할 범위 (기본값 모든 범위)
<!-- session scope 변수 선언 -->
<c:set var="num" value="300" scope="session" />
<ul>
<li>page : ${ pageScope.num } </li>
<li>request : ${ requestScope.num } </li>
<li>session : ${ sessionScope.num } </li>
</ul>
request 범위의 num 변수 삭제
<c:remove var="num" scope="request" />
<ul>
<li>page : ${ pageScope.num } </li>
<li>request : ${ requestScope.num } </li>
<li>session : ${ sessionScope.num } </li>
</ul>
모든 범위의 num 변수 삭제
<c:remove var="num" />
<ul>
<li>page : ${ pageScope.num } </li>
<li>request : ${ requestScope.num } </li>
<li>session : ${ sessionScope.num } </li>
</ul>
조건문을 작성할 수 있는 태그
-> if문만 가능하고 else는 불가능함 (c:else 존재하지 않음)
조건을 작성하는 속성
-> 단, EL로만 작성할 수 있다.
<c:set var="temp" value="10"/>
<c:if test="${ temp > 20 }">
<!-- test에 작성된 조건이 만족(true)할 때만 화면에 출력됨 -->
temp는 20보다 크다
</c:if>
<!-- else 구문이 없어 반대되는 조건을 별도 작성 -->
<c:if test="${ temp <= 20 }">
temp는 20보다 작거나 같다
</c:if>
c:choose 내부에 c:when (if / else if), c:otherwise (else) 태그를 작성하는 형태
<c:set var="temp2" value="10" />
<c:choose>
<c:when test="${ temp2 > 10 }">
10보다 크다
</c:when>
<c:when test="${ temp < 10 }">
10보다 작다
</c:when>
<c:otherwise>
10과 같다
</c:otherwise>
</c:choose>
</body>
</html>
Java의 for문 + 추가 기능을 가지고 있는 태그
현재 반복 횟수에 해당하는 변수 (== int i)
반복 시작 값
반복 종료 값
반복 시마다 증가할 값 (증감식), 미작성 시 기본값 1
반복 접근할 객체명(Collection 객체) // 향상된 for문
현재 반복에 해당되는 상태 정보
현재 반복 횟수 또는 현재 접근 중인 객체
현재 객체가 몇 번째 인덱스인지 반환 (0부터 시작)
현재 반복문이 몇 바퀴 반복 중인지 반환 (1부터 시작)
첫 번째 반복일 경우 true 반환
마지막 반복일 경우 true 반환
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>JSTL_2</title>
</head>
<body>
<h3>일반 for문 형식으로 사용</h3>
<c:forEach var="i" begin="1" end="6" step="1">
<h${i}> ${i}번째 반복 중입니다.. </h${i}>
</c:forEach>
<table border=1>
<c:forEach var="i" begin="1" end="10" step="1">
<tr>
<th>${i}</th>
<td>${i}번째 게시글입니다.</td>
</tr>
</c:forEach>
</table>
<hr>
<h3>향상된 for문 형식으로 사용</h3>
<form action="forResult.jsp" method="get">
<input type="checkbox" name="lang" value="java"> java <br>
<input type="checkbox" name="lang" value="sql"> sql <br>
<input type="checkbox" name="lang" value="jdbc"> jdbc <br>
<input type="checkbox" name="lang" value="html"> html <br>
<input type="checkbox" name="lang" value="css"> css <br>
<input type="checkbox" name="lang" value="javascript"> javascript <br>
<input type="checkbox" name="lang" value="jQuery"> jQuery <br>
<input type="checkbox" name="lang" value="servlet"> servlet <br>
<input type="checkbox" name="lang" value="jsp"> jsp <br>
<button>제출</button>
</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>c:forEach 향상된 for문처럼 사용하기</title>
</head>
<body>
<h3>EL로 파라미터 얻어오는 방법</h3>
1. \${ param.name속성값 }
-> 단일 파라미터를 얻어와 출력하는 용도
-> 복수 파라미터에 사용하는 경우 맨 앞(0번 인덱스) 값만 얻어옴 <br><br>
${ param.lang }
<br><br>
2. \${ paramValues.lang[인덱스] } <br><br>
${ paramValues.lang[0] } <br>
${ paramValues.lang[1] } <br>
${ paramValues.lang[2] } <br>
<hr>
<h3>향상된 for문 사용</h3>
<ul>
<c:forEach var="str" items="${paramValues.lang}" varStatus="vs">
<li>
${str} / ${vs.index} / ${vs.count} / ${vs.current} <br>
<c:if test="${vs.first}">
<!-- 첫 번째 반복인 경우 -->
<span style="color:red;">첫 번째</span>
</c:if>
<c:if test="${vs.last}">
<!-- 마지막 반복인 경우 -->
<span style="color:blue;">마지막</span>
</c:if>
</li>
</c:forEach>
</ul>
</body>
</html>