Etc/2020

JSTL(JSP standard tag library) 주요 태그 문법 정리

메바동 2020. 5. 28. 17:20
728x90

1. JSTL?

자바서버 페이지 표준 태그 라이브러리(JavaServer Pages Standard Tag Library)는 Java EE 기반의 웹 애플리케이션 개발 플랫폼을 위한 컴포넌트 모음으로, JSP 페이지 내에서 자바 코드를 바로 사용하지 않고 로직을 내장하는 효율적인 방법을 제공한다.

JSTL의 종류

라이브러리명 접두어 URI 기능
Core c http://java.sun.com/jsp/jstl/core 변수 지원, 흐름 제어, URL 처리, 기타
XML x http://java.sun.com/jsp/jstl/xml XML 코어, 흐름 제어, XML 변환
Internationalization fmt http://java.sun.com/jsp/jstl/fmt 로케일, 메세지 형식, 숫자 및 날짜 형식
SQL sql http://java.sun.com/jsp/jstl/sql SQL
Functions fn http://java.sun.com/jsp/jstl/functions 콜렉션 처리, String 처리

사용방법

Java에서 라이브러리를 사용하기 위해서는 import 문을 선언하듯 JSP에서 JSTL을 사용하려면 taglib 지시자로 라이브러리를 선언한다. 아래의 코드를 JSP 상단에 적어주면 JSTL을 사용할 수 있다.

<%@ taglib prefix="접두사" uri="URI" %>

각 태그 라이브러리 별 표준 선언문은 다음과 같다.

태그 라이브러리 선언문
Core <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
XML <%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
I18N <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
SQL <%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
Functions <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

2. Core 태그

  1. 변수 지원

    • set : JSP에서 사용될 변수를 설정

      <c:set var="변수명" value="값" scope="page(default)|request|session|application" />
      

      <c:set>을 이용한 객체의 프로퍼티 값 설정

      <c:set target="대상 객체" property="설정할 프로퍼티" value="프로퍼티 값" />
      
    • remove : 설정한 변수를 제거

      <c:remove var="변수명" scopre="page(default)|request|session|application" />
      
  2. 흐름 제어

    • if : 조건에 따라 내부 코드를 수행

      <c:if test="조건식" var="변수명" scope="page(default)|request|session|application">내용</c:if>
      

      var, scope 속성은 test의 결과를 저장할 때 사용 / test의 조건식이 참이 되면 "내용"이 실행

    • choose : 다중 조건을 처리할 때 사용 / Java의 switch-case와 같은 기능 수행

      <c:choose>
          <c:when test="조건식">내용</c:when>
          <c:when test="조건식">내용</c:when>
          ...
          <c:otherwise>내용</c:otherwise>
      </c:choose>
      

      <c:when> 태그는 하나 이상 있어야 하며 <c:otherwise> 태그는 없거나 1개가 올 수 있다.

    • forEach : 콜렉션이나 Map의 각 항목을 처리할 때 사용

      <c:forEach var="변수명" items="목록 데이터" begin="시작 인덱스" end="종료 인덱스" step="
      증가 값">내용</c:forEach>
      

      items에 지정할 수 있는 타입

      • 배열
      • java.util.Collection 구현체 (ArrayList, LinkedList, EnumSet, ...)
      • java.util.Iterator 구현체
      • java.util.Enumeration 구현체
      • java.util.Map 구현체
      • 콤마(,) 구분자로 나열된 문자열
    • forTokens : 구분자로 분리된 각각의 토큰을 처리할 때 사용

      <c:forTokens var="변수명" items="문자열" delims="구분자">콘텐츠</c:forTokens>
      
  3. URL 처리

    • import : URL을 사용하여 다른 지원의 결과를 삽입 / URL 속성에 콘텐츠가 있는 주소를 지정하면 해당 주소로 요청하고 응답 결과를 받아서 반환한다.
      <c:import url="URL" var="변수명" scope="page(default)|request|session|application" />
      
    • redirect : 지정한 경로로 리다이렉트 / HttpServletResponse의 sendRedirect()를 호출
      <c:redirect url="URL" />
      
    • url : URL을 만들 때 사용, 이 태그를 사용하면 매개변수를 포함한 URL을 쉽게 만들 수 있다.
      <c:url var="변수명" value="URL">
          <c:param name="파라미터명" value="값" />
          <c:param name="파라미터명" value="값" />
          <c:param name="파라미터명" value="값" />
          ...
      </c:url>
      
  4. 기타

    • catch : 예외 처리 시 사용
      <c:catch var="변수명">
          내용 / 예외 발생 시 실행되지 않음
      </c:catch>
      
    • out : JSPWriter에 내용을 알맞게 처리한 후 출력
      <c:out value="출력 값" escapeXml="true(default)|false" default="기본값" />
      
      escapeXML의 속성이 true일 경우 특정 문자(<, >, &, ', ")를 &lt;, &gt;,... 등으로 변경

3. Internationalization 태그

  1. fmt 태그

    • setLocale : 로케일 지정

      <fmt:setLocale value="로케일 값" variant="브라우저 스펙" scope="page(default)|request|session|application" />
      
    • requestEncoding : request.setCharacterEncoding()과 같은 역할

      <fmt:requestEncoding value="인코딩 값" />
      
    • bundle : properties 확장자를 사용하는 자원 파일을 읽어오는 역할

      <fmt:bundle basename="properties 파일명" prefix="prefix">
          내용
      </fmt:bundle>
      
    • message : 번들 태그에서 정한 값들을 가져온다.

      <fmt:message key="읽어올 메시지의 key값" bundle="setBundle 태그를 사용해 로딩한 번들을 읽어올 때 사용" var="변수명" scope="page(default)|request|session|application" />
      
    • setBundle : 페이지 전체에서 사용할 수 있는 번들 지정

      <fmt:setBundle basename="properties 파일명" var="변수명" scope="page(default)|request|session|application" />
      
    • formatNumber : 숫자 형식을 표현할 때 사용

      <fmt:formatNumber value="Number로 형식화될 수치 지정"
              type="숫자, 통화, 퍼센트 중 하나{number|currency|percent}"
              pattern="사용자가 지정한 형식 패턴"
              currencyCode="ISO 4217 통화 코드 지정, 통화 형식일 때만 적용"
              currencySymbol="통화 기호 지정, 통화 형식일 때만 적용"
              groupingUsed="{true|false} 출력에 그룹 분리 기호 포함할지 여부 결정"
              maxIntegerDigits="출력에서 integer 최대 자릿수 지정"
              minIntegerDigits="출력에서 integer 최소 자릿수 지정"
              maxFractionDigits="출력에서 소수점 이하 최대 자릿수 지정"
              minFractionDigits="출력에서 소수점 이하 최소 자릿수 지정"
              var="변수명"
              scope="page(default)|request|session|application" />
      
    • parseNumber : 문자열에서 숫자로 파싱

      <fmt:parseNumber value="Number로 파싱 할 수치"
                      type="숫자, 통화, 퍼센트 중 하나{number|currency|pattern}"
                      attern="사용자가 지정한 형식 패턴"
                      parseLocale="파싱 작업의 기본 형식 패턴(숫자, 통화, 퍼센트 각각)을 제공하는 Locale로 지정"
                      integerOnly="주어진 값에서 integer 부분만 파싱 할지 여부 지정"
                      var="변수명"
                      scope="page(default)|request|session|application" />
      
    • formatDate : 날짜 형식으로 표현 / 날짜 객체로부터 원하는 형식으로 날짜를 표현하고자 할 때 사용

      <fmt:formatDate value="java.util.Date 객체 지정"
                  type="형식화할 데이터가 시간, 날짜, 모두 {time|date|both} 세 형식 중 하나 지정"
                  dateStyle="type 속성을 생략하거나 date 또는 both일 때 사용하는 것으로 미리 정의된 날짜 형식 지정"
                  timeStyle="type 속성을 생략하거나 date 또는 both일 때 사용하는 것으로 미리 정의된 시간 형식 지정"
                  pattern="사용자 지정 형식 스타일 지정"
                  timeZone="java.util.TimeZone 형식으로 된 시간에 나타날 타임 존 지정"
                  var="변수명"
                  scope="page(default)|request|session|application" />
      
    • parseDate : 문자열에서 날짜로 파싱 할 때 사용 / 날짜 형식으로 작성된 문자열로 java.util.Date 객체를 생성

      <fmt:parseDate value="파싱 할 Date와 time지정 (문자열)"
                  type="파싱 할 데이터가 시간, 날짜, 모두의 세 형식 중 하나 지정"
                  dateStyle="type 속성을 생략하거나 date 또는 both일 때 사용하는 것으로 미리 정의된 날짜 형식 지정"
                  timeStyle="type 속성을 생략하거나 date 또는 both일 때 사용하는 것으로 미리 정의된 시간 형식 지정"
                  pattern="사용자 지정 형식 스타일 지정"
                  timeZone="형식화 시간에 나타날 타임 존 지정"
                  parseLocale="파싱 하는 동안 적용될 미리 정의된 형식 스타일의 Locale 지정"
                  var="변수명"
                  scope="page(default)|request|session|application" />
      
    • setTimeZone : 특정 scope의 시간대 설정

      <fmt:setTimeZone value="설정할 시간대 지정" var="변수명" scope="page(default)|request|session|application" />
      
    • timeZone

      <fmt:setTimeZone value="적용할 시간대 지정" />
      

4. Functions 태그

  • 사용 예제

    <c:if test="${fn:length(param.username) > 0}" >
    
  • 태그 종류

    함수 설명
    length(obj) obj가 List와 같은 Collection인 경우 저장된 항목의 개수를 리턴하고, obj가 문자열일 경우 문자열의 길이를 리턴한다. str.subString(idx1, idx2) 의 결과를 리턴한다. idx2가 -1 일 경우 str.subString(idx1)과 동일하다.
    toUpperCase(str) str을 대문자로 변환한다.
    toLowerCase(str) str을 소문자로 변환한다.
    subString(str, idx1, idx2) str.substring(idx1, idx2)의 결과를 리턴한다. idx2가 -1일 경우 str.substring(idx1)과 동일하다.
    subStringAfter(str1, str2) str1에서 str1에 포함되어 있는 str2 이후의 문자열을 구한다.
    subStringBefore(str1, str2) str1에서 str1에 포함되어 있는 str2 이전의 문자열을 구한다.
    trim(str) str 좌우의 공백 문자를 제거한다.
    replace(str, src, dest) str에 있는 src를 dest로 변환한다.
    indexOf(str1, str2) str1에서 str2가 위치한 인덱스를 구한다.
    startWith(str1, str2) str1이 str2로 시작할 경우 true, 그렇지 않으면 false를 리턴한다.
    endWith(str1, str2) str1이 str2로 끝날 경우 true, 그렇지 않으면 false를 리턴한다.
    contains(str1, str2) str1이 str2를 포함하고 있을 경우 true를 리턴한다.
    containsIgnoreCase(str1, str2) 대소문자 구분 없이 str1이 str2를 포함하고 있을 경우 true를 리턴한다.
    split(str1, str2) str2로 명시한 글자를 기준으로 str1을 분리해서 배열로 리턴한다.
    join(array, str2) array에 저장된 문자열을 합친다. 이때 각 문자열 사이에는 str2가 붙는다.
    escapeXml(str) XML의 객체 참조에 해당하는 특수 문자를 처리한다. 예를 들어, '&'는 '&amp;'로 변환한다.

Reference

728x90