백엔드 (EL/JSTL)

Wonkyun Jung·2023년 3월 23일
1

백엔드

목록 보기
4/4
post-thumbnail

EL (Expression Language)

  • EL은 표현을 위한 언어로 JSP 스크립트의 표현식을 대신하여 속성 값을 쉽게 출력하도록 고안된 language이다.

  • 즉 표현식 (<%= %>)를 대체할 수 있다

  • EL 표현식에서 도트 연산자 왼쪽은 반드시 Java.util.Map 객체 또는 Java Bean 객체여야 한다

  • EL 표현식에서 도트 연산자 오른쪽은 반드시 맵의 키이거나 Bean 프로퍼티여야 한다

  • EL에서 제공하는 기능

    • JSP의 네가지 기본 객체가 제공하는 영역의 속성 사용
    • 자바 클래스 메소드 호출 기능
    • 표현 언어만의 기본 객체 제공
    • 수치,관계,논리 연산 제공

    EL 문법


EL문법: []연산자

-EL에는 Dot 표기법 외에 []연산자를 사용하여 객체의 값에 접근할 수 있다

  • [] 연산자 안의 값이 문자열인 경우, 이것은 맵의 키가 될 수도 있고, Bean 프로퍼티나 리스트 및 배열의 인덱스가 될 수 있다
  • 배열과 리스트인 경우, 문자로 된 인덱스 값은 숫자로 변경하여 처리합니다


EL 내장객체

  • EL 내장객체는 JSP 페이지의 EL 표현식에서 사용할 수 있는 객체


EL 사용

  • pageContext를 제외한 모든 EL 내장 객체는 Map이다

  • 그러므로 key와 value의 쌍으로 값을 저장하고 있다

  • 기본 문법 ${expr}


EL 에서 객체 접근

  • request.setAttribute("userinfo","홍길동");
    1. ${requestScope.userinfo}
    2. ${pageContext.request.userinfo}, ${userinfo}

  • url?name=홍길동&fruit=사과fruit=바나나
    1. ${param.name}
    2. ${paramValues.fruit[0]}, ${paramValues.fruit[1]}
Method is : ${pageContext.request.method}

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

case #1: 에러
${city.user.name}

case #2: request 내장객체에서 []연산자를 통해 속성 접근 
${requestScope["city.user"].name}

  • ${cookie.id.value}
    1. Cookie가 null이라면 null return
    2. null이 아니라면 id를 검사 후 null이라면 null return
      3.null이 아니라면 value값 검사 (EL은 값이 null이라도 null을 출력하지 않는다 -> 공백)


EL Operator (연산자)


EL에서 객체 method 호출

<%
List<MemberDto>list = dao.getMembers();
request.setAttribute("users",list);
%>
  • 회원 수 : ${requestScope.user.size()}, ${users.size()}

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



JSTL (Jsp Standard Tag Library)

  • JSTL은 Java EE 기반의 웹 애플리케이션 개발 플랫폼을 위한 컴포넌트 모음

  • custom tag: 개발자가 직접 태그를 작성할 수 있는 기능을 제공

  • custom tag중에서 많이 사용되는 것들을 모아서 JSTL이라는 규약을 만듦

  • 논리적인 판단, 반복문의 처리 데이터베이스 등의 처리를 할 수 있다

  • JSTL은 JSP 페이지에서 스크립트릿을 사용하지 않고 액션을 통해 간단하게 처리할 수 있는 방법을 제공

  • JSTL에는 다양한 액션이 있으며, EL과 함께 사용하여 코드를 간결하게 작성할 수 있다


JSTL Tag

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


JSTL core tag

선언 형식 <%@ taglib prefix = "c" url = "http://java.sun.com/jsp/jstl/core" %>


변수 선언 : <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 속성에 지정한 변수를 통해 현재 반복의 상태를 알 수 있다

0개의 댓글