BackEnd/Database Programming

[DB Programming] JSP Standard Tag Library (JSTL)

하노정 2022. 12. 8. 20:25

JSTL 개요

Custom Tag

  • JSP에서 반복적으로 사용되는 프로그램 로직을 캡슐화하여 태그 형태로 정의한 것
  • JSP 페이지에서 scriptlet (java code)을 대체하기 위해 사용 - JSP에서 바로 Java 코드를 작성하는 건 안 좋음

 

JSP Standard Tag Library (JSTL)

  • JSP와 함께 Java EE Platform에 포함됨
  • JSP 개발에서 공통적으로 사용되는 유용한 custom tag들을 정의
  • MVC 구조에서 collection과 같이 여러 원소들을 포함하는 데이터를 처리할 때 특히 유용
  • Expression Language (EL)와 함께 사용

 

설치

  • Maven repository에서 JSTL API 및 구현체 library를 직접 download
    • jstl-1.2.jar 파일을 Web application 내의 WEB-INF/lib 폴더에 복사
  • Maven dependency 설정을 통해 자동 download (권장)

 

Maven

https://kimmy100b.github.io/maven/2020/09/16/maven/ 

 

JSTL 구성

해당 Library 쓰려면 uri, prefix로 미리 어떤 것을 쓸 거라고 정의해야 한다.

  • Core 기능 : 변수 설정 및 제거, 흐름제어, URL 사용 등 ( 처음에 미리 정의 안 하고 사용했다가 삽질한 경험 있..)
    • uri : http://java.sun.com/jsp/jstlcore
    • prefix : c
  • Funtion 기능 : 다양한 기능의 함수 제공
    • uri : http://java.sum.com/jsp/jstl/functions
    • prefix : fn

Expression Language (EL)

  • JSP에서 JavaBeans나 Map과 같은 Java component를 Java code(scriptlet)를 사용하지 않고 쉽게 접근하게 해 주는 언어
  • standard part of JSP 2.0 +
  • JSP 또는 JSTL과 함께 사용됨
  • ${expression} 형식을 사용하여 다음과 같은 것들을 접근 가능
    • JavaBean properties
    • Map, List, 또는 배열의 원소 (collection)
    • Servlet 내장객체의 속성
  • ex) JavaBean에 대한 접근
// EL
${person.name} 또는 ${person["name"]} 

// Java (script tag)
<%= ((Person) request.getAttribute("person")).getName() %>
  • EL 내장객체
    • pageScope, requestScope, sessionScope, applicationScope
      • ${name} : page, request, session, application 순으로 검색해서 찾음
      • ${requestScope.name} : request에서만 검색
        • <%= request.getAttribute("name") %>와 동일
      • ${sessionScope.name} : session에서만 검색
        • <%= session.getAttribute("name") %>와 동일
    • param, paramValues
      • request parameter를 접근
      • <input type="text" name="myID"> -> ${param.myID} or ${paramValues.name[0]}
    • header, headerValues, pageContext
    • cookie
    • initParam

JSTL Core Library 

1. Variable Support Tags : <c:set> Tag

  • JSP의 setAttribute()와 같은 역할
  • page, request, session, application 범위의 변수(속성)를 설정 -> 이 순으로 탐색

 

2. Iteration Tags : <c:forEach> Tag

  • 객체 전체에 걸쳐 반복 실행 시 사용
  • for문 대체 태그 (다 태그로 구성되어 있어서 보기 좋고 편리함)
  • JSP 실행 전 Servlet이 실행되고 그 결과로 collection 형태의 reqeust 속성이 forwarding으로 넘어옴 -> 그럼 바로 ${words} 와 같이 EL로 받을 수 있고 <c:forEach>로 collection 형태에 원소 하나씩 접근해 사용할 수 있음
  • varStatus 속성 이용 가능
<c:forEach var="name" items="${names}" varStatus="status">
	${name} <c:if test="${!status.last}">, </c:if>
</c:forEach>

 

3. Conditional Evalutation Tags : <c:if> Tag

  • 하나의 조건문 표현한다. 조건을 걸고 부합 시 태그를 생성한다. 
<c:if test="${i > 7}"> greater than 7 </c:if>
<c:choose>
    <c:when test="test1">Content1</c:when>
    <c:when test="test2">Content2</c:when>
	// ..
    <c:otherwise>Default Content</c:otherwise>
</c:choose>

 

  • 비교 연산자
    • eq : equal (==)
    • ne : not equal (!=)
    • empty : list, set, map 등 collection 객체가 원소를 갖고 있는지 여부 검사
<c:if test="${name eq null}">
<c:if test="${name eq 'hhj'}">
<c:if test="${name eq 23}">

<c:if test="${empty userList}">

 

4. URL Related Tags - <c:url> Tag, <c:param> Tag

  • <c:url> Tag : query parameter로부터 URL을 생성함.
  • <c:param> Tag : <import> 태그 사용 시 parameter 전달을 위해 사용

 

5. <c:out> Tag

  • JSP 표현식을 대체하기 위해 사용됨
  • 식 계산 및 결과 화면 출력
<c:forEach var="word" items="${words}">
	<c:out value="${word}" /> // == ${word}
</c:forEach>