JSP pageContext 객체란 무엇인가?
pageContext 객체는 javax.servlet.jsp.PageContext 클래스의 인스턴스로, JSP 페이지 전체를 대표하는 내장 객체입니다. JSP가 서블릿으로 변환될 때 자동으로 생성되며, 페이지 실행에 필요한 다양한 정보와 기능을 하나의 진입점을 통해 제공합니다.
이 객체의 핵심 목적은 구현 세부 사항을 직접 다루지 않고도 페이지 관련 정보에 접근할 수 있도록 하는 것입니다. 덕분에 개발자는 컨테이너의 내부 동작을 몰라도 일관된 방식으로 JSP 페이지를 제어할 수 있습니다.
pageContext 객체의 주요 역할
1. 요청 및 응답 객체 참조 저장
pageContext 객체는 각 요청마다 request와 response 객체에 대한 참조를 저장합니다. 또한 application, config, session, out 객체들도 이 객체의 속성에 접근하여 얻을 수 있습니다. 즉, pageContext는 다른 모든 내장 객체로 연결되는 허브 역할을 한다고 볼 수 있습니다.
2. 페이지 지시문 정보 보관
pageContext 객체에는 JSP 페이지에 전달된 지시문(directive) 정보도 포함되어 있습니다. 여기에는 버퍼링(buffering) 설정, 오류 발생 시 이동할 errorPageURL, 그리고 페이지 유효 범위(page scope) 등이 포함됩니다.
4가지 속성 범위(Scope)
PageContext 클래스는 네 가지 범위를 식별하기 위한 필드를 정의하고 있습니다.
- PAGE_SCOPE — 현재 JSP 페이지 내에서만 유효
- REQUEST_SCOPE — 현재 요청이 처리되는 동안 유효
- SESSION_SCOPE — 사용자 세션이 유지되는 동안 유효
- APPLICATION_SCOPE — 웹 애플리케이션 전체에서 유효
PageContext 클래스는 40개 이상의 메서드를 지원하며, 그중 약 절반은 부모 클래스인 javax.servlet.jsp.JspContext 클래스로부터 상속받은 것입니다.
핵심 메서드: removeAttribute()
그중에서도 자주 사용되는 중요한 메서드가 removeAttribute입니다. 이 메서드는 인수를 한 개 또는 두 개 받을 수 있습니다.
예를 들어 아래와 같이 인수를 하나만 전달하면 해당 속성이 모든 범위(scope)에서 제거됩니다.
pageContext.removeAttribute("attrName");
반면, 범위를 두 번째 인수로 함께 지정하면 해당 범위에서만 속성이 제거됩니다. 예를 들어 다음 코드는 페이지 범위(page scope)에서만 속성을 삭제합니다.
pageContext.removeAttribute("attrName", PageContext.PAGE_SCOPE);
정리
pageContext 객체는 JSP 페이지의 요청·응답 정보, 지시문 설정, 그리고 네 가지 속성 범위를 통합적으로 관리하는 중심 객체입니다. 특히 removeAttribute()처럼 범위를 명확히 지정할 수 있는 메서드를 활용하면 속성 관리를 더욱 정교하게 처리할 수 있습니다.