[JSP] SCOPE(Request, Session, Application, Page) #2
[JSP] SCOPE(Request, Session, Application, Page) #2
- 요청 스코프(Request Scope)
- Server는 Client의 HTTP 요청이 있을때 마다 "javax.servlet.http.HttpServletRequest Interface"를 구현한 객체(A)를 생성함.
- A는 request scope 의 생명주기 동안에 객체들을 저장할 수 있는 key(String Type)/value(All type) 속성 쌍들의 컬렉션을 담고 있음.
- 중요 Method
- public void setAttribute(String name, Object obj);
- public Object getAttribute(String name);
- removeAttribute(); 해당 스코프의 속성은 이 메소드로 삭제, 속성의 유효 범위는 요청의 존속 기간 동안임. Server는 요청을 처리하면 Client에게 응답을 return, Client는 자신에게 돌아온 요청(+ 요청의 속성)을 사용할 수 없음, 따라서 JVM의 가비지 컬렉션의 대상으로 설정됨.
- 세션 스코프(Session Scope)
- 웹 컨테이너는 다중 페이지 요청이 발생하면 사용자 식별을 위해 "javax.servlet.http.HttpSession" Interface를 구현한 객체(B)를 생성함.
- B는 일정 시간동안 유지됨(요청 빈도를 기준으로).
- B의 소멸 시간은 Application's deployment descriptor를 통해 설정하거나, "invalidate();" 메소드를 통해 가능함.
- 위 request Scope와 마찬가지로 key(String Type)/value(All type) 쌍으로 저장이 가능.
- 다수의 요청에 의해 존재하는 Session Scope는 Request Scope보다 생명주기가 김.
- 애플리케이션 스코프(Application Scope)
- "javax.servlet.ServletContext" Interface를 구현한 객체가 있는 컨테이너안에 설치됨( 컨테이너 시작시 실행).
- 가시성, 생명주기가 객체에 저장됨.
- 애플리케이션 스코프 객체의 확인 범위는 모든 클라이언트와 발생되는 웹 어플리케이션임.
- 생명주기는 객체의 제거, 또는 애플리케이션이 종료할때까지.
- 페이지 스코프(Page Scope)
- JSP페이지에서 전반적으로 사용.
- 페이지 스코프의 객체는 "javax.servlet.jsp.PageContext"에 저장되고 접근범위는 그 객체를 생성한 JSP페이지를 통해서만 가능.
- Client로부터 응답을 보내거나 Page를 다를 자원에 Forward시키면 해당 객체의 생명주기는 없어짐.
- 모든 JSP 페이지는 "pageContext"라는 객체 참조값을 포함(JSP가 생성될 때 자동으로 생성).
- pageContext를 통해 페이지 레벨(page-level) 객체를 조회 및 저장 가능.
※ Request Scope 와 Session Scope는 ServletContext의 Lower Scope임.
※ ServletContext는 모든 Application에서 Application Object를 저장, 조회할수 있도록 함.