PageContextJSP한 페이지 처리 동안만JSP 안에서만 임시 공유 // 📄JSP (해당 JSP 페이지에서만 사용 가능)
<%
pageContext.setAttribute("k", v);
%>
// 📄JSP
${ pageContext.k }
HttpServletRequest// 📄Servlet
req.setAttribute("k", v);
// 📄JSP
${ requestScope.k }
HttpSessionsession.setAttribute("k", v);
// 📄JSP
${ sessionScope.k }
ServletContextgetServletContext().setAttribute("k", v);
// 📄JSP
${ applicationScope.k }
JSP/EL에서 ${ K } 라고만 썼을 때 여러 스코프 (page, request, session, application)에 같은 이름의 속성이 있으면 우선순위 규칙으로 반환 된다.
JSP EL은 내부적으로 4대 스코프를 순서대로 탐색한다.
1️⃣pageScope
2️⃣requestScope
3️⃣sessionScope
4️⃣applicationScope
즉, 동일한 key "k"가 여러 스코프에 존재하면 가장 가까운 (page → request → session → application)스코프의 값을 먼저 찾고 반환한다.
<;%
pageContext.setAttribute("k", "page-value");
request.setAttribute("k", "request-value");
session.setAttribute("k", "session-value");
application.setAttribute("k", "application-value");
%>
${k} <!-- EL 기본 탐색 (page → request → session → application 순서) -->
${pageScope.k} <!-- 특정 스코프 강제 -->
${requestScope.k}
${sessionScope.k}
${applicationScope.k}
page-value
page-value
request-value
session-value
application-value
💡결론
${ k }만 쓰면 EL은 가장 가까운 스코프부터 순서대로 탐색${ pageScope.k } ... 처럼 명시해야 한다.개발자가 직접 setAttribute()로 저장하는게 아니라 JSP 컨테이너 EL에서 바로 조회할 수 있도록 제공하는 객체이다.
${ param.id } → "hong"${ paramValues.hobby[0] }${ header["User-Agent"] }${ headerValues["Accept"][0] }${ cookie.userId.value }web.xml의 <context-param> 초기화 파라미터 (ServletContext init-param)${ initParam["cdn.url"] }JSP의 최상위 내장 객체 중 하나
💡 EL에서는 잘 쓰지 않지만 스크립틀릿이나 커스텀 태그에서 활용됨
<;%= pageContext.getRequest() %> // HttpServletRequest
<%= pageContext.getSession() %> // HttpSession
<%= pageContext.getServletContext() %> // Application
💡 EL로 사용할 때는 템플릿 언어처럼 깔끔하게 데이터 표현만 하도록 전용 문법으로 작성한다.
// 📄JSP (스크립틀릿 표현식)
<%= pageContext.getRequest().getMethod() %>
// 📄JSP (EL)
${pageContext.request.method}