PageContext
JSP
한 페이지 처리 동안만JSP
안에서만 임시 공유 // 📄JSP (해당 JSP 페이지에서만 사용 가능)
<%
pageContext.setAttribute("k", v);
%>
// 📄JSP
${ pageContext.k }
HttpServletRequest
// 📄Servlet
req.setAttribute("k", v);
// 📄JSP
${ requestScope.k }
HttpSession
session.setAttribute("k", v);
// 📄JSP
${ sessionScope.k }
ServletContext
getServletContext().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}