1. JSTL이란?
- JSP Standard Tag Library
- JSP 페이지 내에서 자바 코드를 사용하지 않고 로직을 내장하는 효율적인 방법 제시.
- 표준화된 태그로 자바 코드를 대체하여 코드의 유지보수가 용이해짐.
2. JSTL 환경 설정
JSP에서 JSTL을 사용하기 위해서는 라이브러리를 설치해야 한다.
Maven Repository: jakarta.servlet.jsp.jstl » jakarta.servlet.jsp.jstl-api
Maven에서 Jakarta Standard Tag Library API와 Jakarta Standard Tag Library Implementation을 검색한다.
...
<dependencies>
<!-- https://mvnrepository.com/artifact/jakarta.servlet.jsp.jstl/jakarta.servlet.jsp.jstl-api -->
<dependency>
<groupId>jakarta.servlet.jsp.jstl</groupId>
<artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
<version>3.0.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.glassfish.web/jakarta.servlet.jsp.jstl -->
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>jakarta.servlet.jsp.jstl</artifactId>
<version>3.0.1</version>
</dependency>
</dependencies>
Code language: HTML, XML (xml)
pom.xml에 추가한다.
JSP 상단에 <%@ taglib prefix="c" uri="jakarta.tags.core" %>를 추가한다.
3. JSTL Tag
<%@ taglib prefix="prefix" uri="uri" %>
Code language: HTML, XML (xml)
JSTL을 사용하기 위해서 JSP에 추가한다.
| JSTL 태그의 종류 | prefix | 설명 | URI |
| Core | c | 조건문, 반복문, 변수 지원, 흐름 제어 등을 위한 태그 제공 | jakarta.tags.core |
| XML | x | XML 문서를 처리하기 위한 태그 제공 | jakarta.tags.xml |
| Internationalization (I18N) & Formatting | fmt | 다국어 지원 및 날짜, 숫자 등의 포맷팅을 위한 태그 제공 | jakarta.tags.fmt |
| Database | sql | SQL 문을 실행하기 위한 태그 제공 | jakarta.tags.sql |
| Functions | fn | EL 내에서 사용될 수 있는 함수 제공 (Collection, String 처리) | jakarta.tags.functions |
일단은 core만 알고 있자.
4. core tag
<%@ taglib prefix="c" uri="jakarta.tags.core" %>
Code language: HTML, XML (xml)
| tag | 설명 |
| set | jsp page에서 사용할 변수 선언 |
| if | 조건문 |
| choose, when, otherwise | 다중 조건문 (if ~ else if ~ else) |
| forEach | Array나 Collection의 각 항목을 처리할 때 사용. |
set, if, choose-when-otherwise, forEach를 많이 쓴다.
이외에도 remove, forTokens, import, redirect, url, catch, out을 tag들도 존재한다.
가. set
${pageContext.request.contextPath}
<c:set var="root1" value="${pageContext.request.contextPath}" />
${root1}
<c:set var="root2" >${pageContext.request.contextPath}</c:set>
${root2}
<c:set scope="session" var="root1" value="${pageContext.request.contextPath}" />
${root1}
Code language: HTML, XML (xml)
Jsp page에서 사용할 변수 선언.
변수가 저장될 scope도 지정할 수 있다.
나. c:if
<c:if test="${name eq 'park'}"> ... </c:if>
<c:if test="${name eq 'kim'}" var="varName" scope="session" > ... </c:if>
Code language: HTML, XML (xml)
test: 필수 속성으로 속성값으로 EL 비교식을 가집니다.var: 조건 결과를 저장할 변수를 지정합니다.scope: 조건 결과를 저장할 변수의 저장 scope을 지정합니다.
| 비교연산자 | 설명 |
| eq 또는 == | 동일 |
| ne 또는 != | 동일하지 않음 |
| empty | 비어 있거나 null. |
| not empty | 비어 있지 않거나 not null |
| lt 또는 < | 작다 |
| gt 또는 > | 크다 |
| le 또는 <= | 작거나 같다. |
| ge 또는 >= | 크거나 같다. |
and, or, not(또는 &&, ||, !) 같은 논리 연산자도 지원한다.
다. c:choose, c:when, c:otherwise
<c:choose>
<c:when test="${name eq 'kim'}"> ... </c:when>
<c:when test="${name eq 'park'}"> ... </c:when>
<c:otherwise> ... </c:otherwise>
</c:choose>
Code language: HTML, XML (xml)
if-elseif-else문은 choose-when-otherwise를 사용한다.
라. c:forEach
<c:forEach var=”varName” items=”${}” > … </c:forEach>
<c:forEach var=”varName” items=”${}” varStatus="varStatus">
${vaStatus.count}
</c:forEach>
Code language: HTML, XML (xml)
Array, Collection, Map 등의 개별 항목들에 대하여 반복적인 작업을 수행한다.
varStatus 속성으로 현재 반복의 상태를 알 수 있다.
package com.company.board;
public class Data {
int age;
String name;
public Data(int age, String name) {
super();
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Data [age=" + age + ", name=" + name + "]";
}
}
Code language: JavaScript (javascript)
실습을 위한 간단한 DTO 생성.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import="java.util.ArrayList"%>
<%@page import="com.company.board.Data"%>
<%@page import="java.util.List"%>
<%
List<Data> list = new ArrayList<Data>();
list.add(new Data(25, "홍길동1"));
list.add(new Data(85, "홍길동2"));
list.add(new Data(60, "홍길동3"));
list.add(new Data(65, "홍길동4"));
list.add(new Data(15, "홍길동5"));
list.add(new Data(29, "홍길동6"));
list.add(new Data(45, "홍길동7"));
session.setAttribute("list", list);
response.sendRedirect("i2.jsp");
%>
Code language: PHP (php)
session에 list 저장.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="jakarta.tags.core" %>
<c:forEach var="dto" items="${sessionScope.list}" >
이름 : ${dto.name}
나이 : ${dto.age}
<br>
</c:forEach>
Code language: HTML, XML (xml)
list에 대하여 각각의 item의 정보를 출력.

EL과 JSTL을 잘 사용하면 JSP에서
<%가 사라진다.