2024. 4. 8. 02:11ㆍBE/Servlet_JSP
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>
pom.xml에 추가한다.
JSP 상단에 <%@ taglib prefix="c" uri="jakarta.tags.core" %>
를 추가한다.
3. JSTL Tag
<%@ taglib prefix="prefix" uri="uri" %>
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" %>
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}
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>
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>
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>
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 + "]";
}
}
실습을 위한 간단한 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");
%>
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>
list
에 대하여 각각의 item의 정보를 출력.
EL과 JSTL을 잘 사용하면 JSP에서
<%
가 사라진다.
'BE > Servlet_JSP' 카테고리의 다른 글
[Servlet_JSP] EL (0) | 2024.04.08 |
---|---|
[Servlet_JSP] JSP (0) | 2024.04.01 |
[Servlet_JSP] Cookie&Session (0) | 2024.03.31 |
[Servlet_JSP] Servlet (0) | 2024.03.31 |