[Servlet_JSP] EL

2024. 4. 8. 02:04BE/Servlet_JSP

1. EL이란?

 

JSP의 표현식 <%= %>를 대신해서 속성 값을 쉽게 출력하도록 고안된 언어다.

 

EL 표현식의 도트 연산자()의…

  • 왼쪽은 반드시 java.util.Map 객체 또는 java Bean 객체여야 한다.
  • 오른쪽은 반드시 맵의 key값이거나 bean의 property여야 한다.

 

EL에서 제공하는 기능

  • JSP가 제공하는 웹 스코프 활용(page, request, session, application)
  • 자바 클래스 메서드 호출
  • 표현 언어만의 기본 객체 제공
  • 수치, 관계, 논리 연산 제공

 


2. 문법

 

${ expr }

 

특정 스코프 영역을 설정할 수도 있다.

 

스코프 영역을 비워두면 자동으로 pageScoperequestScopesessionScopeapplicationScope 순으로 확인한다.

 

프로퍼티나 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} 

별도의 Scope가 지정되지 않으면 pageScope > requestScope > sessionScope > applicationScope 순으로 접근한다.

 

<%
List<MemberDto> list = dao.getMembers();
request.setAttribute("users", list);
%>
-> ${requestScope.users.size()}

당연히 메서드도 호출할 수 있다.

 

 

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인 경우
    • varnull
    • var이 빈 문자열 “”
    • 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> <!-- 추천 -->

 

${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> <!-- 가능 -->

 

JSP에서 선언한 변수를 곧바로 EL에서 사용할 수는 없다.

 

EL과 JSP는 분리된 영역을 가진다.

 

pageContext, page, request, session, application scope를 통해서 상호작용할 수 있다.

 


'BE > Servlet_JSP' 카테고리의 다른 글

[Servlet_JSP] JSTL  (0) 2024.04.08
[Servlet_JSP] JSP  (0) 2024.04.01
[Servlet_JSP] Cookie&Session  (0) 2024.03.31
[Servlet_JSP] Servlet  (0) 2024.03.31