태그
#JSP
#JSTL
#LIBRARY
JSP 표준 태그 라이브러리(JSTL - Core)
2021년 12월 15일 02:01

이 글은 골든래빗 출판사로부터 책을 제공받아 작성했습니다.
http://www.yes24.com/Product/Goods/105016218
JSTL에서 제공하는 태그 종류
종류 | 기능 | 접두어 | URI |
---|---|---|---|
Core 태그 | 변수 선언, 조건문/반복문. URL 처리 | c | http://java.sun.com/jstl/core |
Formatting 태그 | 숫자, 날짜, 시간 포맷 지정 | fmt | http://java.sun.com/jstl/fmt |
XML 태그 | XML 파싱 | x | http://java.sun.com/jstl/xml |
Function 태그 | 컬렉션, 문자열 처리 | fn | http://java.sun.com/jstl/function |
SQL 태그 | 데이터베이스 연결 및 쿼리 실행 | sql | http://java.sun.com/jstl/sql |
코어(Core) 태그
태그명 | 기능 |
---|---|
set | EL에서 사용할 변수를 설정 (setAttribute 메서드와 동일한 기능) |
remove | 설정한 변수를 제거 (removeAttribute 메서드와 동일한 기능) |
if | 단일 조건문 처리 (else 안됨) |
choose | 다중 조건문을 처리 (하위에 when, otherwise 태그 있음) |
forEach | 반복문을 처리할 때 사용 (일반 for문, 향상된 for문 두 가지 형태 사용) |
forTokens | 구분자로 분리된 각각의 토큰을 처리할 때 사용 |
import | 외부 페이지를 삽입 |
redirect | 지정한 경로로 이동 |
url | 경로를 설정할 때 사용 |
out | 내용을 출력할 때 사용 |
catch | 예외 처리에 사용 |
-
<c:set>
태그의 속성- var - 변수명 설정
- value - 변수에 할당할 값
- scope - 변수를 생성할 영역 지정 (page가 기본)
- target - 자바 빈즈를 설정
- property - 자바 빈즈의 속성, 즉 멤버 변수 값 지정
-
<c:remove>
태그의 속성- var - 삭제할 변수명 설정
- scope - 삭제할 변수의 영역을 지정 (지정 안하면 모든 영역의 변수가 삭제됨)
-
<c:if>
태그의 속성- test - if문에서 사용할 조건 지정
- var - 조건의 결과를 저장할 변수 지정
- scope - 변수가 저장될 영역 지정
-
<c:choose>
,<c:when>,
<c:otherwise>
태그<c:choose>
- 다중 조건을 사용할 때 사용, c:when, c:otherwise와 같이 사용됨<c:when>
- 첫 번 째 부분 : if, 나머지 부분은 else if 처리 된다고 생각하면 됨<c:otherwise>
- else 처리 된다고 생각하면 됨
-
<c:forEach>
태그의 속성- var - 변수명 지정
- items - 반복을 위한 객체 지정 (배열, 컬렉션 등)
- begin - 시작값 지정
- end - 종료값 지정
- step - 증가할 값 지정
- varStatus - 루프의 현재 생태를 알려주는 변수 이름 지정
varStatus 속성을 통해 얻을 수 있는 정보
속성명 | 일반 for문 | 향상된 for문 |
---|---|---|
current | var에 지정한 현재 루프의 변수값 변환 | 현재 루프의 실제 요소를 반환 |
index | var에 지정한 현재 루프의 변수값 반환 | 현재 루프의 인덱스 표시 |
count | 실제 반복 횟수 | <- 동일 |
first | 루프 처음일 때 true | <- 동일 |
last | 루프 마지막일 때 true | <- 동일 |
태그 설명
-
<c:forTokens>
태그- 구분자를 기준으로 문자열을 나눠 토큰의 개수만큼 반복
<%-- ex --> <c:forTokens items="문자열" delims="문자열 구분자" var="변수명" />
-
<c:import>
태그- 외부 파일을 현재 위치에 삽입
<%-- ex --> <c:import url="페이지 경로 혹은 URL" scope="영역" />
-
<c:redirect>
태그- response 내장 객체의 sendRedirect()와 동일하게 페이지 이동처리함
<%-- ex --> <c:redirect url="이동할 경로 및 url" />
-
<c:url>
태그- 컨텍스트 루트를 포함한 URL 생성
<%-- ex --> <c:url value="설정한 경로" scope="영역" />
-
<c:out>
태그의 속성- value - 출력할 변수 지정
- escapeXml - 특수 문자 변환여부 결정 (기본값 : ture)
- default - value 속성에 값을 지정하지 않을 경우 출력할 값 지정
-
<c:catch>
태그- 발생한 예외를 잡아 처리함
<%-- ex --> <c:catch var="변수명"> 실행 코드 </c:catch>
따로 작성한 JSTL Core 예제
<%@ 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>JSTL Core 라이브러리</title>
</head>
<body>
<h2>변수 정의 하기 (c:set)</h2>
<c:set var="number1" value="100" />
<c:set var="number2">200</c:set>
<h4>number1 = ${number1}</h4>
<h4>number2 = ${number2}</h4>
<h4>number1 + number2 = ${number1 + number2}</h4>
<h2>변수 출력하기 (c:out)</h2>
<%-- value 속성에 들어있는 값이 출력 된다 --%>
<h4>number = <c:out value="10" /></h4>
<h4>number1 = <c:out value="${number1}" /></h4>
<%-- 태그 문구가 그대로 출력된다 --%>
<c:out value="<script>alert('출력')</script>" />
<%-- 태그 문구가 그대로 출력된다 --%>
<c:out value="<script>alert('그대로 출력')</script>" escapeXml="true"/>
<%-- 스크립트가 수행된다 --%>
<%-- <c:out value="<script>alert('뜬다')</script>" escapeXml="false"/> --%>
<h2>조건문 (c:if)</h2>
<c:if test="true">
<h4>조건이 참이다</h4>
</c:if>
</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>JSTL Core 라이브러리</title>
</head>
<body>
<h1>조건문 (c:choose, c:when, c:otherwise)</h1>
<%-- 몸무게가 70이하면 치킨, 80이하면 샐러드, 그 이상이면 굶자 --%>
<c:set var="weigth" value="75"/>
<c:choose>
<c:when test="${weigth <= 70}">
<h2>치킨</h2>
</c:when>
<c:when test="${weigth <= 80}">
<h2>샐러드</h2>
</c:when>
<c:otherwise>
<h2>굶자</h2>
</c:otherwise>
</c:choose>
<h1>반복문 (c:forEach)</h1>
<c:forEach var="i" begin="0" end="5" step="1">
${i}
</c:forEach>
<br>
<c:forEach var="j" begin="16" end="20" step="1" varStatus="status">
j : ${j} current : ${status.current}
first(반복문이 첫회 돌았을 때 찍힌다) : ${status.first}
last(반복문이 마지막회에 돌았을 때 찍힌다) : ${status.last}
count : ${status.count}
index : ${status.index}
<br>
</c:forEach>
<br>
<%-- 서버에서 가져온 List --%>
<c:forEach var="fruit" items="${fruits}" varStatus="status">
${fruit} ::::::::: ${status.count} ::::::::: ${status.index} <br>
</c:forEach>
<br>
<%-- 서버에서 가져온 List Map --%>
<c:forEach var="user" items="${users}" varStatus="status">
<h3>${status.count}번째 사람 정보</h3>
이름 : ${user.name} <br>
나이 : ${user.age} <br>
취미 : ${user.hobby} <br>
</c:forEach>
<%-- 테이블 구성 --%>
<table border="1">
<thead>
<tr>
<th>번호</th>
<th>이름</th>
<th>나이</th>
<th>취미</th>
</tr>
</thead>
<tbody>
<c:forEach var="user" items="${users}" varStatus="status">
<tr>
<td>${status.count}</td>
<td>${user.name}</td>
<td>${user.age}</td>
<td>${user.hobby}</td>
</tr>
</c:forEach>
</tbody>
</table>
</body>
</html>