EL (Expression Language)
EL 은 표현을 위한 언어로 JSP 스크립트의 표현식을 대신하여 속성 값을 쉽게 출력하도록 고안된 language
표현식 <%= %>
대체 가능
EL 표현식에서 도트 연산자 왼쪽은 반드시 java.util.Map 객체 또는 Java Bean 객체여야 한다.
EL 표현식에서 도트 연산자 오른쪽은 반드시 맵의 키이거나 Bean의 프로퍼티여야 한다.
EL 에서 제공하는 기능
- JSP의 네가지 기본 객체가 제공하는 영역의 속성 사용
- 자바 클래스 메소드 호출 기능
- 표현 언어만의 기본 객체 제공
- 수치, 관계, 논리 연산 제공
EL 문법
EL에서는 Dot 표기법 외에 [] 연산자를 사용하여 객체의 값에 접근할 수 있다.
[] 연산자 안의 값이 문자열인 경우, 맵의 키가 될 수도 있고, Bean 프로퍼티나 리스트 및 배열의 인덱스가 될 수 있다.
배열과 리스트인 경우, 문자로된 인덱스 값은 숫자로 변경하여 처리한다.
[] 연사자를 이용한 객체 프로퍼티 접근
${userinfo["name"]}
Dot 표기법을 이용한 객체 프로퍼티 접근
${userinfo.name}
리스트나 배열 요소에 접근
// Servlet
String[] names = {"name1", "name2", "name3"};
request.setAttribute("userNames", names);
// JSP
${userNames[0]} // 홍길동
${userNames["1"]} // 문자열인 인덱스 값이 숫자로 바뀌어 userNames[1]의 결과인 이순신 출력
EL 내장 객체
pageContext : JSP, Java Bean, 현재 페이지의 프로세싱과 상응하는 PageContext instance
pageScope : 범위(scope), Map, page scope에 저장된 객체를 추출
requestScope : 범위(scope), Map, request scope에 저장된 객체를 추출
sessionScope : 범위(scope), Map, session scope에 저장된 객체를 추출
applicationScope : 범위(scope), 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)를 통해 초기화 파라미터를 추출
EL 사용
pageContext를 제외한 모든 EL 내장 객체는 Map
key와 value의 쌍으로 값을 저장
${expr}
EL에서 객체 접근
property 이름만 사용 할 경우 자동으로 pageScope > requestScope > sessionScope > applicationScope 순으로 객체를 찾는다.
property는 getter / setter 메소드 이름에서 앞글자를 소문자로 사용, ex) getName, setName의 property는 name
request.setAttribute("userinfo", "홍길동");
${requesetScope.userinfo}
${pageContext.request.userinfo}
,${userinfo}
url?name=홍길동&fruit=사과&fruit=바나나
${param.name}
${paramValues.fruit[0]} , ${paramValues.fruit[1]}
request 객체 접근
// Servlet
request.setAttribute("user.info", memberDto);
// Case #1 : error
${user.info.name} // user라는 속성은 존재하지 않는다.
// Case #2 : request 내장객체에서 [] 연산자를 통해 속성 접근
${requestScope["user.info"].name}
${cookie.id.value}
- Cookie가 null이라면 return null
- null이 아니라면 id를 검사 후 null 이라면 return null
- null이 아니라면 value 값 검사
EL은 값이 null이라도 null을 출력하지 않는다.(공백)
// Scriptlet을 통한 Cookie 값 출력
Cookie[] cookies = request.getCookies();
for(Cookie cookie : cookies){
if(cookie.getName().equals("userId")) {
out.println(cookie.getValue());
}
}
// EL 내장 객체를 통한 Cookie 값 출력
${cookie.userId.value}
EL Operator(연산자)
산술, 관계형, 3항 연산, 논리 대부분 java와 동일
타당성 검사 : empty
empty 연산자에서 true를 return 하는 경우 ${empty var}
- 값이 null이면 true
- 값이 빈 문자열("")이면 true
- 길이가 0인 배열([])이면 true
- 빈 Map 객체이면 true
- 빈 Collection 객체이면 true
EL에서 객체 method 호출
${requestScope.users.size()}
${users.size()}
'Back-End > Web Server' 카테고리의 다른 글
Cookie & Session (1) | 2022.09.20 |
---|---|
JSTL (JSP Standard Tag Library) (0) | 2022.09.20 |
JSP Web Application Architecture (0) | 2022.09.20 |
JSP (Java Server Page) (1) | 2022.09.19 |
Servlet (1) | 2022.09.19 |