JSTL
JSTL(JSP Standard Tag Library)은 JSP에서 스크립트릿, 즉 자바 코드 블록을 사용하지 않고 HTML 형식을 유지하면서 조건문, 반복문, 간단한 연산과 몇몇 유용한 기능을 손쉽게 사용할 수 있도록 지원하기 위해 만들어진 표준 커스텀 태그 라이브러리다.
서버에서만 해석할 수 있는 구조로 인해 디자이너와의 협업에 불편한 부분이 있고, 개발 과정에서 UI 확인을 위해 서버를 통해야만 하는 비효율적인 문제가 존재한다. 이러한 문제점은 모바일 환경 중심의 프론트엔드 개발 트렌드와는 다소 거리가 있다.
규격상 JSTL은 core, xml, I18N(다국어 처리), 데이터베이스, 함수 등으로 구성되어 있으나 뷰 중심의 JSP 구현에는 core 정도만 사용된다.
JSTL 라이브러리 설치
JSTL은 표준 규격으로만 존재하기 때문에 개발에 적용하기 위해서는 실제 구현된 라이브러리가 필요하다. 여러 구현 버전이 있지만 Apache Standard Taglib를 주로 사용한다.
라이브러리를 설치하기 위해 웹 브라우저에서 http://tomcat.apache.org/download-taglibs.cgi에 접속하여 <Impl>, <Spec>을 클릭하여 다운로드 한다.
다운로드한 라이브러리 파일을 [webapp]→[WEB-INF]→[lib] 폴더에 복사해 넣어준다. 경로가 잘못되면 이클립스에서 라이브러리 인식을 못하므로 주의한다.
maven, gradle 등의 빌드 도구를 사용할 경우 설정 파일에 해당 라이브러리 의존성을 추가하면 된다.
JSF
JSF(Java Server Faces)란 커스텀 태그로 만들어진 표준 태그 라이브러리로 JSTL과 유사하다. Java EE 애플리케이션에서 컴포넌트 기반의 UI를 손쉽게 제작하고 활용하기 위해 나온 것이라 사용 목적이 UI에 특화되어 있다는 점을 제외하고는 JSTL과 장단점을 같이한다. 자세한 사항은 http://javaserverfaces.java.net을 참조한다.
JSTL 사용하기
JSTL을 JSP에서 사용하려면 taglib 지시어를 추가해야 한다. core 라이브러리 사용을 위해서는 다음과 같이 작성한다.
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
- c: 태그 라이브러리 규격상 접두어는 원하는 대로 사용할 수 있지만 c를 사용할 것을 권장한다.
- uri는 반드시 정확한 경로를 사용해야 한다.
core 라이브러리
core 라이브러리는 변수 처리, 흐름 제어, URL 관리, 출력 등 가장 기본적인 기능을 구현해둔 라이브러리다.
자주 사용되는 core 라이브러리의 종류
기능 | 태그 | 사용 예 |
변수 관련 | remove, set | 변수 지정과 삭제 |
흐름 제어 | if, choose · when · otherwise, forEach, forTokens | 조건 처리, 반복, 토큰 파싱 |
URL 관리 | import, redirect, url, param | URL 핸들링 |
기타 | catch, out | 에러 처리, 출력 |
이 중에서도 제일 많이 사용되는 기능인 흐름 제어이다.
<c:if>
<c:if>는 자바의 if 문과 유사하지만 else를 지원하지 않는다. 또한 조건 테스트를 위해 속성을 참조할 범위scope를 지정할 수도 있지만 필수 사항은 아니다. 사용 형식과 예시는 다음과 같다.
사용 형식
<c:if test="조건" [var="결과 변수"] [scope="{page|request|session|application}"]>
조건이 참(true)인 경우 출력되는 부분
</c:if>
- test에서 선언한 조건이 만족하면 바디 태그 부분을 실행한다.
사용 예시
<c:if test="${msg == 'user1'}" var="result">
test result : ${result}
</c:if>
- msg 속성값이 user1인 경우에 결과를 출력한다.
<c:forEach>
<c:forEach>는 가장 많이 사용하는 태그로 화면에 데이터를 반복해서 출력할 때 주로 사용한다. 자바의 for 문과 같은 개념이지만 커스텀 태그 특성상 정밀한 설정이 가능하지 않기 때문에 제공되는 속성을 잘 활용해야 한다. <c:forEach>는 진행 상태를 확인하기 위해 index, count 등을 지원하는 varStatus를 제공한다.
사용 형식
<c:forEach [var="참조 객체"] [varStatus="상태 정보 변수"] begin="시작" end="종료"
[step="반복 단계 증가 값, 1이 기본"]>
반복 출력되는 부분
<c:forEach>
- var: 배열, 리스트 등 집합형 객체다.
- varStatus: 반복 진행 상황을 참조하기 위한 객체다.
- 주어진 데이터를 모두 순환하지 않고 특정 구간과 상승 단계 지정이 가능하다.
사용 예시
<c:forEach var="m" items="${members}" begin="0" vatStatus="status" end="5">
index: ${status.index} /
count: ${status.count} <BR>
name: ${m.name} <BR>
email: ${m.email} <BR>
<HR>
</c:forEach>
- members는 이전 페이지에서 전달된 리스트(List) 객체로 가정한다.
- 순환하면서 m으로 리스트 아이템(Member 타입)이 하나씩 전달된다.
- status 객체를 통해 인덱스(Index), 횟수(Count)를 참조할 수 있다.
- m으로 참조되는 객체는 name, email 필드에 대한 getter/setter 메서드가 존재해야 접근할 수 있다.
'Programming > Web' 카테고리의 다른 글
[Web] 서블릿 컨트롤러 설계 (0) | 2022.10.23 |
---|---|
[Web] MVC 패턴 (0) | 2022.10.22 |
[Web] 커스텀 태그와 EL (0) | 2022.10.22 |
[Web] 액션 태그 (useBean, include, forward) (0) | 2022.10.21 |
[Web] 템플릿 데이터와 스크립트 요소(<%! %>, <%= %>, <% %>) (0) | 2022.10.20 |