1. JSTL(JSP Standard Tag Library)
웹페이지 상에서 간단한 프로그램 제어를 처리하기 위한 태그 집합
archive.apache.org/dist/jakarta/taglibs/standard/binaries/
다운받아서
위에 두 jar파일 lib에 추가하기
JSTL의 변수 선언
<c:set var="cnt" value="0">
2. JSTL 구성
1. core(코어) - 변수 선언, 실행 흐름 제어용 태그들
2. format(형식지정) - 숫자, 날짜, 시간 등 출력 형식 지정
3. sql(데이터베이스) - DB의 데이터 입력/수정/삭제/조회 기능
4. xml - XML 문서 처리 기능
5. function(함수) - 문자열 처리 함수 제공
jstl_ex.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><%-- JSTL 태그 선언 --%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSTL 기초</title>
</head>
<body>
<%-- 변수 선언 --%>
<c:set var="num1" value="100" scope="request" />
<%-- request 영역에 속성 생성됨. scope설정 안하면 pageContext영역에 기본으로 생성됨 --%>
<c:set var="num2" value="200" scope="request" />
<%-- 조건 분기 처리 --%>
<c:if test="${num1 > num2}">
<p>num1이 크다</p>
</c:if>
<c:if test="${num1 < num2}">
<p>num2가 크다</p>
</c:if>
</body>
</html>
jsp에서 위에 taglibJSTL 태그 선언 :
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
3. 사용 형식
- core -> c:if(조건에 맞춰서 실행할지 말지 결정), c:forEach, c:set 등
- format -> fmt:formatNumber 등
- function -> fn:toUpperCase("hello") => HELLO
- core 주요 태그
조건 처리 태그 : if, choose/when
반복 처리 태그 : forEach, forTokens
예외 처리 태그 : catch - format 주요 태그
날짜 시간 지정 태그 : formatDate
수치 지정 태그 : formateNumber
사용예제1)
1. 데이터 입력용 jsp 생성 및 forward로 data_veiw.jsp로 데이터 전달해줌
data_in.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><%-- JSTL 태그 선언 --%>
<c:set var="code" value="ep001" scope="request"/>
<c:set var="name" value="TV" scope="request"/>
<c:set var="price" value="1000000" scope="request"/>
<jsp:forward page="data_veiw.jsp"></jsp:forward>
2. 전달 받은 데이터 출력
- 제품 정보 출력
- c:remove : 데이터 삭제
- c:if으로 조건식 작성해서 c:remove : 데이터 삭제해보기
- c:forEach
- c:forEach에서 카운트 변수 사용
- c:forEach로 배열 출력 가능
data_view.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%
String arr[] = {"갈비탕", "돈까스", "비빔밥"};
pageContext.setAttribute("menu", arr);
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>제품 정보</title>
</head>
<body>
<h2>제품 정보</h2>
<%-- 제품 정보 출력 --%>
제품코드 : ${code}<br>
제품명 : ${name}<br>
가격: ${price}<br>
<hr>
<%-- c:remove : 데이터 삭제 --%>
<c:remove var="code" />
제품코드 : ${code}<br>
제품명 : ${name}<br>
가격: ${price}<br>
<hr>
<%-- c:if으로 조건식 작성해서 c:remove : 데이터 삭제해보기 --%>
<c:if test="${name == 'TV'}">
<c:remove var="name" />
</c:if>
제품코드 : ${code}<br>
제품명 : ${name}<br>
가격: ${price}<br>
<hr>
<%-- c:forEach -> 1번부터 5번 반복 --%>
<c:forEach begin="1" end="5"><%-- 1번부터 5번 반복 --%>
제품코드 : ${code}<br>
제품명 : ${name}<br>
가격: ${price}<br>
</c:forEach>
<hr>
<%-- c:forEach에서 카운트 변수 사용 --%>
<c:forEach var="cnt" begin="1" end="20" step="2"><%-- cnt : 카운트용 변수, step : 카운트 증가 단위 설정 --%>
${cnt}
<c:if test="${cnt % 3 == 0}">
<br>
</c:if>
</c:forEach>
<hr>
<%-- c:forEach로 배열 출력 가능 --%>
<ul>
<c:forEach var="m" items="${menu}"><%-- 배열구조는 items에 설정 --%>
<li>${m}</li>
</c:forEach>
</ul>
<hr>
</body>
</html>
사용예제2)
- c:choose
- c:when
c:choose 태그 영역에 있는 c:when 조건에 맞는 영역에 있는 hrml문 실행
choose.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 PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>인사하기</title>
</head>
<body>
<c:choose>
<c:when test="${param.num == 0}">
<h3>처음 뵙겠습니당#_#</h3><br>
</c:when>
<c:when test="${param.num == 1}">
<h3>반갑습니당~(@_@)</h3><br>
</c:when>
<c:otherwise>
<h3>안녕하세요>O<</h3><br>
</c:otherwise>
</c:choose>
</body>
</html>
사용예제3)
로그인 처리
loginFrm.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSTL 로그인</title>
</head>
<body>
<form action="lProcJSTL.jsp" method="post">
<table>
<tr>
<td>id</td>
<td><input type="text" name="id" required></td>
</tr>
<tr>
<td>password</td>
<td><input type="password" name="pwd" required></td>
</tr>
<tr>
<td colspan="2" style="text-align: center;">
<input type="submit" value="로그인">
<input type="reset" value="취소">
</td>
</tr>
</table>
</form>
</body>
</html>
lProcJSTL.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>로그인 결과</title>
</head>
<body>
<%
String id = request.getParameter("id");
String pwd = request.getParameter("pwd");
//회원 아이디 : user1
//비밀번호 : 1234
String dbid = "user2";//DB에서 가져온 데이터라고 가정
String dbpwd = "1234";
if(dbid.equals(id)){
if(dbpwd.equals(pwd)){
session.setAttribute("id", id);
session.setAttribute("pwd", pwd);
response.sendRedirect("main2.jsp");
}
else{
//비밀번호 오류
//로그인 실패시 다시 로그인 페이지로 이동
response.sendRedirect("loginFrm.jsp");
}
}
else{
//아이디 없음
response.sendRedirect("loginFrm.jsp");
}
%>
</body>
</html>
<%@page import="java.util.Date"%>
<%@ 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="date" value="<%=new Date() %>"/>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>메인 페이지</title>
</head>
<body>
<c:choose>
<c:when test="${empty id}">
잘못된 접근입니다.
</c:when>
<c:otherwise>
${id}님 반갑습니다
</c:otherwise>
</c:choose>
</body>
</html>
format관련 프리픽스
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
main2.jsp
<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%><%-- format관련 프리픽스 --%>
<c:set var="date" value="<%=new Date() %>"/>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>메인 페이지</title>
</head>
<body>
<p>[오늘의 날짜] <fmt:formatDate value="${date}"/></p>
<p>[현재의 시간] <fmt:formatDate value="${date}" type="time"/></p>
<hr>
<p>날짜/시간 출력 형식</p>
<p><fmt:formatDate value="${date}" type="date" dateStyle="full"/></p>
<p><fmt:formatDate value="${date}" type="date" dateStyle="long"/></p>
<p><fmt:formatDate value="${date}" type="date" dateStyle="medium"/></p>
<p><fmt:formatDate value="${date}" type="date" dateStyle="short"/></p>
<p><fmt:formatDate value="${date}" type="time" timeStyle="full"/></p>
<p><fmt:formatDate value="${date}" type="time" timeStyle="long"/></p>
<p><fmt:formatDate value="${date}" type="time" timeStyle="medium"/></p>
<p><fmt:formatDate value="${date}" type="time" timeStyle="short"/></p>
</body>
</html>