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>
'Back > JSTL' 카테고리의 다른 글
JSTL 문법 - 2 (0) | 2023.04.14 |
---|