오봉이와 함께하는 개발 블로그

JSP - JSTL 본문

BE/JSP

JSP - JSTL

오봉봉이 2021. 12. 31. 16:28
728x90

JSTL (JSP Standard Tag Library)

  • JSP 표준 태그 라이브러리
  • <%@ taglib prefix="c" uri="http:....." %>
  • JSP와 HTML을 같이 사용함으로서 가독성이 떨어지는 것을 보완하고자 만들어진 태그 라이브러리
  • JSP 페이지 내에서 자바 코드를 사용하지 않고 태그를 사용하도록 함
  • JSP 페이지의 로직을 담당하는 부분인 제어문 및 데이터베이스 처리 등을 표준 커스텀 태그로 제공

JSTL 라이브러리 구성

  • Core (코어)
    • URI : http://java.sun.com.jsp/jstl/core
    • Prefix : c
    • 제공 기능
      • 변수 선언 및 삭제 등 변수와 관련된 작업
      • if, for 문 등과 같은 제어문
      • URL 처리 및 그 밖의 예외처리 및 화면 출력
    • 변수 지원
      • <c:set>
        • 변수 지정
        • setAttribute()와 같은 역할
      • <c:remove>
        • 지정된 변수 제거
    • 흐름 제어
      • <c:if> : 조건문
      • <c:choose>
        • switch문에 해당
        • <c:when>, <c:otherwise> 서브 태그
      • <c:forEach> : 반복문
      • <c:forTokens> : 구분자로 분리된 각 토큰 처리
    • URL 처리
      • <c:import> : 다른 자원 추가
      • <c:redirect> : sendRedirect() 기능
      • <c:rul> : url 생성 (페이지 이동)
    • 기타
      • <c:catch> : 예외 처리
      • <c:out> : 출력

<c:set> 태그 : 변수 선언 예제 - c_set.jsp

<%@ 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="id" value="hong" scope="page" />
<c:set var="pwd" value="1234" scope="page" />
<c:set var="name" value="${'홍길동' }" scope="page" />
<c:set var="age" value="${20 }" scope="page" />
<!--  value 값으로 EL 사용해도 됨 -->

<c:set var="contextPath" value="${pageContext.request.contextPath }" />
<!-- 복잡한 속셩명을 짧게 줄여서 사용 -->

<html>
    <head>
        <meta charset="UTF-8">
        <title>c:set 태그</title>
    </head>
    <body>
        ${id } <br>
        ${pwd } <br>
        ${name } <br>
        ${age } <br><br>

        <a href="${contextPath}/login.jsp">로그인</a>
    </body>
</html>

<c:if> 태그 : 조건문 (else문 없을 경우의 if문) - c_if.jsp

<%@ 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="id" value="hong2" scope="page" />
<c:set var="pwd" value="1234" scope="page" />
<c:set var="name" value="${'홍길동' }" scope="page" />
<c:set var="age" value="${20 }" scope="page" />
<c:set var="height" value="${170 }" scope="page" />

<html>
    <head>
        <meta charset="UTF-8">
        <title>c:if 태그</title>
    </head>
    <body>
        <c:if test="${true }">
            <h3>항상 참입니다</h3>
        </c:if>
        <c:if test="${(id=='hong') && (name=='홍길동')}">
            <h3>아이디는 ${id }이고, 이름은 ${name }입니다</h3>
        </c:if>
    </body>
</html>

<c:choose> 태그 : switch문 기능 - c_choose.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<c:set var="id" value="hong" scope="page" />
<c:set var="pwd" value="1234" scope="page" />
<c:set var="name" value="${'홍길동'}" scope="page" />
<c:set var="age" value="${20}" scope="page" />
<c:set var="height" value="${170}" scope="page" />
<html>
  <head>
      <title>Title</title>
  </head>
  <body>
    <table border="1" align="center">
      <tr align="center" bgcolor="#90ee90">
        <td width="7%">아이디</td>
        <td width="7%">비밀번호</td>
        <td width="7%">이름</td>
        <td width="7%">나이</td>
        <td width="7%">키</td>
        <c:choose>
          <c:when test="${empty name}">
            <tr align="center"><td colspan="5">이름이 없습니다.</td></tr>
          </c:when>
          <c:otherwise>
            <tr align="center">
              <td>${id}</td>
              <td>${pwd}</td>
              <td>${name}</td>
              <td>${age}</td>
              <td>${height}</td>
            </tr>
          </c:otherwise>
        </c:choose>
      </tr>
    </table>
  </body>
</html>

<c:forEach> 태그 : 반복문 수행 예제 - c_forEach.jsp

  • <c:forEach var=”변수명 items=”반복할 객체명” begin=”시작값” end=”마지막값” step=”증가값” varStatus=”반복상태변수명”>
  • </c:forEach>
  • varStatus : 반복 상태 속성 지정
    • index : 인덱스 번호 반환 (일반적으로 0부터 시작. begin 값을 1로 설정하면 인덱스도 1부터 시작)
    • count : 몇 번째 반복인지 숫자 반환
    • first: 첫 번째 여부 (boolean 값 반환)
    • last : 마지막 여부(boolean 값 반환)
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
  List dataList = new ArrayList();
  dataList.add("hello");
  dataList.add("world");
  dataList.add("안녕하세요");
%>
<html>
  <head>
      <title>Title</title>
  </head>
  <body>
    <c:forEach var="i" begin="1" end="10" step="1" varStatus="loop">
      i = ${i} &nbsp;&nbsp; 반복회수 : ${loop.count}
      &nbsp;&nbsp; 인덱스 : ${loop.index}
      &nbsp;&nbsp; 첫 번째 : ${loop.first}
      &nbsp;&nbsp; 마지막 : ${loop.last} <br>
    </c:forEach> <br>

    <c:set var="list" value="${dataList}" />
    <c:forEach var="data" items="${list}">
      ${data} <br>
    </c:forEach>

    <c:set var="fruits" value="사과, 수박, 바나나, 망고, 귤" />
    <c:forTokens items="${fruits}" delims="," var="token">
      ${fruits} <br>
    </c:forTokens>
  </body>
</html>

<c:url> 태그

  • <c:url var=”변수명” value=”url경로” [scope] />
  • <c:url var="url1" value="/sec01/login.jsp" />
    • /가 있어서야 ContextPath (/JSP01)부터 찾음
    • / 없는 경우 : 현재 페이지가 들어 있는 sec02부터 찾음
      • <c:url var="url1" value="sec01/login.jsp" />
      • /JSP01/sec02/sec01/login.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<c:url var="url1" value="login.jsp" />
<html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <a href="${url1}">로그인 화면으로 이동</a>
    </body>
</html>

<c:redirect> 태그

  • response.sendRedirect() 기능
  • 매개변수 전달 가능
<c:redirect url=”redirect할 url”>
<c:param name=”id” value=”${‘hong’}” />
</c:redirect>

<c:redirect> 태그 예제 - c_redirect.jsp, c_redirect_result.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <c:redirect url="c_redirect_result.jsp">
            <c:param name="name" value="${'HongGilDong'}"/>
            <c:param name="email" value="${'hong@test.com'}"/>
        </c:redirect>
    </body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
      <title>Title</title>
  </head>
  <body>
    <h3>redirect 할 때 전달된 param 받기</h3>
    성명 : ${param.name} <br>
    이메일 : ${param.email}
  </body>
</html>

포매팅 태그 라이브러리

  • 숫자, 날짜, 통화 관련 포매팅 태그 라이브러리
  • <fmt:formatDate>
  • <fmt:formatNumber>
  • <fmt:timeZone>

포매팅 예제 - format_taglib.jsp

<%@ page import="java.util.Date" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h3>formatNumber</h3>
    <c:set var="price" value="100000000"/>
    <fmt:formatNumber type="number" value="${price}" var="priceNumber"/>
    일반 숫자로 표현 : ${priceNumber}<br>
    통화로 표현 : <fmt:formatNumber type="currency" value="${price}" currencySymbol="$" /><br>
<!--천 단위 구분 표시 : groupingUsed="ture" or "false" (default : true)-->
    퍼센트로 포현 : <fmt:formatNumber type="percent" value="${price}" groupingUsed="true" /><br>
    <h3>formatDate</h3>
    <c:set var="now" value="<%= new Date()%>" />
    일반 날짜로 표현 : ${now} <br>
    포매팅 스타일없이 : <fmt:formatDate value="${now}" type="date" /> <br>
    포매팅 full : <fmt:formatDate value="${now}" type="date" dateStyle="full" /> <br>
    포매팅 short : <fmt:formatDate value="${now}" type="date" dateStyle="short" /> <br>
    포매팅 type:time : <fmt:formatDate value="${now}" type="time" /> <br>
    포매팅 type:both : <fmt:formatDate value="${now}" type="both" /> <br>
    포매팅 type:both dateStyle:full timeStyle:full : <fmt:formatDate value="${now}" type="both" dateStyle="full" timeStyle="full" /> <br>
    패턴 yyyy-MM-dd hh:mm:ss <fmt:formatDate value="${now}" pattern="yyyy-MM-dd hh:mm:ss" /> <br>

    한국 현재 시간 : <fmt:formatDate value="${now}" type="both" dateStyle="full" timeStyle="full" /> <br>
    뉴욕 현재 시간 : <fmt:formatDate value="${now}" timeZone="GMT-5" type="both" dateStyle="full" timeStyle="full" />
</body>
</html>

문자열 처리 함수

함수 기능 태그 라이브러리 - fn_string.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
      <title>Title</title>
  </head>
  <body>
    <c:set var="title1" value="hello world" />
    <c:set var="title2" value="쇼핑몰 중심 JSP 입니다" />
    <c:set var="str" value="중심" />
    title1 : ${title1} <br>
    title2 : ${title2} <br>
    str : ${str} <br>

  ${title1}의 문자열 길이 : ${fn:length(title1)} <br>
  title1 3 ~ 5 번째 문자열 추출 : ${fn:substring(title1, 2, 5)} <br>
  공백을 /로 변환 : ${fn:replace(title1, " ", "/")}<br>
  title1에 '중심' 단어 포함 여부 : ${fn:contains(title1, str)}<br>
  title2에 '중심' 단어 포함 여부 : ${fn:contains(title2, str)}<br>
  </body>
</html>
728x90
Comments