[JSP] JSTL(JSP Standard Tag Library)

2 minute read

JSTL(JSP Standard Tag Library)

JSTL은 JSP 커스텀 태그의 일종으로 JSP에서 가장 많이 사용하는 기능을 태그로 제공하며, JSTL 라이브러리를 따로 설치해서 사용한다. 조건문, 반복문 등의 처리를 html 태그 형태로 작성할 수 있게 해주는 것으로 이해하면된다.

JSTL 태그 종류

라이브러리 세부기능 접두어 관련 URI
코어 변수 지원, 흐름 제어, 반복문 처리, URL 처리 c http://java.sun.com/jsp/jstl/core
국제화 지역, 메시지 형식, 숫자 및 날짜 형식 fmt http://java.sun.com/jsp/jstl/fmt
XML XML 코어, 흐름 제어, XML 변환 x http://java.sun.com/jsp/jstl/xml
데이터베이스 SQL sql http://java.sun.com/jsp/jstl/sql
함수 컬렉션 처리, 문자열 처리 fn http://java.sun.com/jsp/jstl/functions

http://tomcat.apache.org/download-taglibs.cgi 를 통해 다운로드하여 설치하고, jsp에서 사용시 <%@ taglib prefix="c" url="..." %> 로 선언하여 사용한다.

JSTL CORE 태그 라이브러리

JSTL은 java 단에서 받아온 컬렉션객체를 반복문으로 출력하는 용도로 많이 사용하게 되는데, 이 반복문을 처리하는 것이 core 라이브러리다.

<c:if test="${not empty list}">
    <c:foreach var="data" list="${list}">
        ${data.title}
    </c:foreach>
</c:if>
<c:if test="${empty list}">
    데이터가 없습니다.
</c:if>

위 처럼 JSTL을 사용하면 java 코드를 없애고 태그형태로 데이터를 표현할 수 있다.

CORE 기능의 종류

기능 태그 설명
변수지원 set 변수 설정
변수지원 remove 설정한 변수를 제거
흐름제어 if 조건에 따른 수행
흐름제어 choose 다중 조건 처리 시 사용
흐름제어 forEach 컬렉션의 각 항목을 처리
흐름제어 forTokens 구분자로 분리된 각각의 토큰을 처리할 때 사용
URL처리 import url을 사용하여 다른 자원의 결과를 삽입한다.
URL처리 redirect 지정한 경로로 리다이렉트한다.
URL처리 url url을 재작성한다.
기타 catch 예외처리 사용
기타 out JSP Writer에 내용을 알맞게 처리한 후 출력
1. <c:set>,<c:remove>

변수 설정

<c:set var="varName" scope="session" value="someValue" />
<c:set var="varName" scope="request">
some Value
</c:set>
  • var : EL에서 사용될 변수 명
  • scope : 변수 값이 저장될 영역
  • value : 변수값
<c:set target="${some}" property="propertyName" value="anyValue"/>
  • some 객체가 자바빈일 경우 : some.setPropertyName(anyValue);
  • some 객체가 map일 경우 : some.put(propertyName, anyValue);

변수 제거

<c:remove var="varName" scope="request" />

2. 조건문 처리

(1) <c:if>

test의 조건이 true이면 내부 코드를 처리한다.

<c:if test="${param.name eq 'bk'}">
name 파라미터의 값이 ${param.name}입니다.<br>
</c:if>
<c:if test="${18 < param.age}">
당신의 나이는 18세 이상입니다.
</c:if>

(2) <c:choose>

다중 조건 처리시 사용한다. (switch)

<table>
...
<c:choose>
    <c:when test="${empty param.name}">
        <tr align="center">
            <td colspan="5">이름을 입력하세요.</td>
        </tr>
    </c:when>
    <c:otherwise>
        <tr align="center">
            <td>${param.id}</td>
            <td>${param.pwd}</td>
            <td>${param.name}</td>
            <td>${param.age}</td>
            <td>${param.email}</td>
        </tr>
    </c:otherwise>
</c:choose>
</table>

위 코드는 name 파라미터가 존재하지 않을 시 출력하지 않고, 존재할 시 정보를 출력하는 태그다.

(3) <c:forEach>

jsp에서 반복문을 수행하는 태그이며 다음과 같이 사용한다.

<c:forEach var="변수이름" items="반복할 객체이름" [begin="시작값"] [end="마지막값"] [step="증가값"] [varStatus="반복상태변수이름"]>
    ...
</c:forEach>
  • var : EL에서 사용될 변수명
  • items : 컬렉션
  • begin : items에서 값을 읽어올 인덱스의 시작값
  • end : items에서 값을 읽어올 인덱스의 끝값
  • step: 반복할 때마다 반복변수를 증가시킬 값
  • varStatus : 반복 상태 속성을 지정

[참고] varStatus 속성

속성 설명
index int items에서 정의한 항목을 가리키는 index번호
count int 반복 횟수(1부터 시작)
first boolean 첫 번째 반복여부
last boolean 마지막 반복 여부
<!-- 반복변수 i를 1씩 증가하며 반복문 수행 -->
<c:forEach var="i" begin="1" end="10" step="1" varStatus="loop">
    i = ${i}, 반복횟수: ${loop.count}<br>
</c:forEach>
<!-- List 컬렉션에 저장된 데이터를 반복해서 처리 -->
<c:forEach var="data" items="${list}">
    ${data}<br>
</c:forEach>
<!-- delims에 지정된 구분자를 기준으로 문자열을 분리 출력 -->
<c:set var="fruits" value="사과, 파인애플, 바나나, 망고, 귤">
<c:forTokens var="token" items="${fruits}" delims=",">
    ${token}<br>
</c:forTokens>

3. <c:out>

화면에 지정 값을 출력하는 태그인데, 표현언어와 거의 동일하나 기본값 설정 등을 제공하는 차이가 있다.

<c:out value="출력값" default="기본값" [escapeXml="{true|false}"]>
  • value : 출력값
  • default : 지정값이 없을때 출력할 기본 값
  • escapeXml : escape 문자를 변환 (기본 true)

[참고] escape 문자 : <, >, &, ', "

Tags:

Categories:

Updated:

Comments