Servlet&JSP

EL표기법

odong2 2022. 8. 31. 13:00

EL(expression Language) 란?

표현 언어(EL)는 값을 웹 페이지에 표시하는 데 사용되는 태그로 JSP출력에 대한 부분을 쉽게 하기 위해 개발된 태그이다.

표현식 <%= %>에 비해 사용 방법이 더 간단하고 문법 체계가 더 직관적이라는 특징이 있다.

EL 사용법은 ${ } 을 사용한다.

 

글을 정리하면서 느낀  EL의 가장 큰 장점은 JSP내장 객체의 속성 값들을 간편하게 꺼내 쓸 수 있게 끔 해주는 것이라고 생각한다. 

밑의 내용들을 살펴보면서 EL의 특징들을 조금 더 자세히 살펴보자.

 

EL에서 null의 경우 공백을 출력한다

${null}  // ""이므로 공백 출력
{%= null %} // null 출력

 

이로인해 request.getParameter() 메서드를 호출하였을 때 파라미터를 찾지 못할 경우 null값을 리턴 받아 예외가 발생하지만 EL의 param객체를 사용하여 ${param}을 호출하면  null이 아닌 공백이 출력되므로 예외가 발생하지 않아 예외처리를 따로 하지 않아도 된다는 특징을 가진다.

 

 

EL 수치데이터 

// expression 방식(표현식)
<%
 	String str1 = request.getParameter("num1");
 	String str2 = request.getParameter("num2");
	
	int num1 = Integer.parseInt(str1);
	int num2 = Integer.parseInte(str2);
%>
<%=num1%> + <%=num1%> = <%=num1 + num2%>

-----------------------------------------------
// El 방식
${param.num1} + ${param.num2} = ${param.nuim1+param.num2}

request.getParameter는 리턴형이 String형이기 때문에 산술 연산을 위해서 int형으로 변환해야 한다.

하지만 EL로 표현할 경우 형변환을 할 필요가 없다.

EL에서는 문자열인 숫자를 피연산자로 연산 작업 및 비교연사자를 사용하면 문자열이 숫자로 자동 형변환 된다는 특징을 가진다. ex) "1" + 1 = 2,  "3" > 1 = true 

그리고 null의 경우 null이 피연산자로 사용되어 연산 작업이 이루어 질 때 0으로 변환된다. ex) null + 1 = 1

 

EL 연산자 목록

종류 연산자
산술 +, -, *,  / (div), % (mod)
관계형 == (eq), != (ne), < (lt), > (gt), <= (le), >= (ge)
조건 a ? b : c
논리 && (and) , || (or), ! (not)
null 검사 empty

ex) ${3+5}   → 8 출력

ex) ${empty name} → name이 null인 경우 true 출력

ex) ${5 div 2} →  2.5 출력

ex) \{5 mod 2} → 1 출력

EL식 앞에  \를 덧붙이면 표현 언어가 아닌 단순 문자열로 인식되어 EL식이 그대로 출력된다.

그리고 자바와 또 다른 점은 5 / 2를 하였을 때 정수 2가 아닌 실수 2.5가 출력된다는 것이다.

 

 

⭐EL과 표현식(expression)의 차이

ex ) 표현식 : <%= name %> - 자바의 변수 이름
ex ) EL : ${name} - 속성 이름

위에서 언급하는 속성이란 JSP 내장 객체에서 정보를 주고받기 위한 메서드로 관리되는 정보를 의미한다.

즉 스코프에 저장된 각 속성들을 의미하는 것이다.

그러므로 request.getAttribute("id")와 같이 긴 문장을 ${param.id}와 같이 간편하게 사용 가능하다.

위와 같이 scope를 생략하고 param.id를 사용하였을 경우 가장 좁은 범위인 page → request → session → application 순으로 속성을 뒤져본다.

 

표현 언어의 내장 객체

속성 JSP 내장 객체 서블릿 클래스 표현언어의 내장 객체
page 속성 pageContext javax.servlet.jsp.JspContext pageScope
request 속성 reqeust javax.servlet.ServletRequest requestScope
sessions 속성 session javax.servlet.http.HttpSession sessionScope
application 속성 application javax.servlet.ServletContext applicationScope

내장 객체 접근하기

                자바                                                                EL
pageContext.getAttribute("name");      →     ${pageScope.name}
request.getAttribute("name");              →     ${requestScope.name}
session.getAttribute("name");              →     ${sessionScope.name}
application.getAttribute("name");         →     ${applicationScope.name}

 

EL로 내장 객체에 접근하여 속성 값을 가져오는 것이 더 간결하고 코드도 더 직관적이다.

스코프(내장객체)를 명시하지 않고 ${name}이라고 사용하는 것도 가능하다.

이와 같은 경우는 다음과 같은 순서로 자동으로 검색해서 속성 값을 얻어와 출력한다.

pageScope      requestScope      sessionScope   →   applicationScope

가장 좁은 범위부터 속성을 찾고 없으면 더 넓은 범위로 이동하면서 속성을 찾아나가게 된다.

만약 속성 값을 찾지 못하 더 다로 위해서 설명한 바와 같이 EL은 null값을 공백으로 출력하기 때문에 예외가 발생하지 않는다.

 

EL의 속성 접근법

1)   .(닷 연산자)로 접근                → ${sessionScope.id}
2)   [" "] (브라켓 연산자)로 접근      → ${sessionScope["id"]