>

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'인 경우에는 삭제수정 버튼이 페이지에 뜨고

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

     

     

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