티스토리 뷰
EL이란?
EL은 스크립틀릿의 다른형태로 표현식보다 간결하고 편리하기때문에 많이 사용된다.
EL은 JSTL(JSP Standard Tag Lib) 1.0규약에 소개되고 JSP 2.0부터 포함되었으며 JSP2.1버전부터 EL과 관련된 규약을 문서로 제공한다. JSP2.3에는 표현언어 3.0을 사용한다.
표현언어 EL은 다음과 같은 기능을 제공한다
- JSP의 네 가지 기본 객체가 제공하는 영역의 속성 사용
- 수치연산, 관계 연산, 논리 연산자 제공
- 자바 클래스 메서드 호출
- 쿠키, 기본 객체의 속성 등 JSP를 위한 표현 언어의 기본 객체 제공
EL 3.0
- 람다식을 이용한 함수 정의와 실행
- 스트림 API를 통한 컬렉션 처리
- 정적 메서드 실행
표현식
<%= member.getAddress().getZipcode() %>
EL
${member.address.zipcode}
EL의 데이터 타입과 리터럴
Boolean | true, false |
정수(java.lang.Long) | 0~9 |
실수(java.lang.Double) | 0~9로 이루어져있으며 소수점을 사용할 수 있고 3.24e3과 같이 지수형으로 표현가능 |
문자열 타입(java.lang.String) | 따옴표 (' or ")로 감싼 문자열 |
널 | null |
EL의 기본객체
pageContext | JSP의 pageContext 기본 객체와 동일 |
pageScope | pageContext 기본 객체에 저장된 속성 매핑을 저장한 Map 객체 |
requestScope | request 기본 객체에 저장된 속성 매핑을 저장한 Map 객체 |
sessionScope | session 기본 객체에 저장된 속성 매핑을 저장한 Map 객체 |
applicationScope | application 기본 객체에 저장된 속성 매핑을 저장한 Map 객체 |
param | 요청 parameter 값 매핑을 저장한 Map 객체임. 파라미터 값은 String request.getParameter(이름) |
paramValues | parameter 의 <이름, 값 배열> 매핑을 저장한 Map으로 값 타입은 String[] request.getParameterValues(이름) |
header | 요청정보 <헤더이름, 값> 을 저장한 Map 객체 request.getHeader(이름) |
headerValues | 요청정보 <헤더이름, 값이름> 을 저장한 Map 객체 request.getHeaders(이름)과 동일 |
cookie | <쿠키이름, Cookie> 매핑을 저장한 Map 객체 request.getCookies()로 구한 Cookie 배열로 매핑 생성 |
initParam | 초기화 parameter <이름, 값> 을 저장한 Map 객체 application.getInitParameter(이름)과 동일 |
수치연산자
+, -, *, / or div, % or mod
자바에서는 "10" + 1 은 "101" 이지만 EL에서는 다르다 표현언어에서는 문자를 숫자로 변경후 연산을 수행한다 코드의 결과는 11이다.
더할 수 없는 연산 ${"일" + 1} 을 수행할 경우 에러가 발생한다.
표현언어에서 수치연산은 아래와 같은 규칙을 가진다.
- null 이면 0으로 치환한다
- A나 B가 BigDecimal이면 다른 하나를 BigDecimal로 변환 후 연산한다
- A나 B가 Float나 Double일 경우 BigInteger가 있을경우 BigDecimal로 변환해서 연산 아니면 Double로 변환해서 연산
- A나 B가 BigInteger면 BigInteger로 변환해서 연산
- 위의 경우가 모두 아니면 Long으로 변환한 뒤 연산
- 변환이나 연산에 실패히 Exception 발생
나누기
자바에서는 3/2는 정수 타입간의 나누기로 1이 되지만 EL에서는 Double로 변환 후 연산하게 되고 결과는 1.5가 된다.
비교연산자
== or eq
!= or ne
< or lt
> or gt
<= or le
>= or ge
논리연산자
&& or and
|| or or
! or net
empty 연산자
empty <값>
값이 null이면 true
값이 빈문자열 "" 이면 true
값이 길이가 0인 배열이면 true
값이 빈 Map이면 true
값이 빈 Collection이면 true
이외는 false
삼항연산자
<수식> ? <참> : <거짓>
문자열 연결
EL3.0에서 부터 지원하며 이전버전은 지원하지 않는다.
${ "문자" += "열" += "연결"}
컬렉션
List, Map, Set 직접 생성하기
List
<c:set var="vals" values="${[1, 2, 5, 10]}" />
Map
<c:set var="mem" values="${ {'name': 'Paramore', 'age': 20} }" />
Set
<c:set var="hangul" values="${ {'가', '나', '다'} } />
세미콜론 연산자
EL3.0에 추가된 기능으로 두개의 식을 이어붙일 수 있다.
${ 1+1 ; 10 + 20}
위 코드의 결과는 30이 출력된다 ;을 기준으로 왼쪽의 식은 출력되지 않는다. 이 성질을 활용한 트릭을 할당연산자에 사용할 수 있다.
할당연산자
JSP page에서 사용할 수 있는 EL 변수를 생성하기 위한 방법은 아래와 같은 방법이 있다.
<% request.setAttribute("val1", 10L); %>
or
<c:set var="var1" value="${10}" />
EL을 활용하면 아래와 같이 변수를 생성할 수 있다.
${ var1 = 10 }
${ var2 = 10; ''}
문제는 할당연산자도 출력을 한다는 점이다. var1 = 10 은 10을 출력한다. 출력을 원치않을 경우 ; 연산자를 통해 공백 ''을 출력하는 방법을 사용할 수 있다.
'JSP &Servlet' 카테고리의 다른 글
JSP JDBC 드라이버 로딩 및 Connection Pool 만들기 (0) | 2021.05.05 |
---|---|
JSP JSTL(JSP Standard Tag Library) (0) | 2021.04.28 |
JSP 에러처리 (0) | 2021.04.27 |
JSP 기본 객체와 영역 (0) | 2021.04.27 |
JSP 폴더구조 (0) | 2021.04.27 |