Development/Java

JSP EL(Expression Language) #6

evagrim 2022. 8. 14. 07:50

 

< 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