2024. 4. 8. 02:04ㆍBE/Servlet_JSP
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}
별도의 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
인 경우var
이null
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 |