본문 바로가기
공부기록

5월 10일 (2) Spring - JSTL 라이브러리

by project100 2023. 5. 10.

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 라이브러리 바뀜!

<dependency>
<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 파일명을 작성

 

출력할 페이지에 넣을 코드
<c:import url="today.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>