본문 바로가기

JSP

EL 표현식 문법과 사용 방법

JSP - EL 표현식 문법과 사용 방법

 

EL(Expression Language)

 

자바 빈의 프로퍼티, 값을 JSP의 표현식 <%= %>이나 액션 태그 <jsp:useBean>를 사용하는것 보다 쉽고 간결하게 꺼낼수 있게 하는 기술이다.

또한 static 메소드를 호출할 수도 있는데 JSP에서는 주로 서블릿 보관소(JspContext, ServletRequest, HttpSession, ServletContext)에서 값을 꺼낼 때 사용한다.

<%=  %> 대신 사용

스크립트요소 (스크립트릿, 표현식, 선언부)를 제외한 나머지 부분에서 사용

 

주요기능

 

Jsp의 4가지 기본 객체가 제공하는 영역의 속성 사용

집합 객체(set.get..)에 대한 접근 방법 제공

 

EL 표기법

${ }
-가장많이 사용
- JSP가 실행될 때 즉시 반영된다. (Immediate evaluation)
- 객체 프로퍼티 값을 꺼낼때 주로 사용
- 마치 ++a 가 바로 증가하는 것처럼 바로 반영이 가능

 

#{ }

- 시스템에서 필요하다고 판단될 때 그 시점에 그 값을 사용한다. (Deferred evaluation)
- 사용자 입력값을 객체의 프로퍼티에 담는 용도로 주로 사용
- a++ 처럼 즉시가 아닌 추후에 사용하듯이

${member.no} 또는 ${member["no"])

 

위 EL 표현식의 자바 코드는 다음과 같다.

 

1
2
Member obj = (Member) pageContext.findAttribute("member");
int value = obj.getNo();
cs

 

PageContext의 findAttribute()는 서블릿 보관소를 순서대로 모두 뒤져서 객체를 찾는다.

마지막 보관소에도 없다면 null을 반환한다.

 

JspContext → ServletRequest → HttpSession → ServletContext

 

 

<%

    Member m = new Member();

    m.setName("이름1");

%>

<c:set var="m" value="<%= m %>" />

<%-- 이 시점에는 값 생성하지 않음 --%>

<c:set var="name" value="#{m.name}" />

<% m.setName("이름2"); %>

${name} <%-- 사용될 때 값 계산, "이름2" 출력 --%>

<% m.setName("이름3"); %>

${name} <%-- 사용될 때 값 계산, "이름3" 출력 --%>

 

 

 

 

 

 

EL에서 보관소 검색 범위 지정

${member.no} 처럼 보관소를 지정하지 않으면 모든 보관소를 검색하지만 특정 보관소에서만 찾도록 지정할 수 있다.

다음은 EL에서 보관소를 참조할때 사용하는 이름이다.

 

이름 보관소
pageScope JspContext
requestScope ServletRequest
sessionScope HttpSession
applicationScope ServletContext

 

따라서 ${requestScope.member.no}와 같이 쓰면 ServletRequest에서만 해당 객체를 찾는다.

참고로 이는 다음 자바 코드와 같다.

 

1
2
Member obj = (Member) request.getAttribute("member");
int value = obj.getNo();
cs

 

 

 

 

 

EL 기본 객체

다음은 JSP에서 기본으로 제공하는 EL 객체이다.

 


\
객체
설명 코드
pageContext JSP의 PageContext 객체  
servletContext ServletContext 객체 ${pageContext.servletContext.객체명}
session HttpSession 객체 ${pageContext.session.객체명}
request ServletRequest 객체 ${pageContext.request.객체명}
response ServletResponse 객체  
param 요청 매개변수의 값 조회 ${param.매개변수명}
paramValues 요청 매개변수의 값 배열 조회 ${paramValues.매개변수명}
header HTTP 헤더의 값 조회 ${header.헤더명}
headerValues HTTP 헤더의 값 배열 조회 ${headerValues.헤더명}
cookie 쿠키 값 조회 ${cookie.쿠키명}
initParam 컨텍스트 초기화 매개변수의 값 조회 ${initParam.매개변수명}
pageScope page 보관소의 값 조회 ${pageScope.객체명}
requestScope request 보관소의 값 조회 ${requestScope.객체명}
sessionScope session 보관소의 값 조회 ${sessionScope.객체명}
applicationScope application 보관소의 값 조회 ${applicationScope.객체명}

 

 

 

요청 URI: ${pageContext.request.requestURI}

<%= pageContext.getRequest().getRequestURI()%>

 

requestname 속성: ${requestScope.name} <br>

<%--

<%= request.getAttribute("name")%>

--%>

 

code 파라미터: ${param.code}

<%--

<%= request.getParameter("code")%>

--%>

 

 

 

 

 

 

 

EL 데이터 타입

 

불리언(Boolean) 타입 - true false
정수타입 - 0~9로 이루어진 정수 값.
실수타입 - 0~9로 이루어져 있으며, 소수점('.')을 사용할 수 있고, 3.24e3과 같이 지수형으로 표현 가능
문자열 타입 - 따옴표( ' 또는 " )로 둘러싼 문자열.
작은 따옴표 사용시, 값에 포함된 작은 따옴표는 \'로 입력
\ 기호 자체는 \\ 로 표시한다.
널 타입 - null

 

 

 

EL에서 객체에 접근

 

${<표현1>.<표현2>} 형식 사용
처리 과정
1.<표현1> <1>로 변환한다.
2.<1> null이면 null을 리턴한다.
3.<1> null이 아닐 경우 <표현2> <2>로 변환한다.
1.<2> null이면 null을 리턴한다.
4.<1> Map, List, 배열인 경우
1.<1> Map이면
1.<1>.containsKey(<2>) false이면 null을 리턴한다.
2.그렇지 않으면 <1>.get(<2>)리턴한다.
2.<1> List나 배열이면
1.<2>가 정수 값인지 검사한다. (정수 값이 아닐 경우 에러 발생)
2.<1>.get(<2>) 또는 Array.get(<1>, <2>)리턴한다.
3.위 코드가 예외를 발생하면 에러를 발생한다.
5.<1>이 다른 객체이면
1.<2>를 문자열로 변환한다.
2.<1>이 이름이 <2>이고 읽기 가능한 프로퍼티를 포함하고 있다면 프로퍼티의 값을 리턴한다.
3.그렇지 않을 경우 에러를 발생한다.

 

 

 

 

연산자

 

수치 연산자
+, -, *, / 또는 div, % 또는 mod
 
비교 연산자
== 또는 eq, != 또는 ne
< 또는 lt, <= 또는 le, > 또는 gt, >= 또는 ge
 
논리 연산자
&& 또는 and
|| 또는 or
! 또는 not
 
empty 연산자
empty <>
값이 null이면, true
값이 빈 문자열("")이면, true
값의 길이가 0인 배열이나 콜렉션이면 true
이 외의 경우에는 false
비교 선택 연산자
<수식> ? <1> : <2>

 

 

 

 

 

 

 

 

 

EL 클래스 메소드 호출

 

잘 사용은 하지 않는다.

 

클래스의 static 메서드를 EL에서 호출 가능

 

 

public class DateUtil {

    public static String format(Date date) {

        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");

        return formatter.format(date);

    }

}

 

클래스를 만든다

안에 있는 메소드를 TLD라는 파일을 작성해라

web.xml에서 TLD 파일을 지정해야한다

JSP코드에서 PLD에 정의한 함수를 실행한다

'JSP' 카테고리의 다른 글

JSTL 국제화태그  (0) 2023.11.02
JSTL  (0) 2023.11.02
세션 로그인  (0) 2023.10.26
세션  (0) 2023.10.26
JSP 쿠키  (0) 2023.10.26