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
- 값이 빈 문자열("")이면 true
- 길이가 0인 배열([])이면 true
- 빈 Map 객체는 true
- 빈 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)
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 속성에 지정한 변수를 통해 현재 반복의 상태를 알 수 있다.