함수형 인간 2025. 3. 8. 22:22

11. JSTL (JSP Standard Tag Library)

11.1 JSTL이란?

JSTL(JSP Standard Tag Library)은 JSP 페이지에서 자주 사용되는 기능들을 커스텀 태그(Custom Tag) 형태로 제공하는 라이브러리. JSTL을 사용하면 스크립틀릿(<% ... %>)과 표현식(<%= ... %>)을 사용하지 않고도, XML 형식의 태그를 이용하여 조건 처리, 반복 처리, 데이터 포맷팅, 국제화, XML 처리, 데이터베이스 연동 등 다양한 기능을 구현할 수 있다.

JSTL의 장점:

  • 코드 간결성: Java 코드를 직접 작성하는 대신, 간결한 태그를 사용하여 JSP 코드를 깔끔하게 유지할 수 있다.
  • 가독성 향상: XML 형식의 태그는 HTML과 유사하여 가독성이 좋다.
  • 재사용성: 공통적인 기능을 태그로 제공하므로, 여러 JSP 페이지에서 재사용할 수 있다.
  • 유지보수 용이: 코드 수정 및 관리가 용이.
  • 표현 로직과 비즈니스 로직 분리: JSP 페이지를 View 역할에 집중시키고, 비즈니스 로직은 Java 클래스(Model)에서 처리하도록 유도하여 MVC 패턴 구현에 적합.
  • 표준화: JSTL은 Java EE(Enterprise Edition) 표준 스펙의 일부이므로, 호환성이 좋다.

11.2 JSTL 사용 설정

JSTL을 사용하려면 다음 두 가지 작업이 필요.

  1. JSTL 라이브러리 추가: 

Maven/Gradle : 프로젝트의 의존성 관리 도구(Maven, Gradle 등)를 사용하여 JSTL 라이브러리를 추가.

 
 
Maven (pom.xml)
dependencies {
    implementation 'javax.servlet:jstl:1.2'
    // https://mvnrepository.com/artifact/org.apache.taglibs/taglibs-standard-impl
	runtimeOnly group: 'org.apache.taglibs', name: 'taglibs-standard-impl', version: '1.2.5'
}

 

 

Gradle (build.gradle)
 
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>  </dependency>

<dependency>
    <groupId>org.apache.taglibs</groupId>
    <artifactId>taglibs-standard-impl</artifactId>
    <version>1.2.5</version>
    <scope>runtime</scope>
</dependency>
 

  

  • 직접 다운로드: JSTL 구현체(예: Apache Taglibs Standard)의 JAR 파일을 다운로드하여 프로젝트의 WEB-INF/lib 디렉토리에 추가.
  1. JSP 페이지에서 taglib 지시어 사용:
    • JSP 페이지 상단에 <%@ taglib ... %> 지시어를 사용하여 사용할 JSTL 라이브러리를 선언.
    • prefix: 태그 라이브러리의 접두어 (예: c, fmt, fn)
    • uri: 태그 라이브러리의 URI
    Java
     
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

11.3 코어(Core) 태그 (<c: ... >)

Core 태그는 변수 관리, 흐름 제어(조건문, 반복문), URL 처리 등 가장 기본적인 기능을 제공.

태그설명
<c:set> 변수 선언 및 값 할당. var, value, scope(page, request, session, application), target, property 속성 사용.
<c:out> 값 출력. value, escapeXml(HTML 이스케이프 여부, 기본값 true), default 속성 사용.
<c:remove> 변수 제거. var, scope 속성 사용.
<c:if> 조건문(if). test 속성에 조건식을 지정.
<c:choose> 다중 조건문(switch-case). <c:when>(조건), <c:otherwise>(기본값) 태그와 함께 사용.
<c:forEach> 반복문(for, for-each). var(반복 변수), items(반복 대상), begin, end, step(범위/증가값), varStatus(반복 상태 변수: index, count, first, last) 속성 사용.
<c:forTokens> 문자열을 구분자로 분리하여 반복. items(문자열), delims(구분자), var(각 토큰 변수) 속성 사용.
<c:import> 외부 URL의 내용을 가져와 현재 페이지에 포함하거나 변수에 저장. url, var, scope, charEncoding 속성 사용.
<c:redirect> 지정된 URL로 리다이렉트. url, context 속성 사용. <c:param> 태그를 사용하여 파라미터 추가 가능.
<c:url> URL 생성. <c:param> 태그와 함께 사용하여 쿼리 파라미터 추가. value, var, scope, context 속성 사용.
<c:param> <c:url>, <c:redirect>, <c:import> 등에서 URL 파라미터 추가. name, value 속성 사용.
<c:catch> 예외 처리. var 속성에 예외 객체를 저장할 변수 이름 지정.
 

11.4 국제화(Formatting) 태그 (<fmt: ... >)

Formatting 태그는 숫자, 날짜, 시간 형식 지정, 국제화(i18n, 여러 언어 지원) 관련 기능을 제공.

태그설명
<fmt:formatNumber> 숫자 형식 지정. value, type(number, currency, percent), pattern, currencyCode, currencySymbol, groupingUsed, maxIntegerDigits, minIntegerDigits, maxFractionDigits, minFractionDigits 속성 사용.
<fmt:formatDate> 날짜/시간 형식 지정. value, type(date, time, both), dateStyle, timeStyle, pattern, timeZone 속성 사용.
<fmt:timeZone> 시간대 설정. value 속성에 시간대 ID 지정.
<fmt:setTimeZone> 시간대를 변수에 저장. value, var, scope 속성 사용.
<fmt:bundle> 리소스 번들(properties 파일) 로드. basename 속성에 리소스 번들 기본 이름 지정.
<fmt:setBundle> 리소스 번들을 변수에 저장. basename, var, scope 속성 사용.
<fmt:message> 리소스 번들에서 메시지 가져오기(국제화). key, bundle, var, scope 속성 사용. <fmt:param> 태그를 사용하여 파라미터 전달 가능.
<fmt:requestEncoding> 요청 데이터의 문자 인코딩을 설정합니다. value속성을 사용하여 설정할 인코딩을 지정합니다.