이전글



표현 언어(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>
cs


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
cs


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



스코프 속성 참조 테스트
주석을 풀어가며 우선순위를 테스트 해보도록 합니다. 예제 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>
cs


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



다음글


연관글


블로그 이미지

도로락

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

댓글을 달아 주세요! 질문 환영합니다!