JSTL Core 태그
JSTL Core 태그는 JSP 페이지에서 변수 관리, 흐름 제어(조건문, 반복문), URL 처리 등 가장 기본적인 기능을 제공하는 핵심 태그 라이브러리. <c: ... > 형태로 사용되며, 사용하려면 JSP 페이지 상단에 다음과 같은 taglib 지시어를 추가해야 한다.
Java
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
1. <c:set>: 변수 설정
- 기능: 변수를 선언하고 값을 할당. 객체의 프로퍼티 값을 설정하는 데에도 사용.
- 속성:
- var: 변수 이름 (필수)
- value: 변수에 할당할 값 (필수)
- scope: 변수의 유효 범위 (page, request, session, application, 기본값: page)
- target: 프로퍼티 값을 설정할 객체 (JavaBean 또는 Map)
- property: 설정할 프로퍼티 이름 (target 속성과 함께 사용)
- 사용 예시:
<%-- 기본 사용법 --%>
<c:set var="name" value="홍길동" />
<c:set var="age" value="${param.age}" />
<c:set var="isMember" value="${true}" scope="session" />
<%-- 객체의 프로퍼티 설정 --%>
<jsp:useBean id="user" class="com.example.User" />
<c:set target="${user}" property="name" value="김철수" />
<c:set target="${user}" property="age" value="30" />
<%-- body content를 값으로 사용 --%>
<c:set var="message">
Hello, <b>JSTL</b>!
</c:set>
2. <c:out>: 값 출력
- 기능: 변수, 표현식, 객체의 프로퍼티 등의 값을 출력. JSP 표현식(<%= ... %>)과 유사하지만, HTML 태그를 이스케이프(escape)하는 기능이 있어 XSS(Cross-Site Scripting) 공격을 방지하는 데 유용.
- ex) 이스케이프 처리 전 출력시 : <script>alert('XSS Attack!');</script> -- 경고창 발생
이스케이프 처리 후 출력시 : <script>alert('XSS Attack!');</script> -- 단순한 텍스트로 출력. - 속성:
- value: 출력할 값 (필수)
- escapeXml: HTML 태그를 이스케이프할지 여부 (true/false, 기본값: true)
- default: 값이 null일 경우 출력할 기본값
- 사용 예시:
<c:out value="${name}" /> <%-- 변수 name 출력 --%>
<c:out value="${user.age}" /> <%-- 객체의 프로퍼티 age 출력 --%>
<c:out value="${param.query}" /> <%-- 요청 파라미터 query 출력 --%>
<c:out value="${message}" escapeXml="false" /> <%-- HTML 태그를 해석하여 출력 --%>
<c:out value="${nonExistentVar}" default="No Value" /> <%-- 값이 null이면 "No Value" 출력 --%>
3. <c:remove>: 변수 제거
- 기능: 지정된 범위(scope)에서 변수를 제거.
- 속성:
- var: 제거할 변수 이름 (필수)
- scope: 변수가 저장된 범위 (page, request, session, application). 생략하면 모든 범위에서 검색하여 제거.
- 사용 예시:
<c:remove var="tempVar" /> <%-- 모든 범위에서 tempVar 제거 --%>
<c:remove var="sessionVar" scope="session" /> <%-- session 범위에서 sessionVar 제거 --%>
4. <c:if>: 조건문 (if)
- 기능: 조건에 따라 특정 코드 블록을 실행. (else if, else 없음)
- 속성:
- test: 조건을 나타내는 표현식 (boolean, 필수)
- var: 조건 결과를 저장할 변수 이름 (선택 사항)
- scope : var를 저장할 범위 (선택 사항)
- 사용 예시:
<c:if test="${score >= 90}">
<p>Excellent!</p>
</c:if>
<c:if test="${score >= 80 && score < 90}">
<p>Good</p>
</c:if>
<c:if test="${not empty param.name}">
<c:set var="name" value="${param.name}" />
</c:if>
<c:if test="${param.age > 18}" var="isAdult" scope="session">
<p>조건 결과(isAdult)는 \${isAdult}에 저장되었습니다.</p>
</c:if>
5. <c:choose>, <c:when>, <c:otherwise>: 다중 조건문 (switch-case)
- 기능: 여러 조건 중 하나를 선택하여 실행. (if-else if-else)
- 속성:
- <c:when>: test (조건식, 필수)
- <c:otherwise>: 속성 없음
- 태그구조
<c:choose>
<c:when test="${condition1}">
<%-- condition1이 true일 때 실행 --%>
</c:when>
<c:when test="${condition2}">
<%-- condition2가 true일 때 실행 --%>
</c:when>
<c:otherwise>
<%-- 모든 조건이 false일 때 실행 --%>
</c:otherwise>
</c:choose>
- 사용예시
<c:choose>
<c:when test="${status == 'active'}">
<p>User is active.</p>
</c:when>
<c:when test="${status == 'inactive'}">
<p>User is inactive.</p>
</c:when>
<c:otherwise>
<p>User status is unknown.</p>
</c:otherwise>
</c:choose>
6. <c:forEach>: 반복문 (for, for-each)
- 기능: 배열, List, Map 등의 컬렉션이나 숫자 범위를 반복하여 처리.
- 속성:
- var: 반복 변수 이름 (필수)
- items: 반복할 객체 (배열, List, Map 등) (필수)
- begin: 시작 인덱스 (기본값: 0)
- end: 종료 인덱스 (포함)
- step: 증가값 (기본값: 1)
- varStatus: 반복 상태 정보를 저장할 변수 (선택 사항)
- index: 현재 반복 인덱스 (0부터 시작)
- count: 현재 반복 횟수 (1부터 시작)
- first: 현재 반복이 첫 번째 반복인지 여부 (boolean)
- last: 현재 반복이 마지막 반복인지 여부 (boolean)
- current : 현재 반복 요소
- 사용 예시:
<%-- List 반복 --%>
<c:forEach var="item" items="${myList}">
<p>${item}</p>
</c:forEach>
<%-- Map 반복 --%>
<c:forEach var="entry" items="${myMap}">
<p>Key: ${entry.key}, Value: ${entry.value}</p>
</c:forEach>
<%-- 숫자 범위 반복 --%>
<c:forEach var="i" begin="1" end="5" step="2">
<p>Number: ${i}</p>
</c:forEach>
<%-- 반복 상태 정보 --%>
<c:forEach var="fruit" items="${fruits}" varStatus="status">
<p>${status.count}. ${fruit} (Index: ${status.index}, First: ${status.first}, Last: ${status.last})</p>
</c:forEach>
7. <c:forTokens>: 문자열 분리 반복
- 기능: 문자열을 특정 구분자(delimiter)로 분리하여 각 토큰을 반복 처리.
- 속성:
- items: 분리할 문자열 (필수)
- delims: 구분자 문자열 (필수)
- var: 각 토큰을 저장할 변수 이름 (필수)
- varStatus: 반복 상태 정보를 저장할 변수 (선택 사항)
- index: 현재 반복 인덱스 (0부터 시작)
- count: 현재 반복 횟수 (1부터 시작)
- first: 현재 반복이 첫 번째 반복인지 여부 (boolean)
- last: 현재 반복이 마지막 반복인지 여부 (boolean)
- 사용 예시:
<c:forTokens items="apple,banana;orange-grape" delims=",;-" var="fruit">
<p>Fruit: ${fruit}</p>
</c:forTokens>
<c:forTokens items="1,2,3;4-5;6,7,8" delims=";,-" var="num" varStatus="loop">
${loop.index} : ${num}<br>
</c:forTokens>
8. <c:import>: 외부 리소스 포함
- 기능: 다른 URL의 내용을 가져와 현재 페이지에 포함하거나 변수에 저장. <jsp:include>와 비슷하지만, 웹 애플리케이션 외부의 리소스(다른 웹 사이트 등)도 가져올 수 있다.
- 속성:
- url: 가져올 리소스의 URL (필수)
- var: 가져온 내용을 저장할 변수 이름 (선택 사항)
- scope: 변수의 유효 범위 (page, request, session, application, 기본값: page)
- charEncoding: 가져올 리소스의 문자 인코딩
- context : /로 시작하는 문자열, 같은 서버내의 다른 컨텍스트에 접근할 때 사용.
- 사용 예시:
<%-- 외부 웹 페이지 내용 가져와서 출력 --%>
<c:import url="http://www.example.com/news.html" />
<%-- 외부 리소스 내용을 변수에 저장 --%>
<c:import url="/data/config.xml" var="configData" charEncoding="UTF-8" />
<pre>${configData}</pre>
9. <c:redirect>: 리다이렉트
- 기능: 지정된 URL로 클라이언트를 리다이렉트. (HTTP 응답 코드 302)
- 속성:
- url: 리다이렉트할 URL (필수)
- context : /로 시작하는 문자열, 같은 서버내의 다른 컨텍스트에 접근할 때 사용.
- <c:param>을 사용하여 URL 파라미터를 추가할 수 있습니다.
- 사용 예시:
<c:redirect url="/login.jsp" />
<c:redirect url="http://www.example.com/search">
<c:param name="query" value="JSTL" />
<c:param name="lang" value="en" />
</c:redirect>
10. <c:url>: URL 생성
- 기능: URL을 생성하고, 필요에 따라 컨텍스트 경로를 자동으로 추가하거나 URL 인코딩을 수행.
- 속성:
- value: 기본 URL (필수)
- var: 생성된 URL을 저장할 변수 이름 (선택 사항)
- scope: 변수의 유효 범위 (page, request, session, application, 기본값: page)
- context: 컨텍스트 경로 (기본값: 현재 웹 애플리케이션)
- <c:param>을 사용하여 URL 파라미터를 추가할 수 있다.
- 사용 예시:
<%-- 컨텍스트 경로가 자동으로 추가됨 --%>
<c:url value="/products/list.jsp" var="productListUrl" />
<a href="${productListUrl}">Product List</a>
<%-- URL 파라미터 추가 --%>
<c:url value="/search" var="searchUrl">
<c:param name="q" value="Java" />
<c:param name="sort" value="date" />
</c:url>
<a href="${searchUrl}">Search</a>
11. <c:catch>: 예외 처리
- 기능: 예외(Exception)를 처리. try-catch 블록과 유사.
- 속성:
- var: 발생한 예외 객체를 저장할 변수 이름 (필수)
- 사용 예시:
<c:catch var="ex">
<%-- 예외가 발생할 수 있는 코드 --%>
<c:import url="http://nonexistent.example.com/data.xml" />
</c:catch>
<c:if test="${not empty ex}">
<p>Error: ${ex.message}</p>
<%-- 예외 처리 로직 --%>
</c:if>
'개발 > JSTL' 카테고리의 다른 글
JSTL 국제화 태그 (0) | 2025.03.08 |
---|---|
JSTL (0) | 2025.03.08 |