📕🐘 도로락 - 코끼리를 냉장고에 넣는 방법
Servlet&Jsp | 2019. 8. 7. 00:30

[서블릿/JSP] 표현 언어(EL)의 내장객체 사용법

이전글

[서블릿/JSP] 표현 언어(EL) 기본 사용법 및 자료형 설명

표현 언어(EL)를 이용한 내장객체 사용법

JSP에서는 request, session, application 등의 기본적인 내장객체에 대한 참조변수를 제공하여 사용할 수 있게 해줍니다. 표현언어(Expression Language)에서도 JSP와 마찬가지로 내장객체를 제공하지만 참조변수명이 JSP의것과 다릅니다.

추가적으로 JSP의 기본적인 내장객체와 다르게 HTTP 헤더를 참조할 수 있는 header객체나 쿠키를 참조할 수 있는 cookie객체 등을 추가로 제공합니다. EL에서 내장객체를 참조할때는 아래와 같이 사용합니다. 예제 GIT 링크

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%
    session.setAttribute("age", 29); //슬픔
%>
<html>
<head>
<title>EL의 내장 객체 사용</title>
</head>
<body>
요청 파라미터의 name값 : ${param.name}<br>
세션 스코프의 age 속성값 : ${sessionScope.age}
</body>
</html>

EL 구문으로 작성된 코드 몇 글자 만으로 요청파라미터와 세션에 바인딩된 속성값을 출력하였습니다.

내장 객체 종류와 설명

앞서 간단히 살펴본 예제와 같이 EL에서 사용할 수 있는 내장객체는 다음 표와 같은것들이 있습니다.

분류 내장 객체 설명 예시
스코프 pageScope page 영역의 Attribute에 바인딩 된 객체를 참조하는 Map객체 ${pageScope.속성명}
requestScope request 영역의 Attribute에 바인딩 된 객체를 참조하는 Map객체 ${requestScope.속성명}
sessionScope session 영역의 Attribute에 바인딩 된 객체를 참조하는 Map객체 ${sessionScope.속성명}
applicationScope application 영역의 Attribute에 바인딩 된 객체를 참조하는 Map객체 ${applicationScope.속성명}
요청 파라미터 param HTTP 요청 파라미터 값 참조하는 Map 객체 ${param.파라미터명}
paramValues HTTP 요청 파라미터를 배열로 참조합니다. param과는 다르게 배열이므로 속성명 뒤에 배열의 요소를 참조하는것처럼 [index]를 붙여주어야 함 ${paramValues.속성명[index]} ${paramValues.name[2]}
HTTP 헤더 header HTTP 요청 헤더의 값 ${header.헤더명}
쿠키 cookie 쿠키 값을 참조하는 Map<String, Cookie> 객체 ${cookie.쿠키명}
세션 session HttpSession 객체 참조 ${pageContext.session}
요청, 응답 request ServletRequest 객체 참조 ${pageContext.request}
response ServletResponse 객체 참조
Context 객체 pageContext PageContext 객체 참조 ${pageContext}
servletContext ServletContext 객체 참조 ${pageContext.servletContext}
초기화 파라미터 initParam 컨텍스트 초기화 파라미터 값 참조하는 Map 객체로 application.getInitParameter(name)과 동일 ${initParam.파라미터명}

EL에서 스코프(Scope) 객체의 속성 참조

EL에서는 단순히 속성명만을 지정해준 경우 암묵적으로 위 표에서 설명한 네가지 Scope 객체(pageScope, requestScope, sessionScope, applicationScope)를 차례대로 탐색하며 getAttribute()를 호출하여 값을 얻어냅니다.

위 그림은 아래와 같이 EL 표현식을 사용한 경우입니다. pageScope에 값이 없는 경우 우선순위에 따라 탐색하다 sessionScope에서 값을 찾아 리턴합니다.

이름은 : ${name} //dololak

만약 각 스코프별로 같은 name의 속성이 존재하고 특정 스코프객체의 속성값이 필요한 경우 해당 스코프 내장객체변수를 이용하여 속성을 얻어내면 됩니다.

이름은 : ${applicationScope.name}

스코프 속성 참조 테스트

주석을 풀어가며 우선순위를 테스트 해보도록 합니다. 예제 GIT 링크

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%
//     pageContext.setAttribute("name", "dololak1");
//     request.setAttribute("name", "dololak2");
    session.setAttribute("name", "dololak3");
    application.setAttribute("name", "dololak4");
%>
<html>
<head>
<title>EL의 스코프 우선 순위</title>
</head>
<body>
이름은 : ${name}
</body>
</html>

sessionScopeapplicationScope보다 우선순위에 있기때문에 dololak3이 출력됩니다.

다음글

[서블릿/JSP] 표현 언어(EL)의 연산자 규칙 및 사용법.

[서블릿/JSP] 표현언어(EL)에서 ${}과 #{} 표기법의 차이

[서블릿/JSP] 표현 언어(EL)의 일반객체 및 컬렉션객체 사용법

연관글

[서블릿/JSP] JSP 기본객체 종류

[서블릿/JSP] JSP 기본 객체 getAttributeNames() 사용하기

[서블릿/JSP] JSP 기본 객체별 생명 주기(scope)

도로락

도로락

Writer

IT, 프로그래밍, 컴퓨터 활용 정보 등을 위한 블로그