목차

JSTL에서 제공하는 태그 종류

코어(Core) 태그

varStatus 속성을 통해 얻을 수 있는 정보

태그 설명

태그

#JSP

#JSTL

#LIBRARY

JSP 표준 태그 라이브러리(JSTL - Core)

2021년 12월 15일 02:01

20-thumbnail-image

이 글은 골든래빗 출판사로부터 책을 제공받아 작성했습니다.

http://www.yes24.com/Product/Goods/105016218

JSTL에서 제공하는 태그 종류

종류기능접두어URI
Core 태그변수 선언, 조건문/반복문. URL 처리chttp://java.sun.com/jstl/core
Formatting 태그숫자, 날짜, 시간 포맷 지정fmthttp://java.sun.com/jstl/fmt
XML 태그XML 파싱xhttp://java.sun.com/jstl/xml
Function 태그컬렉션, 문자열 처리fnhttp://java.sun.com/jstl/function
SQL 태그데이터베이스 연결 및 쿼리 실행sqlhttp://java.sun.com/jstl/sql

코어(Core) 태그

태그명기능
setEL에서 사용할 변수를 설정 (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문
currentvar에 지정한 현재 루프의 변수값 변환현재 루프의 실제 요소를 반환
indexvar에 지정한 현재 루프의 변수값 반환현재 루프의 인덱스 표시
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>