EL(Expression Language)
jsp에서 지시자 태그 대신 템플릿처럼 사용할 수 있는 표현법
기본형
${ } 표현식 { } 안에 값을 넣는다.
연산자
기본 표현식 안에 여러 연산자를 사용하여 값이나 객체를 연산할수 있다.
산술연산자 + - * / % ( /연산은 소수점까지 표현된다. /0 연산도 가능하다. 값은 무한으로 출력)
정수 실수간 연산이 자연스럽게 가능하다.
비교연산자 ==(eq), !=(ne), <(lt), >(rt), <=(le), >=(re)
<, > 는 jsp에서 태그로 인식할수 있다.
따라서, html 범위에서는 >(>) , <(<) 와 같이 표시해줘야 태그로 인식하지 않고
특수문자인 >, <가 출력된다.
숫자 비교 뿐 아니라, 문자의 크기비교도 가능하다. 'ab' < 'bb' == true
또한 문자형 숫자 '2' 와 숫자형 숫자도 비교가 가능하다. '2' = 2 == true
a > b ? true : false 식의 3항 연산자도 사용이 가능하다.
관계연산자 &&, ||, !
Null 연산 empty (값이 null이거나 공백)
EL Inner Object
아래 표현식을 사용할때도 당연히 request에 Charset 엔코딩을 맞춰야 한다.
pageScope page범위내에 사용하는 하는 내장객체 (객체이름이 pageScope이다.)
requestScope request 범위의 객체
sessionScope session 범위의 객체
applicationScope application 범위의 객체
*** EL과 java의 중요한 차이점은 만약 배열이 arr[3] 이 없다면 java에선 객체 접근 시도시 예외가 발생하는 반면
EL에선 없는 값(null)을 그냥 공백처럼 처리한다.
Parameter
${param.name} parameter name의 값을 가져온다. == request.getParameter("name");
${paramValues.name} 값들을 가져온다. (name이 같은 객체가 여럿일 때 ) == .getParameterValues("name");
Header
${header.a} header a 값을 가져옴 == request.getHeader("a");
${headerValues.a} header 정보들을 가져옴 == .getHeaderValues("a");
pageContext
${pageContext.request.requestURI} == request.
EL Inner Object 데이터 호출
EL 에서 ${num} 과 같이 어떤 참조변수에 접근할땐, java코드와 같이 변수나 객체에 직접 접근이 아닌, 내장객체에 저장되어 있는 '속성'에 접근한다.
속성은 내장객체인 pageContext, request, session, application에 Attribute로 저장되어 있는데,
객체명을 생략하고 호출도 가능하지만, 여러 내장객체에 같은 속성명으로 저장되어 있다면
pageScope -> requestScope -> sessionScope -> applicationScope 순으로 우선순위를 갖는다. (좁은범위 우선)
parameter 호출
${param.name} 리턴되는 값은 getParameter() 와 달리 String타입이 아니라 저장된 타입으로 가져와진다.
form 태그로 넘어오는 값이 int 타입이라면 그대로 연산이 가능.
단일 데이터 호출
${requestScope.name} request에서 name이라는 파라미터의 값을 가져온다. == request.getParameter("name");
${ sessionScope.name }
복수(=배열) 데이터 호출
${requestScope.arr[0]} request에 arr이라는 이름으로 저장된 배열의 0번째 값 리턴
== request.getParameter("arr")[0]
${ sessionScope.list[0] }
Map type 데이터 호출
request.setAttribute("data", map) 으로 속성을 저장했다면.
${ requestScope.data.key1} 와같이 호출하면 해당 키와 맵핑되어 있는 value가 리턴된다.
${ requestScope.data.key2}
or
${ requestScope.data["key3"] } [ 키값 ] 과 같이 도 호출이 가능.
DTO(객체) 변수 접근
request.setAttribute("member", member1) 로 속성을 저장했다면,
${member.name} 인스턴스 변수 name을 가져온다.
or
${member["name"]} 인스턴스 변수 name을 가져온다.
객체에 필드를 바로 호출하기 위해선 반듯이 객체의 변수(ex name) 에 대한 getter 가 구현되어 있어야한다.
실제로 호출시에는 객체의 변수에 직접접근이 아닌 변수를 받을 수 있는 getter 메서드를 호출하는 것.
${member} member에 toString() 메서드를 호출해서 출력한다.
Map-객체 이용
** 만약 Map에 key와 맵핑되는 value가 객체라면, 속성이름(맵).키값.변수명 으로 연속해서 기입해줘 호출도 가능하다.
${ requestScope.data.m1.name }
속성명 data 맵에서 key명이 m1에 맵핑되는 value가 객체member이고.
member 객체가 갖는 name이라는 변수의 값을 리턴한다.
'JSP+Servlet' 카테고리의 다른 글
5.내장객체 session, cookie (0) | 2020.01.09 |
---|---|
7.JSTL (Java Standard Tag Library) (0) | 2020.01.08 |
3.JSP (0) | 2020.01.08 |
4.내장객체 Request, Response (0) | 2020.01.08 |
2.Servlet (0) | 2020.01.08 |