Java : JSP 저장소 (4대 스코프와 EL 내장 객체)

NuyHes·2025년 8월 21일
0

[Study]

목록 보기
69/71
post-thumbnail

1. JSP/Servlet의 저장 객체 (4대 스코프)

📌 Page (PageScope)

  • 실제 객체 : PageContext
  • 생존 범위/수명 : 현재 JSP한 페이지 처리 동안만
  • 대표 용도 : 같은 JSP 안에서만 임시 공유

예시

  • 설정
 // 📄JSP (해당 JSP 페이지에서만 사용 가능)
 <%  
     pageContext.setAttribute("k", v);
   %>
  • 조회
// 📄JSP
${ pageContext.k }

📌 Request

  • 실제 객체 : HttpServletRequest
  • 생존 범위/수명 : 요청 한 번 (= forward/include 체인 전체)
  • 대표 용도 : 컨트롤러 → 뷰 데이터 전달 (MVC 모델)

예시

  • 설정
// 📄Servlet
req.setAttribute("k", v);
  • 조회
// 📄JSP
${ requestScope.k }

📌 Session

  • 실제 객체 : HttpSession
  • 생존 범위/수명 : 사용자 세션 동안 (만료/로그아웃까지)
  • 대표 용도 : 로그인/개인설정 등 사용자 상태

예시

  • 설정
session.setAttribute("k", v);
  • 조회
// 📄JSP
${ sessionScope.k }

📌 Application

  • 실제 객체 : ServletContext
  • 생존 범위/수명 : 웹앱 생존 기간 전체 (서버 구동-종료)
  • 대표 용도 : 전역 캐시/설정값 (모든 사용자 공유)

예시

  • 설정
getServletContext().setAttribute("k", v);
  • 조회
// 📄JSP
${ applicationScope.k }

🕵️ JSP/EL 탐색 우선순위 규칙

JSP/EL에서 ${ K } 라고만 썼을 때 여러 스코프 (page, request, session, application)에 같은 이름의 속성이 있으면 우선순위 규칙으로 반환 된다.

📌 EL 변수 탐색 우선순위

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은 가장 가까운 스코프부터 순서대로 탐색
  • page → request → session → application
  • 동일 key가 여러 스코프에 있으면 우선순위가 높은 쪽이 출력된다
  • 특정 스코프를 강제하고 싶으면 ${ pageScope.k } ... 처럼 명시해야 한다.

2. EL 기본 내장 객체 (읽기 전용)

개발자가 직접 setAttribute()로 저장하는게 아니라 JSP 컨테이너 EL에서 바로 조회할 수 있도록 제공하는 객체이다.

📌 param

  • 설명 : 단일 요청 파라미터(String)
  • 읽기 예시 : ${ param.id } → "hong"

📌 paramValues

  • 설명 : 요청 파라미터 배열(String[])
  • 읽기 예시 : ${ paramValues.hobby[0] }

📌 header

  • 설명 : HTTP 요청 헤더 (첫 값만)
  • 읽기 예시 : ${ header["User-Agent"] }

📌 headerValues

  • 설명 : 요청 헤더 전체 배열
  • 읽기 예시 : ${ headerValues["Accept"][0] }

  • 설명 : 요청 쿠키(Map<쿠키명, Cookie객체>)
  • 읽기 예시 : ${ cookie.userId.value }

📌 initParam

  • 설명 : web.xml<context-param> 초기화 파라미터 (ServletContext init-param)
  • 읽기 예시 : ${ initParam["cdn.url"] }

3. PageContext

JSP의 최상위 내장 객체 중 하나

💡 EL에서는 잘 쓰지 않지만 스크립틀릿이나 커스텀 태그에서 활용됨

🕵️ 다양한 내장 객체 접근 가능

<;%= pageContext.getRequest() %>       // HttpServletRequest
<%= pageContext.getSession() %>       // HttpSession
<%= pageContext.getServletContext() %> // Application
  • 특징 : pageContext.findAttribute("name") 호출 시 page → request → session → application 순서로 검색

💡 EL로 사용할 때는 템플릿 언어처럼 깔끔하게 데이터 표현만 하도록 전용 문법으로 작성한다.

  • 예시 :
// 📄JSP (스크립틀릿 표현식)
<%= pageContext.getRequest().getMethod() %>

// 📄JSP (EL)
${pageContext.request.method}

0개의 댓글