: 표현언어는 JSP 2.0 버전부터 JSP에 포함되었다. 정리한 이 내용은 JSP2.3과 쌍을 이루는 표현언어 버전 3.0이다.
표현언어는 값을 표현할 때 사용하는 스크립트 언어로, JSP의 스크립트 요소를 보완하는 역할을 한다.
1) JSP의 네 가지 기본 객체가 제공하는 영역의 속성을 사용
2) 수치 연산, 관계 연산, 논리 연산자 제공
3) 자바 클래스 메서드 호출 기능 제공
4) 쿠키, 기본 객체의 속성 등 JSP를 위한 표현언어의 기본 객체 제공
5) 람다식을 이용한 함수 정의와 실행 (EL 3.0)
6) 스트림 API를 통한 컬렉션 처리 (EL 3.0)
7) 정적 메서드 실행 (EL 3.0)
실제 프로젝트에서는 표현식보다 표현 언어를 사용하는 것이 더 간결하고 이해가 쉽기때문에 표현언어를 주로 사용한다.
${표현식}
: EL은 액션태그나 JSTL의 속성값으로 사용할 수 있다. 스크립트 요소(스크립트릿, 표현식, 선언부)를 제외한 나머지 부분에서 사용될 수 있으며, EL을 통해 표현식보다 편리하게 값을 출력할 수 있다.
${expr}은 구문을 분석할 때 곧바로 값을 계산한다.
<%
Person p = new Person();
p.setName("이름1");
%>
<c:set var="p" value="<%= p %>" />
<c:set var="name" value="${p.name}"/>
<% p.setName("이름2"); %>
${name}
위의 코드를 실행하면 <c:set var="name" value="${p.name}"/> 시점에 바로 값을 계산해 저장하므로 ${name}의 값은 "이름1"이 된다.
: EL은 일종의 스크립트 언어로 자료타입, 수치 연산자, 논리 연산자, 비교 연산자 등을 제공한다.
: JSP는 EL에서 사용할 수 있는 기본 객체를 제공한다. 이 객체를 이용해 요청 파라미터나 세션 속성값 등을 표현언어에서 사용할 수 있다.
기본객체 | 설명 |
---|---|
pageContext | JSP의 page 기본객체와 동일 |
pageScope | pageContext 기본객체에 저장된 속성의 <속성, 값> 매핑을 저장한 Map객체 |
requestScope | request 기본 객체에 저장된 속성의 <속성, 값> 매핑을 저장한 Map객체 |
sessionScope | session 기본 객체에 저장된 속성의 <속성, 값> 매핑을 저장한 Map객체 |
applicationScope | application 기본 객체에 저장된 속성의 <속성, 값> 매핑을 저장한 Map객체 |
param | 요청 파라미터의 <파라미터 이름, 값> 매핑을 저장한 Map객체. 파라미터 값 타임은 String이고, request.getParameter(이름) 결과와 동일. |
paramValues | 요청 파라미터의 <파라미터이름, 값 배열> 매핑을 저장한 Map객체. 값 타입은 String[]으로 request.getParameterValues(이름)의 결과와 동일. |
header | 요청 정보의 <헤더이름, 값 배열> 매핑을 저장한 Map객체. request.getHeader(이름)결과와 동일 |
headerValues | 요청 정보의 <헤더이름, 값 배열> 매핑을 저장한 Map객체. request.getHeaders(이름) 결과와 동일 |
cookie | <쿠키이름, Cookie> 매핑을 저장한 Map객체. request.getCookies()로 구한 Cookie 배열로부터 매핑을 생성 |
initParam | 초기화 파라미터의 <이름, 값> 매핑을 저장한 Map객체. application.getInitParameter(이름) 결과와 동일 |
: EL언어는 객체에 저장된 값에 접근할 때 점(.)이나 대괄호([])를 사용한다.
<표현1>.<표현2>
<표현1>[<표현2>]
예시
${cookie.ID.value}
수치 연산자는 정수 타입과 실수 타입에 대해서만 동작한다. 숫자 타입과 객체를 수치 연산자와 함께 사용할 경우 해당 객체를 숫자로 변환한 후에 연산을 수행한다.
: empty 연산자는 검사할 객체가 빈 객체인지 검사할 때사용한다.
empty <값>
<수식> ? <값1> : <값2>
<수식> 결과값이 true이면 <값1>리턴, false이면 <값2> 리턴
+= 연산자로 문자열을 연결할 수 있다.
사용예시
<% request.setAttribute("title", "JSP 프로그래밍"); %>
${"문자" += "열" += "연결"} -> "문자열연결"
${"제목 : " += title } -> "제목 : JSP 프로그래밍"
: 이전버전까지는 스크립트릿을 이용해 List 객체를 생성해야했다.
EL3.0 부터는 EL식에서 직접 List, Map, Set타입의 객체를 생성할 수 있게 되었다.
[원소1, 원소2, 원소3]
<c:set var="vals" values="${[1, 2, 3]}" />
변수명[인덱스]
${vals[2]} -> 3
{'name':'홍길동, 'age':20}
<c:set var="mem" value="${ {'name':'홍길동, 'age':20} }" />
${mem.name}
{원소1, 원소2}
<c:set var="hangul" value="${ {'가', '나'} }" />
${hangul}
: 세미콜론 연산자를 사용해 두 개의 식을 붙일 수 있다.
${A ; B} 는 A값을 출력하지 않고 B 값만 출력한다.
: 이전까지 EL변수를 생성할 경우 둘 중 하나를 사용한다
<% request.setAttribute("val1", 10L); %>
<c:set var="val1" value="${10}" />
이를 EL3.0 버전은 다음과 같이 할당할 수 있다.
${val1 = 10}
하지만 할당 연산자는 출력 결과를 생성하기 때문에 결과를 응답 결과에 포함시키지 않고 싶을 경우 세미콜론 연산자를 사용해 빈 문자열을 결과로 출력할 수 있다.
${val1 = 10;''}