JSTL 코어태그

2025. 3. 8. 22:30·개발/JSTL

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> -- 경고창 발생
          이스케이프 처리 후 출력시 : &lt;script&gt;alert('XSS Attack!');&lt;/script&gt; -- 단순한 텍스트로 출력.
  • 속성:
    • 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
'개발/JSTL' 카테고리의 다른 글
  • JSTL 국제화 태그
  • JSTL
함수형 인간
함수형 인간
잘 까먹는 개발자의 두뇌 확장 장치
  • 함수형 인간
    개발 기록 노트
    함수형 인간
  • 글쓰기 관리
  • 전체
    오늘
    어제
    • 글 목록 (84)
      • 기타 (1)
      • 개발 (82)
        • Java (6)
        • Javascript (1)
        • Spring (20)
        • jQuery (0)
        • Git (0)
        • servlet (11)
        • JSP (6)
        • HTML (0)
        • CSS (10)
        • SQL (9)
        • JSTL (3)
        • Mybatis (4)
        • Design Patterns (0)
        • HTTP (2)
        • Devtools (0)
        • IntelliJ (5)
        • JDBC (1)
        • Lombok (3)
        • Logging (1)
      • 책 리뷰 (0)
  • hELLO· Designed By정상우.v4.10.3
함수형 인간
JSTL 코어태그
상단으로

티스토리툴바