본문 바로가기
back-end/sevlet+ jsp+MVC

EL(Expression Language)

by 모두의 향연 2022. 4. 10.
728x90
반응형

1. EL(Expression Language)이란?

  • EL은 표현을 위한 언어로 JSP 스크립트의 표현식('<% %>')을 대신하여 속성 값을 쉽게 출력하도록 고안된 language 이다
  • 즉 표현식 (<%= %>)를 대체할 수 있다
  • EL 표현식에서 도트 연산자 왼쪽은 반드시 java.util.Map 객체 또는 Java Bean 객체여야 한다(Dto(name,val)=Map(key,val))
  • EL 표현식에서 도트 연산자 오른쪽은 반드시 맵의 키이거나 Bean 프로퍼티여야 한다(get/set을 빼고 첫문자를 대문자로 한게 프로퍼티. 프로퍼티는 전역변수의 이름이 아니라 getter/setter의 이름을 딴다)

 

2. EL에서 제공하는 기능

  • JSP의 네가지 기본 객체가 제공하는 영역의 속성 사용(request,pageContext,session,application)
  • 자바 클래스 메소드 호출 기능
  • 표현 언어만의 기본 객체 제공
  • 수치, 관계, 논리 연산 제공

 

3. EL 문법

  • 스크립트릿 → EL
<%= ((com.ssafy.model.MemberDto)request.getAttribute(“userinfo")).getZipDto().getAddress() %>
↓
${userinfo.zipDto.address}

 

  • [EL 문법] Map을 사용하는 경우
${ Map . Map의 키 }

 

  • [EL 문법] Java Bean을 사용하는 경우
${ Java Bean . Bean 프로퍼티 }

 

 

4. EL 문법 : [ ] 연산자

  • EL에는 Dot 표기법 외에 [ ] 연산자를 사용하여 객체의 값에 접근할 수 있다
  • [ ] 연산자 안의 값이 문자열인 경우, 이것은 맵의 키가 될 수도 있고, Bean 프로퍼티나 리스트 및 배열의 인덱스가 될 수 있다
  • 배열과 리스트인 경우, 문자로 된 인덱스 값은 숫자로 변경하여 처리합니다
  • [] 연산자를 이용한 객체 프로퍼티 접근
${userinfo["name"]}
  • Dot 표기법을 이용한 객체 프로퍼티 접근
${userinfo.name}
  • 리스트나 배열 요소에 접근
// Servlet
String[] names = {"홍길동", "이순신", "임꺽정"};
request.setAttribute("userNames", names);
// JSP
${userNames[0]} // 홍길동 출력.
${userNames["1"]} // 문자열인 인덱스 값이 숫자로 바뀌어 userNames[1]의 결과인 이순신 출력

 

 

5. EL 내장객체: EL 내장객체는 JSP 페이지의 EL 표현식에서 사용할 수 있는 객체

category identifier Type description
JSP pageContext Java Bean 현재 페이지의 프로세싱과 상응하는 PageContext instance
범위 (scope) pageScope Map page scope에 저장된 객체를 추출
requestScope Map request scope에 저장된 객체를 추출
sessionScope Map session scope에 저장된 객체를 추출
applicationScope Map application scope에 저장된 객체를 추출
요청 매개변수 param Map ServletRequest.getParameter(String)을 통해 요청 정보를 추출.
paramValues Map ServletRequest.getParameterValues(String)을 통해 요청 정보를 추출
요청 헤더 header Map HttpServletRequest.getHeader(String)을 통해 헤더 정보를 추출
headerValues Map HttpServletRequest.getHeaders(String)을 통해 헤더 정보를 추출
쿠키 cookie Map HttpServletRequest.getCookies()를 통해 쿠키 정보를 추출
초기화 매개변수 initParam Map ServletContext.getInitParameter(String)를 통해 초기화 파라미터를 추출

 

 

6. EL 사용

  • pageContext를 제외한 모든 EL 내장 객체는 Map이다
  • 그러므로 key와 value의 쌍으로 값을 저장하고 있다
  • 기본 문법
${ expr }

 

 

7. EL에서 객체 접근

request.setAttribute(“userinfo”, “안효인”);
1. ${requestScope.userinfo}
2. ${pageContext.request.userinfo} 
3. ${userinfo}

단, 3번은 property이름만 사용 할 경우 자동으로 pageScope > requestScope > sessionScope > applicationScope 순으로 객체를 찾음(속도가 느려질수도 있음)

url?name=안효인&fruit=사과&fruit=바나나
1. ${param.name}
2. ${paramValues.fruit[0]}.${paramValues.fruit[1]}
[EL에서 request 객체 접근]
Method is : ${pageContext.request.method}

// Servlet
request.setAttribute("ssafy.user", memberDto);

// Case #1 : 에러
${ssafy.user.name} // ssafy라는 속성은 존재하지 않음

// Case #2 : request 내장객체에서 []연산자를 통해 속성 접근
${requestScope["ssafy.user"].name}

 

${cookie.id.value}
1. Cookie가 null이라면 null return
2. null이 아니라면 id를 검사 후 null이라면 null return
3. null이 아니라면 value값 검사 ※ EL은 값이 null이라도 null을 출력 하지 않는다. (공백)

[스크립트릿을 통한 쿠키 값 출력]
Cookie[] cookies = request.getCookies();
for(Cookie cookie : cookies) {
if(cookie.getName().equals("userId")) {
out.println(cookie.getValue());
}

[EL 내장객체를 통한 쿠키 값 출력]
${cookie.userId.value}

 

 

8. EL Operator(연산자): 대부분 java와 동일

  description
산술 +, -, *, / (div), % (mod)
관계형 == (eq), != (ne), < (lt), > (gt), <= (le), >= (ge)
3항 연산 조건 ? 값1 : 값2
논리 && (and), || (or), ! (not)
타당성검사 empty
※ empty 연산자에서 true를 return 하는 경우. >> ${empty var}
1. 값이 null이면 true
2. 값이 빈 문자열("") 이면 true
3. 길이가 0인 배열([]) 이면 true
4. 빈 Map 객체는 true
5. 빈 Collection 객체이면 true

 

 

9. EL에서 객체 method 호출

<%
List<MemberDto> list = dao.getMembers();
request.setAttribute(“users”, list);
%>

회원 수 : ${ requestScope.users.size() }, ${ users.size() }

※ 주의!! ${ users.size } == <%= request.getAttribute(“users”).getSize() %>

728x90
반응형

'back-end > sevlet+ jsp+MVC' 카테고리의 다른 글

JSTL (JSP Standard Tag Library)  (0) 2022.04.10
HttpSession/Cookie  (0) 2022.04.09
servlet  (0) 2022.04.07
JSP(Java Server Page)  (1) 2022.04.04