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 출력 -->