관리 메뉴

Just Do it

표현언어 EL (Expression Language) 기초 본문

신입 개발자가 되기 위해 공부했던 독학 자료들/JSP

표현언어 EL (Expression Language) 기초

Seojoo21 2022. 2. 6. 12:32

*출처: CHAPTER 11 표현 언어(Expression Language), 최범균의 JSP 2.3 웹 프로그래밍 기초부터 중급까지, 최범균, 가메출판사

 

0. EL의 구성

-EL은 다음과 같이 $와 괄호 {} 그리고 표현식을 사용하여 값을 표현한다. expr 부분에는 포현 언어가 정의한 문법에 따라 값을 표현하는 식이 온다. 

예) ${expr}

- EL은 액션 태그나 JSTL의 속성값으로 사용할 수 있다.

예)<jsp: include page="/module/${skin.id}/header.jsp" flush="true"/>

- 액션 태그나 커스텀 태그뿐만 아니라 비스크립트 요소 부분에서도 값을 출력하기 위해 사용할 수 있다.

예) <b>${sessionScope.member.id}</b>님 환영합니다. 

-EL은 JSP의 스크립트 요소(스크립트릿, 표현식, 선언부)를 제외한 나머지 부분에서 사용될 수 있으며 EL을 통해서 표현식보다 편리하게 값을 출력할 수 있다. 

 

1. EL 의 데이터 타입과 리터럴

EL은 Boolean 타입, 정수 타입, 실수 타입, 문자열 타입, 널 타입 총 5가지 타입을 제공하며 자바 기본형 타입의 표현 방식과 동일하다고 보면 된다.

 

2.  EL의 기본 객체

JSP는 EL에서 사용할 수 있는 기본 객체도 제공하고 있다. 이 객체를 이용해서 요청 파라미터나 세션 속성값 등을 표현 언어에서 사용할 수 있다. 

 

기본 객체 설명
pageContext JSP의 pageContext 기본 객체와 동일하다
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(이름)의 결과와 동일하다.

사용 예)

${pageScope.NAME} : page 영역에 저장된 name 속성의 값을 출력한다.

${param.code}: 이름이 code인 요청 파라미터의 값을 출력한다. code 요청 파라미터가 존재하지 않으면 아무것도 출력되지 않는다. 

 

3. EL 의 연산자 (수치, 비교, 논리, empty)  

자바 연산자와 완전히 동일하지만 아래와 같이 차이점이 있어 사용에 유의해야한다.

 

예) "1"+1 

- EL에서 + 연산자는 수치 연산자이므로 앞에 "1" 이 숫자로 바뀌어 위의 값은 문자열 "11" 이 아니라 숫자 2로 출력된다.

 

- null과 빈 문자열은 0으로 바뀌어 연산된다.

 

- 비교 연산자와 논리 연산자는 모두 자바 언어와 동일하다.

 

- empty 연산자는 검사할 객체가 텅 빈 객체인지를 검사하기 위해 사용한다. empty 연산자는 다음과 같이 사용한다. 값이 비어있으면 true를 리턴한다. 

empty<값> 

 

4. 문자열 연결

자바에서 "문자"+"열"의 연산 결과는 String 타입의 "문자열"이지만, EL에서 "문자"+"열"의 결과는 에러다. EL에서 +연산자는 피연산자를 숫자로 변환한 뒤에 연산을 수행하는데, "문자"나 "열"은 숫자로 변환할 수 없기 때문에 에러가 발생하는 것이다.

 

그 전까지는 문자열 연결이 지원되지 않았으나 EL 3.0 버전에 문자열 연결을 위한 += 연산자가 추가됐다. 이 연산자를 사용하면 다음과 같이 EL에서 문자열을 연결할 수 있다.

 

예) <% request.setAttribute("title", "JSP 프로그래밍"); %>

${"문자"+="열"+="연결"}              // "문자열연결"

${"제목: "+= title}                         // "제목: JSP 프로그래밍" 

 

5.  할당 연산자 (EL에서 변수 생성하기)  

EL은 지역 변수를 사용할 수 없다. 그래서 변수를 생성하기 위해서는 다음의 두 코드 중 하나를 사용해야 한다.

 

<% request.setAttribute("varl", 10L); %>

또는

<c:set var="varl" value=${10} />        

// <c:set> 태그는 JSTL에서 제공하는 태그로 EL에서 사용할 수 있는 변수를 생성해주는 기능을 제공한다.  

 

 

6. 특수 문자 처리하기

자바에서 따옴표(", ')를 처리할 때 앞에 역슬래쉬(\)를 붙이듯이 EL에서도 ${와 #{을 사용할 떄는 앞에 역슬래쉬를 붙여주면 된다.

예) \${

      \#{