EL 핵심정리
- EL 표현식은 항상 중괄호로 묶고 앞에 달러($)기호를 붙입니다. ex) ${표현식}
- 표현식에서 첫번째 변수는 내장 객체이거나 아니면 다음 4가지 생존범위에 속하는 속성
(page, request, session, application) - dot연산자는 맵 키 이름이나 빈 프로퍼티 이름으로 값을 읽는다.
예) ${foo.bar} 에서 foo가 맵이라면 bar는 키, foo가 빈이라면 bar는 프로퍼티 - []연산자는 도트 연산자보다 훨씬 기능이 강력함. []연산자는 배열과 리스트 값도 읽을 수 있음.
또, []안에 변수를 포함한 표현식을 쓸 수도 있으며, 얼마든지 많은 []을 포함할 수 있음. - musicList가 ArrayList라고 한다면, musicList의 첫번째 값을 읽을 때,
${musicList[0]}, ${musicList["0"]} 둘 다 가능.
EL에서는 인덱스값에 따옴표 허용. - []안에 있는 것에 따옴표가 없다면, 컨테이너는 이 값이 무엇인지 실행해보고,
따옴표가 있고 연산자 왼쪽이 배열이나 리스트가 아니라면 []안에 값을 프로퍼티나 키 이름이라고 생각함. - EL내장객체는 딱 하나를 빼고 모두 맵이다.
맵 내장 객체만 있으면 4가지 생존범위 객체에 묶여 있는 속성, 요청 파라미터값, 헤더값, 쿠키값, 컨텍스트 초기화 파라미터에 접근할 수 있다.
맵타입이 아닌 객체는 pageContext뿐.. 이는 PageContext 객체 참조 변수임. - EL에서 request 객체에 접근할 수 있는 유일한 길은 pageContext 내장 객체를 통해서가능하다.
(꼭 request에 접근하지 않더라도 다른 EL 내장객체 param/paramValues, header/headerValues, cookie를 가지고서도 필요한 정보를 읽을 수 있다.) - EL 함수를 사용하면 일반 자바 클래스에 있는 정적인 공용(public static) 메소드를 호출할 수 있다.
- TLD(태그 라이브러리 서술자) 파일을 사용해서 함수와 실제 정적인 메소드를 서로 매핑한다.
- JSP에서 함수를 사용하려면, taglib지시자로 namespace를 선언해야 한다.
taglib지시자에 있는 앞 첨자(prefix)를 가지고 컨테이너는 코딩에서 호출한 함수가 어느 TLD에 있는지 파악하는데 사용함
예) <% taglib prefix="mine" uri="DiceFunctions" %>
Reference : Head First Servlets & JSP
댓글