우와한 개발자

[JSP] EL (Expression Language) 이란? JSP 공유 영역과 스코프 객체

by 우와한개발자

1. EL(Expression Language)이란?

  • JSP에서 데이터를 더 간단하게 출력하기 위한 표현식 언어
  • 기존 <%= %>를 대체하기 위해 사용
  • ${} 형태로 사용
<% out.print("hello") %>   <!-- JSP의 스크립트릿 -->
<%= "hello" %>             <!-- JSP의 표현식 -->
${"hello"}                 <!-- EL -->
  • 객체의 속성에 접근할 때는 . 또는 ["속성명"] 방식을 사용
${p.name}      <!-- getter 호출 -->
${p["age"]}    <!-- Map / 배열 접근 -->

 

2. EL 동작 원리

  • ${p.name} 이면 내부적으로 p.getName() (getter) 자동 호출
  • Java Bean 규칙(getter 필수)을 반드시 따라야 함
  • ${null} : 에러 없이 공백으로 출력
  • EL 문자를 그대로 출력하고 싶으면 \\ 사용
\\${5 > 2}  <!-- ${5 > 2} 문자 그대로 출력 -->

 

3. JSP vs EL 비교

  • EL이 없어도 JSP만으로 모두 처리할 수 있지만 EL을 함께 사용하면 출력 코드가 훨씬 간결해짐.
구분 JSP EL
역할 로직 처리 + 데이터 저장/조회 데이터 출력 전용
문법 <% %>, <%= %> ${}
Java 코드 사용 가능 불가
조건문 / 반복문 가능 불가
null 처리 NullPointerException 발생 가능 공백으로 출력 (에러 없음)
코드 가독성 낮음 높음
<%-- JSP로 저장 --%>
<% request.setAttribute("name", "kim"); %>

<%-- EL로 출력 (간결) --%>
${name}

<%-- JSP 표현식으로 출력 (EL 없이) --%>
<%= request.getAttribute("name") %>

 

4. JSP 기본 객체 영역(Scope)

  • JSP 내장객체는 각각 데이터를 저장하는 속성 Map(공유 영역)을 가지고 있어 EL 내장 객체와 데이터를 공유함.
  • request.setAttribute("name", "kim")으로 저장한 값은 requestScope를 통해 ${requestScope.name} 또는 ${name}으로 꺼낼 수 있음.
JSP 내장객체 타입 설명
pageContext PageContext 현재 페이지 범위
request HttpServletRequest 요청 1회 범위
session HttpSession 세션 유지 범위
application ServletContext 서버 전체 범위
request 객체 
├── URI 정보
├── 헤더 정보
├── 파라미터 정보
└── Map (속성 저장소) ← setAttribute/getAttribute 여기에 저장됨
    ├── "name" → "kim"
    └── "age"  → "20"
    
(pageContext, session, application 도 각각 Map을 지님) 

 

5. EL 스코프 내장객체

  • EL의 스코프 객체는 JSP 내장객체 자체가 아니라, 그 내부 Map에만 접근하는 창구역할
JSP 내장객체 EL 내장객체 접근 예시
pageContext pageScope ${pageScope.name}
request requestScope ${requestScope.name}
session sessionScope ${sessionScope.name}
application applicationScope ${applicationScope.name}
❓ EL로 JSP의 request 객체 자체를 가져오려면? ${pageContext.request}를 사용하면 가져올 수 있음

 

6. EL 탐색 순서

  • ${name}`처럼 scope를 생략하면 pageScope → requestScope → sessionScope → applicationScope 순서로 탐색하여 먼저 찾은 값을 반환
<%
    pageContext.setAttribute("name", "pageScope의 name");
    request.setAttribute("name", "requestScope의 name");
    session.setAttribute("name", "sessionScope의 name");
    application.setAttribute("name", "applicationScope의 name");
%>
${name} <!-- pageScope의 name 출력 -->

블로그의 정보

우와한개발자 님의 블로그

우와한개발자

활동하기