good_da22 's devLog

Back-End/Web Server

EL (Expression Language)

good_da22 2022. 9. 20. 00:17

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", "홍길동");

  1. ${requesetScope.userinfo}
  2. ${pageContext.request.userinfo} , ${userinfo}

url?name=홍길동&fruit=사과&fruit=바나나

  1. ${param.name}
  2. ${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}

  1. Cookie가 null이라면 return null
  2. null이 아니라면 id를 검사 후 null 이라면 return null
  3. 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}

  1. 값이 null이면 true
  2. 값이 빈 문자열("")이면 true
  3. 길이가 0인 배열([])이면 true
  4. 빈 Map 객체이면 true
  5. 빈 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