Web/Java+Spring

EL (Expression Language) for JSP

WakaraNai 2021. 5. 10. 18:41
728x90
반응형

EL

값을 표현하는데 사용되는 스크립트 언어. JSP 기본 문법을 보완해줌.

 

제공 기능

  • JSP의 Scope에 맞는 속성 사용
  • 집합 객체에 대한 접근 방법 제공
  • 수치 연산, 관계 연산, 논리 연산자 제공
  • 자바 클래스 메소드 호출 기능 제공
  • Expression language 만의 기본 객체 제공

 

EL의 기본 객체

EL 태그에서 값의 이름이 중복될 때는, 작은 범위의 scope인 pageContext부터 찾기 시작

 

 

EL의 표현 방식

${ 코드 식 }

JSP의 스크립트 요소 (Scriptlet, Expression, Definition) 외의 부분에서 사용 가능.

편리하게 값 출력 가능

 

 

 

EL의 Data type

  • Boolean - true/false
  • 정수 
  • 실수
  • 문자열 - '' 또는 ""
  • null

 

객체 접근 규칙

${ <표현1>.<표현2> }

  • 표현1이나 표현2가 null -> null 반환
  • 표현1이 객체 -> 표현2에 해당하는 getter메소드에, 해당하는 메소드를 호출한 결과를 반환
  • 표현1이 Map (Scope,param,header 관련 객체) -> 표현2를 Key로 한 값을 반환
  • 표현1이 리스트나 배열 and 표현2가 정수 -> 해당 정수번째 index에 해당하는 값을 반환
    • 만약 정수가 아닐 경우 오류 발생

 

EL의 수치 연산자

+, -, * /, %

  • div: 나눗셈,   mod: 나머지
  • 숫자가 아닌 개체와 수치 연산자 사용 시- > 객체를 숫자 값을 변환 후 연산자 수행
    • ${"10" + 1}  ->  ${10+1}
  • 숫자로 변환 불가능한 객체와 수치 연산자를 함께 사용 시 -> 에러 발생
    • ${"열" + 1}  ->  에러
  • 수치 연산자에서 사용되는 객체가 null -> 0으로 처리
    • ${null + 1}  ->  ${0+1}

 

비교 연산자

== eq,  != ne,  < lt,  > gt,   <= le,   >= ge,   

문자열 비교 ${str == "값"} -> str.compareTo("값")==0과 동일

 

논리 연산자

&& and, || or, ! not

 

 

empty 연산자

empty <값>

  • <값>이 null -> true 반환
  • <값>이 빈 문자열 "" -> true 반환
  • <값>이 길이가 0인 배열 -> true 반환
  • <값>이 빈 Map -> true 반환
  • <값>이 빈 Collection -> true 반환
  • 이 외의 경우 -> false 반환

 

연산자 우선순위

  1. [] .
  2. ()
  3. - (단일) not ! empty
  4. * / div % mod
  5. + -
  6. < > <= >= lt gt le ge
  7. == != eq ne
  8. && and
  9. || or
  10. ? :

 

삼항 연산자 (if)

<수식> ? <값1> : <값2>

 

 

 

EL 비활성화 : JSP에 명시하기

  • <%@ page isELIgnored = "true" %>
  • 기본값은 false

 

 

 


 

EL 실습 - Scope 별

el01.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>

<%
	// pageScope와 관련된 값을 객체에 저장
	pageContext.setAttribute("p1", "page scope value");
	request.setAttribute("r1", "request scope value"); // request 객체에 
	session.setAttribute("s1", "session scope value"); // session 객체에
	application.setAttribute("a1", "application scope value"); // application 객체에
%>

<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
  pageContext.getAttribute("p1") : <%= pageContext.getAttribute("p1") %> <br>
  <br>
  pageContext.getAttribute("p1") : ${pageScope.p1 } <br>
  request.getAttribute("s1") : ${requestScope.r1 } <br>
  session.getAttribute("r1") : ${sessionScope.s1 } <br>
  application.getAttribute("a1") : ${applicationScope.a1 } <br>
  <br>
  pageContext.getAttribute("p1") : ${p1 } <br>
  request.getAttribute("s1") : ${s1 } <br>
  session.getAttribute("r1") : ${r1 } <br>
  application.getAttribute("a1") : ${a1 } <br>
</body>
</html>

 

잘 보면 Scope 객체 표시 없이 바로 필드 변수(EL 태그)에 접근

자동적으로 EL 태그에서 값의 이름이 중복 될때는

작은 범위의 Scope인 pageContext부터 찾기 때문에에 생략 가능

가급적이면 가독성을 위해 가운데처럼 scope도 명시적으로 적어주는 것이 좋음

 

 

 

 

EL 실습 - 사칙 연산, 논리/비교 연산, EL 무시

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<!--=<%//@ page isELIgnored = "true" %> -->

<%
	request.setAttribute("k", 10);
	request.setAttribute("m", true);
%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	k: ${k }<br>
 	k + 5 : ${k + 5 }<br>
 	k - 5 : ${k - 5 }<br>
 	k x 5 : ${k * 5 }<br>
 	k / 5 : ${k div 5 }<br>
	<br>
	k: ${k }<br>
	m: ${m }<br>	
	<br>
	k > 5 : ${k > 5 }<br>
 	k < 5 : ${k < 5 }<br>
 	k <= 10 : ${k <= 10 }<br>
 	k >= 10 : ${k >= 10 }<br>
 	!m: ${!m }<br>	
</body>
</html>
EL 무시 - EL을 그저 텍스트로 출력하고 싶을 때

EL 무시 - EL을 그저 텍스트로 출력하고 싶을 때

 

728x90
반응형

'Web > Java+Spring' 카테고리의 다른 글

Maven  (0) 2021.05.13
JSTL (JSP Standard Tag Library)  (0) 2021.05.10
Scope  (0) 2021.05.10
Redirect & Forward  (0) 2021.05.10
JSP  (0) 2021.05.08