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 |