JSTL 이란
JSP 표준 태그 라이브러리의 약자(JSP Standard Tag Library)이다.
JSP 페이지를 작성할 때 유용하게 사용할 수 있는 여러 가지 커스텀 액션과 함수가 포함되어 있는 라이브러리이다.
JSTL을 가지고 할 수 있는 일
간단한 프로그램 로직의 구사(자바의 for, if, 변수 선언 등의 로직)
다른 JSP 페이지 호출(<c:redirect>, <c:import>)
날짜, 시간, 숫자의 포맷
JSP 페이지 하나를 가지고 여러 가지 언어의 웹 페이지 생성
데이터베이스로의 입력, 수정, 삭제, 조회
XML 문서의 처리
문자열을 처리하는 함수 호출
문자열을 처리하는 함수 호출을 제외한 나머지 기능들은 모두 커스텀 액션 형태로 제공된다.
JSTL을 구성하는 작은 라이브러리들
코어 라이브러리 사용하기
<c:set> 커스텀 액션의 사용 방법
<c:set>은 변수를 선언하고 초기값을 대입하는 커스텀 액션이다.
자바 프로그램에서 변수를 선언할 때는 기본적으로 변수의 타입과 이름을 기술하고, 선택적으로 초기값을 기술한다.
<c:set> 커스텀 액션을 이용해서 변수를 선언할 때는 변수의 타입을 쓰지 않는다.
int num = 100;
->
<c:set var = "num" value = "100" />
value attribute 값 위치에 EL 식을 쓸 수도 있다.
<c:set var = "sum" value = "${num1 + num2}" />
<c:set> 커스텀 액션의 사용 방법
<%@ page contentType="text/html; charset=euc-kr" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="num1" value="7" />
<c:set var="num2" value="9" />
<c:set var="result" value="${num1*num2}" />
<html>
<head><title>곱셈 프로그램</title></head>
<body>
${num1}과 ${num2}의 곱은? ${result}
</body>
</html>
<c:set> 액션을 이용해서 선언한 변수는 page 데이터 영역의 attribute가 된다.
<c:set> 태그에 scope 속성을 추가하고 page, request, session, application 중 한 값을 지정하면 선언된 변수가 page, request, session, application 데이터 영역 의 attribute가 되도록 지정하는 것도 가능하다.
<c:set var = "PRICE" value = "1500" scope = "request/>
scope 속성에 request라는 값을 지정하고 나서 forward 메서드를 통해 다른 JSP 페이지를 호출하면 그 JSP 페이지 안에서도 선언된 변수를 사용할 수 있다.
forward 예시
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var = "CODE" value = "80012" scope = "request" />
<c:set var = "NAME" value = "온도습계" scope = "request" />
<c:set var = "PRICE" value = "1500" scope = "request" />
<jsp:forward page = "ProductInfoView.jsp" />
ProductInfoView.jsp
<%@ 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>상품 정보</title>
</head>
<body>
<h3>상품 정보</h3>
상품 코드 : ${CODE} <BR>
상품명 : ${NAME} <BR>
단가 : ${PRICE} <BR>
</body>
</html>
Test2.jsp 파일을 불렀는데 ProductInfo 파일이 불려 오는 것을 볼 수 있다.
<c:remove> 커스텀 액션 사용 방법
c:set 액션을 이용해서 선언한 변수는 page, request, session, application 데이터 영역의 어트리뷰트로 저장되므로, 자바 변수와 달리 인위적으로 삭제해야 할 필요가 있다.
c:remove 커스텀 액션은 이런 어트리뷰트를 삭제하는 기능을 한다.
<c:if> 커스텀 액션의 사용 방법
자바의 if와 비슷한 역할을 하고, 사용법이 조금 다르다
if(num1> num2){
System.out.println("num1이 더 크다.")
}
// ------>
<c:if test = "${num1 > num2}">
num1이 더 크다.
</c:if>
if 예제
<%@ 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>최대값 구하기</title>
</head>
<body>
최대값:
<c:if test="${param.NUM1 - param.NUM2 >= 0}">
${param.NUM1}
</c:if>
<c:if test="${param.NUM1 - param.NUM2 < 0}">
${param.NUM2}
</c:if>
</body>
</html>
<c:choose> 커스텀 액션의 사용 방법
자바의 switch 문과 비슷한 역할을 한다.
<c:when> , <c:otherwise> 라는 커스텀 액션과 함께 사용되며, 두 커스텀 액션은 각각 switch문의 case default절과 비슷한 역할을 한다.
switch(num){
case 0 :
System.out.println("처음 뵙겠습니다.")
break
case 1 :
System.out.println("반갑습니다.")
break
default :
System.out.println("안녕하세요")
break
}
// ------>
<c:choose>
<c:when test = "${num == 0}">
처음 뵙겠습니다. <br>
<c/:when>
<c:when test = "${num == 1}">
반갑습니다. <br>
<c/:when>
<c:otherwise>
안녕하세요 <br>
<c/:otherwise>
<c/:choose>
<c:forEach> 커스텀 액션 사용 방법
자바의 for문에 해당
특정 HTML코드를 지정된 횟수만큼 반복해서 출력 가능
for(int cnt = 0 ; cnt < 10 ; cnt++){
System.out.println("야호.")
break
}
//-------->
<c:forEach begin="1" end="10">
야호 <br>
</c:forEach>
반복 출력할 코드 안에서 카운터 변수의 값을 사용해야 할 경우에는 <c:forEach> 태그 안에 var라는 어트리뷰트를 쓰고, 그 값으로 카운터 변수의 이름을 지정하면 된다.
<c:forEach var = "cnt" begin="1" end="10">
${cnt} <br>
</c:forEach>
카운터 변수의 값은 기본적으로 1씩 증가하지만, 그 값을 바꾸고 싶다면 step 어트리뷰트를 추가하여 증가치 지정이 가능하다.
<c:forEach var = "cnt" begin="1" end="10" step = "2">
${cnt} <br>
</c:forEach>
forEach 예시
<%@ 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>메아리</title>
</head>
<body>
<c:forEach var="cnt" begin="1" end="5">
<FONT size=${cnt}>야~호~</FONT><br>
</c:forEach>
</body>
</html>
forEach 추가
<c:forEach> 커스텀 액션의 items 어트리뷰트를 이용하면 여러 개의 항목으로 구성된 데이터를 순서대로 출력하는 일도 할 수 있다.
<c:forEach var = "str" items = "${arr}">
//arr= 배열의 이름, str = 배열의 각 항목을 저장할 변수
${str} <br>
</c:forEach>
items 어트리뷰트를 이용해서 처리할 수 있는 데이터
배열
java.util.Collection 객체
java.util.Iterator 객체
java.util.Enumeration 객체
java.util.Map 객체
콤마(,)로 구분된 항목들을 포함한 문자열
forEach배열 예시
<%@ page contentType="test/html; charset=euc-kr" %>
<%
String arr[] = {"불고기 백반", "오므라이스", "콩국수"};
request.setAttribute("MENU", arr);
%>
<jsp:forward page="LunchMenuView.jsp" />
LaunchMenuView.jsp
<%@ 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>구내 식당</title>
</head>
<body>
<h3>오늘의 점심 메뉴입니다.</h3>
<ul>
<c:forEach var="dish" items="${MENU}">
<li>${dish}</li>
</c:forEach>
</ul>
</body>
</html>