[JSP] EL/JSTL

무1민·2023년 3월 26일
1

백엔드

목록 보기
4/4

EL (Expression Language)

  • EL은 표현을 위한 언어로 JSP 스크립트의 표현식을 대신하여 속성 값을 쉽게 출력하도록 고안된 language이다.
  • 즉 표현식(<%= %>)을 대체할 수 있다.
  • EL 표현식에서 도트 연산자 왼쪽은 반드시 java.util.Map 객체 또는 Java Bean 객체여야 한다.
  • EL 표현식에서 도트 연산자 오른쪽은 반드시 맵의 키이거나 Bean 프로퍼티여야 한다.
  • EL에서 제공하는 기능
    • JSP의 네가지 기본 객체가 제공하는 영역의 속성 사용
    • 자바 클래스 메소드 호출 기능
    • 표현 언어만의 기본 객체 제공
    • 수치, 관계, 논리 연산 제공

EL 문법

  • EL에는 Dot 표기법 외에 []연산자를 사용하여 객체의 값에 접근할 수 있다.
  • [] 연산자 안의 값이 문자열인 경우, 이것은 맵의 키가 될 수 있고, Bean 프로퍼티나 리스트 및 배열의 인덱스가 될 수 있다.
  • 배열과 리스트인 경우, 문자로 된 인덱스 값은 숫자로 변경하여 처리합니다.

EL 내장객체

EL 사용

  • pageContext를 제외한 모든 EL 내장 객체는 Map이다.
  • 그러므로 key와 value의 쌍으로 값을 저장하고 있다.

EL에서 객체 접근

  • request.setAttribute("userinfo", "방진성");
    1. ${requestScope.userinfo}
    2. ${pageContext.request.userinfo}, ${userinfo}
  • url?name=방진성$fruit=사과&fruit=바나나
    1. ${param.name}
    2. ${paramValues.fruit[0]}
Method is : ${pageContext.request.method}

// Servlet
request.setAttribute("users.user",memberDto);

// Case #1 : 에러
${users.user.name} // users라는 속성은 존재하지 않는다.

// Case #2 : request 내장객체에서 []연산자를 통해 속성 접근
${requestScope[""users.user].name}
  • ${cookie.id.value}
    1. Cookie가 null이라면 null return.
    2. null이 아니라면 id를 검사 후 null이라면 null return
    3. null이 아니라면 value값 검사.
    - EL은 값이 null이라도 null을 출력하지 않는다.(공백)

EL Operator(연산자)

  • empty 연산자에서 true를 return하는 경우
    1. 값이 null이면 true
    1. 값이 빈 문자열("")이면 true
    2. 길이가 0인 배열([])이면 true
    3. 빈 Map 객체는 true
    4. 빈 Collection 객체이면 true

EL에서 객체 method 호출

<%
List list = dao.getMembers();
request.setAttribute("users", list);
%>

  • 회원 수 : ${requestScope.users.size()}, ${users.size()}

  • ${users.size} == <%= request.getAttribute("users").getSize()%>


JSTL(Jsp Standard Tag Library)

  • directive 선언 형식 : <%@ taglib prefix="prefix" uri="uri" %>

JSTL - core tag

변수 선언 : <c:set>

  • <c:set> 액션은 변수나 특정 객체의 프로퍼티에 값을 할당할 때 사용
  • value 속성의 값이나 액션의 Body content로 값을 설정
  • var 속성은 변수를 나타내며, 변수의 생존범위는 scope 속성으로 설정.(디폴트는 page)
  • 특정 객체의 프로퍼티에 값을 할당할 때는 target 속성에 객체를 설정하고 property에 프로퍼티명을 설정

예외 : <c:catch>

  • 기본적으로 JSP 페이지는 예외가 발생하면 지정된 오류페이지를 통해 처리한다.
  • <c:catch> 액션은 JSP 페이지에서 예외가 발생할 만한 코드를 오류페이지로 넘기지 않고 직접 처리할 때 사용
  • var 속성에는 발생한 예외를 담을 page 생존범위 변수를 지정.
  • <c:catch>와 <c:if> 액션을 함께 사용하여 Java 코드의 try~catch와 같은 기능을 구현할 수 있다.

조건문 : <c:if>, <c:choose><c:when><c:otherwise>

  • <c:if> 액션은 test 속성에 지정된 표현식을 평가하여 결과가 true인 경우 액션의 Body 컨텐츠를 수행
  • <c:if> 액션의 var속성은 표현식의 평가 결과인 Boolean 값을 담을 변수를 나타내며, 변수의 생존범위를 scope속성으로 설정
  • <c:choose><c:when><c:otherwise> 액션을 사용하면 if, else if, else와 같이 처리할 수 있다.

반복문 : <c:forEach>

  • <c:forEach> 액션은 컬렉션에 있는 항목들에 대하여 액션의 Body 컨텐츠를 반복하여 수행
  • 컬렉션에는 Array, Collection, Map 또는 콤마로 분리된 문자열이 올 수 있다.
  • var 속성에는 반복에 대한 현재 항목을 담는 변수를 지정하고 items 속성은 반복할 항목들을 갖는 컬렉션을 지정
  • varStatus 속성에 지정한 변수를 통해 현재 반복의 상태를 알 수 있다.
profile
야호

0개의 댓글