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"]
'Servlet&JSP' 카테고리의 다른 글
| 서블릿 URL 패턴 (0) | 2022.09.03 |
|---|---|
| 서블릿 기본객체 저장소 (0) | 2022.09.03 |
| 서블릿 & JSP(생명주기) (0) | 2022.09.03 |