JSTL (JSP Standard Tag Library)는 Java EE 기반의 웹 애플리케이션 개발을 위해 만들어진 표준화된 태그 모음입니다. JSP 파일에서 자바 코드를 최소화하고, XML 데이터 처리, 반복문, 조건문 등 다양한 기능을 태그 형태로 제공해 줍니다.
📂 XML 데이터 처리
XML 데이터를 쉽게 읽고 파싱하며 변환할 수 있도록 돕는 태그를 제공합니다. 복잡한 XML 처리도 손쉽게 구현할 수 있습니다.
🔄 조건문과 반복문
자주 쓰이는 if-else나 for와 같은 조건문과 반복문을 태그 형태로 제공하여, JSP 코드의 가독성과 유지보수성을 높입니다.
🌍 국제화 및 지역화 지원
다국어 웹사이트 개발에 유용하며, 사용자의 언어와 지역에 따라 맞춤형 콘텐츠를 보여줄 수 있습니다.
📋 태그 라이브러리 제공
자바 코드가 많아지면 JSP 페이지의 가독성이 떨어질 수 있는데, JSTL은 이를 표준화된 태그 셋으로 해결해 줍니다. 코드를 간결하게 유지하며 로직과 UI를 분리합니다.
코드 유지보수성 향상
자바 코드가 페이지에 혼재되지 않아, 프론트엔드와 백엔드 로직을 명확하게 분리할 수 있습니다.
표준화된 방식 사용
일관된 태그 사용으로 코드 품질 향상과 오류 최소화에 기여합니다.
용용 소프트웨어 개발에 유리
재사용 가능한 코드 작성이 용이해지고, 확장성 높은 웹 애플리케이션을 구축할 수 있습니다.
<mytag:helloWorld name="John" />
if-else)과 반복문을 제공하여, 자바 코드를 직접 작성할 필요 없이 태그로 로직을 구현할 수 있습니다.<c:forEach var="item" items="${itemList}">
<p>${item}</p>
</c:forEach>
c:if 태그로 간단하게 처리할 수 있습니다.<c:if test="${user != null}">
<p>Welcome, ${user.name}</p>
</c:if>
스크립틀릿 사용:
<% if (user != null) { %>
<p>Welcome, <%= user.getName() %></p>
<% } %>
JSTL 사용:
<c:if test="${user != null}">
<p>Welcome, ${user.name}</p>
</c:if>
<p>User's name: ${user.name}</p>
JSTL을 사용하려면 프로젝트에 라이브러리 의존성을 추가해야 합니다. Maven을 사용하는 경우, 다음과 같이 설정합니다.
<dependency>
<groupId>jakarta.servlet.jsp.jstl</groupId>
<artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>jakarta.servlet.jsp.jstl</artifactId>
<version>2.0.0</version>
</dependency>
JSP 페이지에서 JSTL 태그를 사용하기 위해서는 directive 선언 형식을 통해 태그 라이브러리를 불러와야 합니다.
다음은 JSTL 태그 라이브러리 선언 방식의 기본 예제입니다.
<%@ taglib prefix="prefix" uri="uri" %>
prefix: 태그를 사용할 때 붙이는 접두사로, 태그 호출 시 사용됩니다.<c:out>에서 c는 JSTL Core 라이브러리를 나타내는 prefix입니다.uri: 해당 태그 라이브러리의 URI 경로입니다. URI는 표준 라이브러리의 위치를 참조하는 식별자 역할을 합니다.| Library | Prefix | Function | URI |
|---|---|---|---|
| core | c | 변수 지원, 흐름 제어, URL 처리 | http://java.sun.com/jsp/jstl/core |
| XML | x | XML 코어, 흐름 제어, XML 변환 | http://java.sun.com/jsp/jstl/xml |
| 국제화 | fmt | 지역, 메시지 형식, 숫자 및 날짜 형식 | http://java.sun.com/jsp/jstl/fmt |
| database | sql | SQL 쿼리 실행 | http://java.sun.com/jsp/jstl/sql |
| 함수 | 없음 | 컬렉션 및 문자열 처리 | http://java.sun.com/jsp/jstl/functions |
c)예제:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:if test="${user != null}">
<p>Welcome, ${user.name}!</p>
</c:if>
c:if를 사용해 조건문을 구현했습니다.x)예제:
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
<x:parse var="doc" xml="${xmlData}" />
fmt)예제:
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<fmt:formatDate value="${now}" pattern="yyyy-MM-dd" />
sql)예제:
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<sql:query dataSource="${db}" var="result">
SELECT * FROM users
</sql:query>
예제:
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<p>String Length: ${fn:length('Hello')} </p>
JSTL 태그 라이브러리를 사용하면 JSP 페이지에서 자바 코드를 최소화하고, 다양한 기능을 표준화된 태그로 쉽게 구현할 수 있습니다. 각 라이브러리는 특화된 기능을 제공하며, 이를 적절히 활용하면 코드 가독성과 유지보수성을 크게 향상시킬 수 있습니다.
JSTL 태그 선언 예제:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:forEach var="item" items="${list}">
<p>${item}</p>
</c:forEach>
JSTL과 함께라면 복잡한 로직도 간단히 처리할 수 있습니다. 태그 선언 방식과 라이브러리 활용법을 이해하고 프로젝트에 적용해 보세요! 😊
JSTL의 Core 라이브러리는 변수 관리, 흐름 제어, URL 처리와 같은 다양한 기능을 제공합니다. 다음은 Core 태그의 선언과 주요 태그에 대한 설명입니다.
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
c는 JSTL Core 라이브러리의 접두사입니다. 모든 Core 태그는 <c:>로 시작합니다.| Function | Tag | Description |
|---|---|---|
| 변수 지원 | set | JSP 페이지에서 사용할 변수를 설정합니다. |
remove | 설정된 변수를 제거합니다. | |
| 흐름 제어 | if | 조건에 따라 코드를 실행합니다. |
choose, when, otherwise | 다중 조건을 처리할 때 사용합니다. (if ~ else if ~ else) | |
forEach | 배열 또는 컬렉션의 각 항목을 처리합니다. | |
forTokens | 구분자로 분리된 각 토큰을 처리합니다. (StringTokenizer) | |
| URL 처리 | import | URL을 통해 외부 리소스를 가져와 삽입합니다. |
redirect | 지정된 경로로 리다이렉트합니다. | |
url | URL을 작성합니다. | |
| 기타 태그 | catch | 예외를 처리합니다. |
out | JSPWriter를 통해 내용을 출력합니다. |
c:set – 변수 설정예제:
<c:set var="userName" value="John" />
<p>Hello, ${userName}!</p>
c:remove – 변수 제거예제:
<c:remove var="userName" />
c:if – 조건문 처리예제:
<c:if test="${user != null}">
<p>Welcome, ${user.name}!</p>
</c:if>
c:choose, c:when, c:otherwise – 다중 조건 처리if-else 구문처럼 여러 조건을 처리할 때 사용합니다.예제:
<c:choose>
<c:when test="${user == null}">
<p>Please log in.</p>
</c:when>
<c:otherwise>
<p>Welcome, ${user.name}!</p>
</c:otherwise>
</c:choose>
c:forEach – 반복문 처리예제:
<c:forEach var="item" items="${itemList}">
<p>${item}</p>
</c:forEach>
c:forTokens – 구분자로 분리된 토큰 처리예제:
<c:forTokens var="token" items="apple,banana,grape" delims=",">
<p>${token}</p>
</c:forTokens>
c:import – 외부 리소스 삽입예제:
<c:import url="https://example.com/page.html" />
c:redirect – 페이지 리다이렉트예제:
<c:redirect url="/home" />
c:url – URL 작성예제:
<a href="<c:url value='/profile' />">Profile</a>
c:catch – 예외 처리예제:
<c:catch var="exception">
<c:out value="${1 / 0}" />
</c:catch>
<p>Error: ${exception}</p>
c:out – 값 출력예제:
<c:out value="${user.name}" />
<c:set><c:set> 태그는 JSP에서 변수 설정 및 특정 객체의 프로퍼티에 값을 할당할 때 사용합니다.
<c:set> 사용법page입니다.<c:set var="userName" value="John" scope="session" />
<c:set target="${user}" property="name" value="John" />
userName 변수를 설정합니다.<c:catch><c:catch> 태그는 JSP 페이지에서 예외가 발생했을 때 오류를 처리합니다. 이를 통해 try-catch 구문과 유사한 기능을 구현할 수 있습니다.
<c:catch> 사용법<c:catch var="ex">
<%
String str = null;
out.println(str.length()); // 예외 발생
%>
</c:catch>
<c:if test="${ex != null}">
예외가 발생했습니다: ${ex.message}
</c:if>
catch에서 예외를 잡아 ex 변수에 저장합니다. 이후 <c:if>로 예외 메시지를 출력합니다.<c:if>, <c:choose><c:if>: 조건이 참일 때 코드를 실행합니다.<c:choose>: 다중 조건을 처리하며, if-else if-else와 유사합니다.<c:if> 예제<c:if test="${userType eq 'admin'}">
<jsp:include page="admin.jsp" />
</c:if>
userType이 admin일 때 관리자 페이지를 포함합니다.<c:choose> 예제<c:choose>
<c:when test="${userType == 'admin'}">
관리자 화면
</c:when>
<c:when test="${userType == 'member'}">
회원 화면
</c:when>
<c:otherwise>
일반 사용자 화면
</c:otherwise>
</c:choose>
<c:forEach><c:forEach> 태그는 배열 또는 컬렉션의 항목을 반복 처리할 때 사용합니다.
varStatus 속성을 사용하면 현재 반복의 상태를 알 수 있습니다.
<c:forEach> 예제<ul>
<c:forEach var="course" items="${courses}" varStatus="status">
<li>${status.count}. ${course.name}</li>
</c:forEach>
</ul>
courses 컬렉션을 반복하며 항목과 현재 인덱스를 출력합니다.