JSP EL(Expression Language) #6
< EL (Expression Language) > |
-저장 객체에서 값을 추출해서 출력하는 표현식
JSP에서 출력 부분(HTML)에 EL 표현식을 사용하면 쉽게 값을 추출해서 출력해줄 수 있다.
Controller | View (java 사용 시) | EL (표현식 사용 시) |
request.setAttribute("cnt",30); | request.getAttribute("cnt"); | ${cnt} |
List list = new ArrayList(){"1", "test"...}; request.setAttribute("list", list); |
((List)request.getAttribute("list")).get(0) | ${list[0]} |
Map n = new HashMap("title", "제목"); request.setAttribute("n", n); |
((Map)request.getAttribute("n")).get("title") | ${n.title} |
EL이 저장 객체에서 값을 추출하는 순서에는 우선 순위가 있다.
page > request > session > application |
위 순서로 추출하며 상위 저장 객체에 저장된 값을 먼저 추출한다.
때문에 동일한 이름의 변수가 존재할 때는 정확하게 원하는 값을 출력하기 위해서 사용하는 내장 객체가 존재한다.
내장 객체 | 설명 |
pageScope | Page 영역의 생명 주기에서 사용되는 저장소 |
requestScope | Request 영역의 생명 주기에서 사용되는 저장소 |
sessionScope | Session 영역의 생명 주기에서 사용되는 저장소 |
applicationScope | Application 영역의 생명 주기에서 사용되는 저장소 |
param | 파라미터 값을 저장하고 있는 저장소 (?cnt=3 << 3 param) |
paramValues | 파라미터 값을 배열로 저장하고 있는 저장소 |
header | Header 정보를 저장하고 있는 저장소 |
headerValues | Header 정보를 저장하고 있는 저장소 |
cookie | 쿠키 정보를 저장하고 있는 저장소 |
initParam | 컨텍스트의 초기화 파라미터를 저장하고 있는 저장소 |
pageContext | 페이지 범위의 컨텍스트 저장소 |
사용법 ex)
${requestScope.cnt}
-request 저장소에서 저장 중인 cnt 변수를 사용
pageContext는 page 내에서 사용할 수 있는 servlet 객체들(request,session,application 등등)을 모아놓았다.
자체적으로 저장소 기능도 갖추고 있어 setAttribute, getAttribute 또한 가능하다
EL에서는 함수를 호출하는 방식은 사용할 수 없고, 속성을 사용하는 것처럼 써야하나 pageContext의 getter는 사용할 수 있다. 다만 사용할 때는 get 명령어와 생성자호출()은 제외하고 작성해야 한다.
사용법 ex)
${pageContext.request.method}
위는 아래의 JSP를 사용한 java 코드와 같은 기능을 한다.
<%=pageContext.getRequest().getMethod()%>
< EL 연산자 > |
[] .
()
not ! empty
* / div % mod
+ -
< > <= >= lt gt le ge
== != eq ne
&& and
|| or
? :
굳이 < > 대신 lt gt (less then, greater then) 등 문자형 비교연산자를 사용하는 이유 |
EL은 JSP에서 쓰이는데 HTML이 꺽음쇠를 무조건 사용해서 직관성이 떨어진다.
또한 XHTML 기반의 문서나 HTML을 엄격한 구문으로 파악하는 구조로 만들면 기호형 연산자는 허용하지 않고
오류를 일으킬 가능성이 있다.
(그래도 오류가 없다면 편한 기호형을 쓰자)
empty 연산자는 자주쓰임 |
ex)
EL | Java | Browser | return |
empty param.n | param.n == null || param.n == "") | (url || url?n=) | true |
not empty param.n | !(param.n == null || param.n == "") | (url?n=3) | true |
ex2 삼항연산)
${empty param.n?'값이 비어 있습니다.':param.n}
결과 값 예제 |
EL Expression | Result |
${1 > (4/2)} | false |
${4.0 >= 3} | true |
${100.0 == 100} | true |
${(10*10) ne 100} | false |
${'a' < 'b'} | true |
${'hip' gt 'hit'} | false |
${4 > 3} | true |
${1.2E4 + 1.4} | 12001.4 |
${3 div 4} | 0.75 |
${10 mod 4} | 2 |