1. EL이란?
JSP의 표현식 <%= %>를 대신해서 속성 값을 쉽게 출력하도록 고안된 언어다.
EL 표현식의 도트 연산자()의…
- 왼쪽은 반드시
java.util.Map객체 또는 java Bean 객체여야 한다. - 오른쪽은 반드시 맵의 key값이거나 bean의 property여야 한다.
EL에서 제공하는 기능
- JSP가 제공하는 웹 스코프 활용(page, request, session, application)
- 자바 클래스 메서드 호출
- 표현 언어만의 기본 객체 제공
- 수치, 관계, 논리 연산 제공
2. 문법
${ expr }

특정 스코프 영역을 설정할 수도 있다.
스코프 영역을 비워두면 자동으로 pageScope → requestScope → sessionScope → applicationScope 순으로 확인한다.

프로퍼티나 key에 띄어쓰기라던가 특수 문자가 존재해서 Dot표기법을 사용할 수 없는 경우.
[]을 사용할 수 있다.
3. EL 내장객체
| EL 내장객체 | Type | 설명 |
| pageContext | Java Bean | JSP의 PageContext 객체를 참조. |
| pageScope | Map | page scope에 저장된 객체 추출. |
| requestScope | Map | request scope에 저장된 객체 추출. |
| sessionScope | Map | session scope에 저장된 객체 추출. |
| application | Map | application scope(Servlet 수준)에 저장된 객체 추출. |
JSP의 page, request, session, application이랑은 다른 객체다.
pageContext는 JSP, EL에서 모두 사용할 수 있는 Java Bean이다.
request.setAttribute("user", "kim");
-> ${requestScope.user}
-> ${pageContext.request.user}
-> ${user}
Code language: JavaScript (javascript)
별도의 Scope가 지정되지 않으면 pageScope > requestScope > sessionScope > applicationScope 순으로 접근한다.
<%
List<MemberDto> list = dao.getMembers();
request.setAttribute("users", list);
%>
-> ${requestScope.users.size()}
Code language: PHP (php)
당연히 메서드도 호출할 수 있다.
| EL 내장 객체 | Type | 설명 |
| param | Map | ServletRequest.getParameter(String) |
| paramValues | Map | ServletRequest.getParameterValues(String) |
| cookie | Map | HttpServletRequest.getCookies() |
| 기타 | 등 | 등 |
url?name=kim&age=27&age=98
-> ${param.name}
-> ${paramValues.age[0]}, ${paramValues.age[1]}
4. EL Operator
| 설명 | |
| 산술 | +, -, *, /, div, %, mod |
| 관계형 | ==, eq, !=, ne, <, lt, >, gt, <=, le, >=, ge |
| 3항 연산 | 조건 ? 값1 : 값2 |
| 논리 | && (또는 and), |
| 타당성검사 | empty ???, not empty ??? |
empty 뒤에 명제가 위치한다.
${empty var}가true인 경우var이nullvar이 빈 문자열“”var이 빈 배열{}var이 빈 Map 객체var이 빈 Collection 객체
5. JSP와 EL
JSP에서 request.getContextPath()로 context path를 가져왔었다.
EL로 context path를 가져와 보자.
<p>1. <%= request.getContextPath() %></p>
<p>2. ${ requestScope.contextPath }</p>
<p>3. <%= ((HttpServletRequest)(pageContext.getRequest())).getContextPath() %> </p>
<p>4. ${ pageContext.request.contextPath }</p> <!-- 추천 -->
Code language: HTML, XML (xml)

${pageContext.request.contextPath}
앞으로는 이걸 사용하자
<%
String str = "test";
%>
<p>1. <%= str %></p> <!-- 가능 -->
<p>2. ${str} </p> <!-- 불가능 -->
<!-- pageContext 이용 -->
<% pageContext.setAttribute("str", str); %>
<p>3. ${str} </p> <!-- 가능 -->
<!-- request 이용 -->
<% request.setAttribute("str1", str); %>
<p>4. ${requestScope.str1} </p> <!-- 가능 -->
Code language: HTML, XML (xml)

JSP에서 선언한 변수를 곧바로 EL에서 사용할 수는 없다.
EL과 JSP는 분리된 영역을 가진다.
pageContext, page, request, session, application scope를 통해서 상호작용할 수 있다.