JSTL(Jsp Standard Tag Library)
- 간단한 프로그램 로직 구현(변수 활용, 제어문 등)
- 다른 jsp 페이지를 포함.
- 날짜, 시간, 숫자의 형식 지정
- 문자열 처리 함수 제공
JSTL 라이브러리 필요(dependency) - 1.2 버전.
라이브러리 구성
1) 코어(core) : 접두어는 'c'. 변수, 제어문 등 포함.
uri - http://java.sun.com/jsp/jstl/core
2) 포맷(format) : 접두어는 'fmt'. 출력형식 지정
uri - http://java.sun.com/jsp/jstl/fmt
3) 함수(functions) : 접두어는 'fn'. 기타..
uri - http://java.sun.com/jsp/jstl/functions
페이지에 라이브러리를 포함시키는 방법
<%@ 지시자용 태그 시작
<%@ tablib prefix="c" uri="http://java......"%>
jsp 페이지 윗줄에 위와 같이 작성.
JSTL 라이브러리 바뀜!
<groupId>org.glassfish.web</groupId>
<artifactId>jakarta.servlet.jsp.jstl</artifactId>
<version>2.0.0</version>
</dependency>
JSTL 라이브러리
1. Core 태그(프로그램 로직 관련 태그들)
1) set : 페이지에서 사용하는 변수를 생성하는 태그. EL을 사용하여 출력 및 활용
형식) <c(접두어):set var = "변수명" value="값"></c:set>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--JSP용 주석--%>
<%--JSTL로 변수 생성--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="num1" value="10"></c:set>
<c:set var="num2" value="20"/>
<c:set var="res" value="${num1 + num2}"/>
<html>
<head>
<title>JSTL 예제</title>
</head>
<body>
<p>${num1} + ${num2} = ${res}</p>
</body>
</html>
2) remove : set으로 생성한 변수를 제거하는 태그. 잘 사용하지 않는다.
형식) <c:remove var="변수명"></c:remove>
3) if : 자바의 if 문에 해당하는 태그. else에 해당하는 태그는 없음.
주요 속성)
test : 조건식을 작성하는 속성. true인 경우 실행
<h2>if 태그</h2>
<c:if test="${empty id}">
<p>guest님 환영합니다!</p>
</c:if>
<c:if test="${!empty id}">
<p>${id}님 환영합니다!</p>
</c:if>
참고) EL의 empty 연산자
식별자를 통해 전달되는 데이터가 없으면(null이면) true, 데이터가 있으면 false로 처리하는 연산자
4) choose, when, otherwise : 자바의 switch(case, default)에 해당하는 태그
choose 태그는 grouping의 용도로 사용.
when 태그는 분기를 처리(case 역할) test 속성을 사용.
otherwise 태그는 default와 같은 태그.
형태는 switch 내용은 if / else if
<h2>choose 태그</h2>
<c:set var="sel" value="1"/>
<c:choose>
<c:when test="${sel == 1}">
<p>처음뵙겠습니다.</p>
</c:when>
<c:when test="${sel > 1}">
<p>반갑습니다.</p>
</c:when>
<c:otherwise>
<P>안녕하세요.</P>
</c:otherwise>
</c:choose>
5) forEach : 자바의 for문에 해당하는 태그
주요 속성)
var : 일종의 count 변수를 생성 예) for의 int i
begin : count변수의 시작값을 설정하는 속성
end : 반복하는 횟수의 마지막 값을 설정하는 속성
step : count값의 증가 폭을 지정, 생략 시 1씩 증가
items : 배열 구조(ArrayList 등)의 데이터를 지정, var과 함께 사용하면 배열에서 하나를 꺼내와 var에 넣어서 사용
배열 구조의 마지막 원소까지 반복적으로 실행
형태) for(int i : intArray)
varStatus : 반복 상태를 알 수 있는 변수를 지정
index : 사용하는 항목의 순번. 0번부터 시작
count : 반복하는 항목이 몇 번째 항목인지를 나타냄, 1부터 시작
if와 함께 사용
-- first : 반복의 처음인가? true/false
-- last : 반복의 마지막인가? true/false
예) <c:forEach var="a" items="list" varStatus="state">
<p>${state.index/count}</p> ->index 사용 시 화면에 0이 찍힘
</c:forEach>
<ul>
<c:forEach var="food" items="${list}" varStatus="st">
<c:if test="${st.count % 2 == 0}">
<li>
<span style="color: blue">
${st.index}-${st.count} : ${food}
</span>
</li>
</c:if>
<c:if test="${st.count % 2 != 0}">
<li>${st.index}-${st.count} : ${food}</li>
</c:if>
<c:if test="${st.last}">
<li><b>${st.index}-${st.count} : ${food}</b></li>
</c:if>
</c:forEach>
</ul>
6) import : 다른 jsp 페이지를 포함시키는 태그
주요 속성)
url : 포함시킬 jsp 파일명을 작성
<%@ page import="java.util.Date,java.text.SimpleDateFormat" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
Date now = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd (E)");
String nowDate = sdf.format(now);
//out 객체 : 브라우저에 출력하는 객체
//system은 콘솔에 출력
out.print("<h3>" + nowDate + "</h3>");
%>
* 기본 내장 객체 out 객체
html -> 브라우저 : response 객체(HTML을 브라우저에 가져다 줌)
브라우저 -> html : regest(p)
system -> 시스템은 콘솔에 나타내는 것
2. format
형식 : <fmt:xxxxx>
1) formatDate : 날짜와 시간을 출력 형식을 지정
주요 속성)
value : 날짜 객체 지정(Date 객체)
type : date - 날짜, time - 시간(기본값 date), both - 날짜와 시간 모두 출력
xxxxStyle : 날짜/시간 형식 지정(정해진 형식) full, long, medium, short 형태로 지정
patten : 사용자 형식으로 지정(자유형식)
<%@ page import="java.util.Date,java.text.SimpleDateFormat" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<c:set var="now" value="<%=new Date()%>"/>
<h3><fmt:formatDate value="${now}"/></h3>
<%--2023년 5월 10일 수요일--%>
<h3>full : <fmt:formatDate value="${now}" type="date" dateStyle="full"/></h3>
<%--2023년 5월 10일--%>
<h3>long : <fmt:formatDate value="${now}" type="date" dateStyle="long"/></h3>
<%--2023. 5. 10.--%>
<h3>medium : <fmt:formatDate value="${now}" type="date" dateStyle="medium"/></h3>
<%--23. 5. 10.--%>
<h3>short : <fmt:formatDate value="${now}" type="date" dateStyle="short"/></h3>
<%--
Date now = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd (E)");
String nowDate = sdf.format(now);
//out 객체 : 브라우저에 출력하는 객체
//system은 콘솔에 출력
out.print("<h3>" + nowDate + "</h3>");
--%>
<h3>full : <fmt:formatDate value="${now}" type="time" timeStyle="full"/></h3>
<h3>long : <fmt:formatDate value="${now}" type="time" timeStyle="long"/></h3>
<h3>medium : <fmt:formatDate value="${now}" type="time" timeStyle="medium"/></h3>
<h3>short : <fmt:formatDate value="${now}" type="time" timeStyle="short"/></h3>
<hr>
<h3><fmt:formatDate value="${now}" type="date" pattern="yyyy년 MM월 dd일 (E)"/></h3>
<h3><fmt:formatDate value="${now}" type="time" pattern="[a] hh:mm:ss"/></h3>
<h3><fmt:formatDate value="${now}" type="time" pattern="HH:mm:ss"/></h3>
2) formatNumber : 숫자 출력 형식 지정(금액, 소수점 등)
주요 속성)
value : 출력할 숫자 값 입력
groupingUsed : 세 자리마다 ',' 출력. true / false(기본값)
pattern : 소수점 출력 형식 지정
# - 자릿수 표현 기호(#.###), 0 - 자릿수 표현 기호, 빈 공간에 0 출력 (#.000)
type : 출력 숫자에 대한 형식 지정
currency - 금액 출력 형식으로 지정. 통화기호를 앞에 출력(국가에 따라 다름)
percent - value가 소수점 값일 경우 퍼센트로 변경하여 출력 0.1 -> 10%
currencySymbol : 통화 기호 변경 속성
<h2>숫자 형식 지정</h2>
<fmt:formatNumber value="123456789" groupingUsed="true"/><br>
<fmt:formatNumber value="3.141592" pattern="#.##"/><br>
<fmt:formatNumber value="1.5" pattern="#.0000"/><br>
<fmt:formatNumber value="0.45" type="percent"/><br>
<fmt:formatNumber value="10000000000000" type="currency"/><br>
<fmt:formatNumber value="10000000000000" type="currency" currencySymbol="$"/><br>
'공부기록' 카테고리의 다른 글
5월 11일 (2) Spring - JDBC 연동 프로젝트2 (0) | 2023.05.11 |
---|---|
5월 11일 (1) Spring - JDBC 연동 프로젝트 (0) | 2023.05.11 |
4월 27일 Java - Lombok, JDBC 2 (0) | 2023.04.27 |
4월 27일 Java - JDBC (0) | 2023.04.27 |
4월 25일 Java - Calendar, File (0) | 2023.04.25 |