개발/JSTL
JSTL
함수형 인간
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을 사용하려면 다음 두 가지 작업이 필요.
- 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 디렉토리에 추가.
- 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속성을 사용하여 설정할 인코딩을 지정합니다. |