[Servlet_JSP] JSTL

2024. 4. 8. 02:11BE/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");
%>

sessionlist 저장.

 

<%@ 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