Jint 2022. 6. 23. 21:54

EL(Expression Language)은 콤마(,)와 대괄호([])를 사용하여 자바 빈의 프로퍼티나 맵, 리스트, 배열의 값을 보다 쉽게 꺼내게 해주는 기술이다. 또한 스태틱(static)으로 선언된 메서드를 호출할 수도 있다. JSP에서는 주로 보관소에 들어 있는 값을 꺼낼 때 사용한다. EL을 사용하면 액션 태그를 사용하는 것보다 훨씬 더 간단히 보관소에 들어 있는 객체에 접근하여 값을 꺼내거나 메서드를 호출할 수 있다.

 

1. EL 표기법

EL은 ${}와 #{}를 사용하여 값을 표현한다. ${표현식}으로 지정된 값은 JSP가 실행될 때 JSP 페이지에 즉시 반영된다. 그래서 ${}을 '즉시 적용(Immediate evaluation)'이라 부른다. #{표현식}으로 지정된 값은 시스템에서 필요하다고 판단될 때 그 값을 사용한다. 그래서 #{}을 '지연 적용(deferred evaluation)'이라 부른다. 이런 이유로 #{}은 객체 프로퍼티의 값을 꺼내기보다는, 사용자가 입력한 값을 객체의 프로퍼티에 담는 용도로 많이 사용한다.

#{}은 특히 JSF(JavaServer Faces) 기술에서 UI를 만들 때 많이 사용한다. 다음 그림은 EL 표기법을 보여준다(그림 1).

그림 1 (EL 표기법)

앞의 그림과 같이 EL 표기법을 자바 코드로 표현하면 다음과 같다.

Member obj = (Member)pageContext.findAttribute("member");
int value = obj.getNo();

PageContext의 findAttribute()는 다음 순서에 따라 보관소(Scope Objects)를 뒤져서 객체를 찾는다. 마지막까지 뒤졌는데 없다면 null을 반환한다.

JspContext → ServletRequest → HttpSession → ServletContext → null

 

- EL에서 검색 범위 지정

EL도 <jsp:useBean>처럼 네 군데 보관소에서 값을 꺼낼 수 있다. 다만 <jsp:useBean>과 다른 점은 EL로는 객체를 생성할 수 없다는 것이다. 다음은 EL에서 보관소를 참조할 때 사용하는 이름이다(그림 2).

그림 2 (EL에서 보관소를 참조할 때 사용하는 이름)

다음 그림은ServletRequest 보관소에서 값을 꺼내는 EL 코드이다(그림 3).

그림 3 (ServletRequest 보관소)

앞의 그림과 같은 EL 코드를 자바 코드로 나타낸다면 다음과 같다.

Member obj = (Member)request.getAttribute("member");
int value = obj.getNo();

객체를 찾는 범위를 지정하지 않으면 JspContext부터 ServletContext까지 순차적으로 찾지만, 앞의 코드와 같이 범위를 지정하게 되면 해당 보관소에서만 객체를 찾는다. 못 찾으면 null을 반환한다.

 

2. JSP에서 제공하는 EL 기본 객체

다음은 JSP에서 기본 제공하는 EL 객체이다(그림 4).

그림 4 (EL 기본 객체)

본격적으로 EL을 사용하기에 앞서 몇 가지 기본 문법을 배워 본다.

 

참고도서 : https://freelec.co.kr/book/1674/

 

[열혈강의] 자바 웹 개발 워크북

[열혈강의] 자바 웹 개발 워크북

freelec.co.kr