[부스트코스] 2-5. Scope
<Servlet & JSP의 4가지 Scope>
Page Scope -> Request Scope -> Session Scope -> Application Scope
뒤로 갈수록 범위가 넓어짐.
1) Page Scope: 한 페이지에서만 유지, 지역변수처럼 사용
- PageContext라는 추상 클래스 사용
- PageContext라는 JSP 내장 객체가 있음
- 한 페이지 내에서만 유지되는 것이므로 forward로 다른 페이지로 넘어가면 소멸됨
- 지역변수처럼 사용하지만 지역변수와 완전히 같은 것은 아님 (나중에 EL, JSTL을 배우면 안다?)
- pageContext.setAttribute() / getAttribute() 로 저장했다가 뺐다가 하면 됨 (다른 scope들도 다 비슷함)
2) Request Scope: 하나의 Request를 받아서 클라이언트에게 Response할 때까지 변수가 유지
- HttpServletRequest 객체 사용
> JSP에서는 request 내장 객체 사용
> 서블릿에서는 HttpServletRequest 객체 사용
- request.setAttribute / getAttribute() 로 사용
- 하나의 Request가 끝나서 Response가 돌아갈 때까지 유지되므로, forward시 값을 유지할 수 있다
> redirect의 경우 Request가 자동으로 하나 더 생성되는 것이므로 값이 끝까지 유지되지 않음
3) Session Scope: 세션 객체의 생성 - 소멸까지 유지, 즉 웹 브라우저별로 변수가 유지
- 로그인 정보, 장바구니처럼 사용자별로 유지되어야 하는 정보
- 브라우저에서 탭 여러개를 열어도 탭끼리 세션정보가 공유되므로 여러 탭에서 같은 세션정보를 사용할 수 있다
- HttpSession 인터페이스를 구현한 객체를 사용
> JSP에서는 session 내장 객체 사용
> 서블릿에서는 HttpServletRequest의 getSession() 메서드를 이용해서 session 객체를 얻어야 함
- session.setAttribute() / getAttribute() 사용
4) Application Scope: 웹 App이 시작되고 종료될 때까지 변수가 유지
- 하나의 프로젝트 = 하나의 웹 App = 하나의 application 객체
- 하나의 웹 App을 사용하는 모든 클라이언트가 공통으로 사용해야 할 값들이 있을 때 사용
- ServletContext 인터페이스를 구현한 객체를 사용
> JSP에서는 application 내장 객체 사용
> 서블릿에서는 getServletContext() 메서드를 이용하여 application 객체 이용
- application.setAttribute() / getAttribute() 사용