>

TIL

JSTL

ekdud 2024. 12. 31. 15:09

 

JSTL

JSP 표준라이브러리. (JavaServer Pages Standard Tag Library)
JSP에서 반복문과 조건문, 데이터 관리 포맷, XML 조작, 데이터베이스 액세스를 구현하는 커스텀 태그 라이브러리의 모음.
자신만의 태그를 추가할 수 있다.

 

Java 코드를 바로 사용하지 않고 HTML 태그(<>) 형태로 직관적인 코딩을 지원한다. => EL(Expression Language)

*EL은 하단에서 다시 설명.

 

라이브러리 기능 접두어
코어  일반 프로그램 언어에서 제공하는 변수선언, 조건/제어/반복문등의 기능을 제공한다. c
포맷팅  숫자,날짜,시간을 포맷팅 하는 기능과 국제화, 다국어 지원 기능을 제공한다. fmt
함수  문자열을 처리하는 함수를 제공한다.  fn
데이터베이스  데이터베이스의 데이터를 입력/수정/삭제/조회하는 기능을 제공한다. sql
XML처리  XML 문서를 처리할 때 필요한 기능을 제공한다. x

 

 

사용법

우선 *.jsp 파일 상단에 taglib지시자로 JSTL확장 태그를 선언해줘야한다.

코어 . <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
포맷팅 <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
함수 <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
데이터베이스 <%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
XML처리 <%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>

 

참고문서 → 🔗

 

 


 

EL (Expression Language)

JSP 2.0부터는 JSP 컨테이너가 EL 표현식을 해석할 수 있게 되어서

이전까지는 자바 코드를 사용해야했던 모든 곳에 EL을 사용할 수 있다.

 

- 값이 없는 변수(null)에 대해 좀 더 관대하며 데이터 형변환을 자동으로 해준다.

JSP Expression(표현식) 방식 : 파라미터 출력
<%=request.getParameter("name") %>
<%=request.getParameter("address") %>

EL 방식 파라미터 출력
${param.name}
${param.address}

 

 

EL 내장객체

내부적으로 변수 선언과 초기화 작업이 자동으로 되는 객체로, 개발자는 내장 객체를 사용할 때 참조변수의 이름을 통해 참조변수로 바로 접근하여 사용할 수 있다.(JSP도 지원)

내장 객체
설명
pageContext
JSP 내장 객체 pageContext와 같음.
· pageContext 객체에 접근하기 위한 객체
pageScope
pageContext에 등록된 데이터의 이름과 값을 저장하고 있는 map객체.
· page Scope에 접근하기 위한 객체
requestScope
HttpServletRequest에 등록된 데이터의 이름과 값을 저장하고 있는 map객체.
· request Scope에 접근하기 위한 객체.
sessionScope
HttpSession에 등록된 데이터의 이름과 값을 저장하고 있는 map객체.
· session Scope에 접근하기 위한 객체.
applicationScope
ServletContext에 등록된 데이터의 이름과 값을 저장하고 있는 map 객체.
· application Scope에 접근하기 위한 객체.
param
QueryString의 이름과 값을 저장하고 있는 map객체.
· 파라미터 값을 가져오기 위한 객체.
paramValues
같은 이름으로 전달된 질의 문자열의 이름과 값들을 저정하고 있는 map 객체.
header
요청정보 헤더의 정보를 이름과 값으로 저장하고 있는 map객체.
· 헤더 값을 가져오기 위한 객체.
headerValues
요청정보 헤더의 정보들을 이름과 값들을 저장하고 있는 map객체.
cookie
요청을 보낸 클라이언트의 쿠기 이름과 값을 저장하고 있는 map객체.
· 쿠키 값을 가져오기 위한 객체.
initParam
웹 애플리케이션에 저장한 초기 파라미터의 이름과 값을 저장하고 있는 map 객체.
· JSP 초기 파라미터를 가져오기 위한 객체.

 

EL 연산자 종류

산술 연산자 +, -, *, /, %, mode, div
논리 연산자 &&, ||, !, and, or, not
비교 연산자 ==, !=, <, >, <=, >=, eq, ne, lt, get, le, ge
null 검사 empty (값이 null이거나 공백문자인지를 판단하는 연산자)
삼항 연산자 '조건식' ? '값1' : '값2'
할당 연산자 변수명 =

 

EL 산술 연산자
${10 + 20} : 30
${10 - 20} : -10
${10 * 20} : 200
${10 / 20} : 0.5
${10 div 20} : 0.5
${10 % 20} : 10
${10 mod 20} : 10

EL 논리 연산자
${true && false} : false
${true and false] : false
${false || true} : true
${false or true] : true
${not true} : false
${!true} : false

empty 연산자
${empty 변수명} : 변수가 null일 경우 true

삼항 연산자
${10 > 20 ? "크다" : "작다"}
${useYn eq 'Y' ? "사용" : "미사용"}

 

 

EL 리터럴 표현식

문자열, 정수, 부동소수점, Boolean, Null을 사용.

 ${ 이 안에 사용해요

 

 

EL 표기법

# EL 표기법
${} : JSP가 실행될 때 즉시 반영. 객체 프로퍼티 값을 꺼낼 때 주로 사용.
#{} : 시스템에서 필요하다고 판단될 때 그 값을 사용. 사용자 입력값을 객체의 프로퍼티에 담는 용도로 주로 사용.

 

 

 

사용해보기

Core태그를 이용해서 조건에 따라 버튼이 다르게 표시되도록 해보자.

<div class="modal-footer">
    <button type="button" class="btn btn-light" data-bs-dismiss="modal">닫기</button>
    <c:choose>
        <c:when test="${userYn eq 'Y'}">
            <button type="button" class="btn btn-danger" onclick="fnDeleteUser_click('${param.UserRegNo}');">삭제</button>
            <button type="button" class="btn btn-primary" id="btn_upd_User" onclick="fnUserRegModal_click('U', '${param.UserRegNo}');">수정</button>
        </c:when>
        <c:otherwise>
            <button type="button" class="btn btn-primary" onclick="fnRestoreUser_click('${param.UserRegNo}');">복구</button>
        </c:otherwise>
    </c:choose>	
</div>

 

해당 코드는 상세정보를 보여주는 모달창을 구현한 것의 일부이다.

닫기 버튼은 항상 표시되며

userYn 데이터의 값이 'Y'인 경우에는 삭제수정 버튼이 페이지에 뜨고

그 외의 경우에는 삭제, 수정버튼은 표시되지 않고 복구 버튼이 표시되도록 했다.

 

 

참고 블로그(로그의 개발일지)