1. 유효 범위(scope)와 속성(attribute)
HTTP의 특징과 서블릿의 저장소(scope)에 대해서 알아보자.
- HTTP의 가장 큰 특징은 상태 정보를 저장하지 않는다(Stateless)
- 상태정보를 저장하지 않기 때문에 필요한 것이 저장소라는 개념이다.
- 저장소를 범위에 따라서 서블릿은 4개의 저장소를 제공한다(map의 형태로 Key, Value를 갖는다)
- 저장소에 저장 및 접근을 하기 위해서는 setAttribute() , getAttribute() 메서드를 사용한다.
- 저장소의 읽기 값 즉 Key를 속성(attribute)라고 한다.
- 저장소의 특징은 접근 범위, 생존기간으로 서로 다른 접근 범위와 생존기간을 가진 4개의 저장소를 가진다.
pageContext
- 지역변수를 저장, 기본객체도 지역변수로 가지고 있다.
- 위의 그림에서 처럼 login.jsp의 경우 PageContext 저장소는 login.jsp 페이지에서만 접근할 수 있다.
- 즉 읽기 및 쓰기가 한 페이지에 국한되어 있다.
- 같은 메서드 안에 있기 때문에 PageContext를 쓸 필요가 없게 느껴지지만 EL(표현 언어) 때문에 저장소에 저장하고 사용한다.
- EL이란 ${ }의 형태를 띈다. EL을 사용하기 위해서는 저장소에 저장을 해야만 저장소의 속성을 읽어 들일 수 있기 때문에 PageContext를 거쳐서 사용한다.
- EL을 사용하는 것 외에 유효범위가 한 페이지에 국한되기 때문에 유용하지 않고 잘 사용하지 않는다.
application
- WebApp 전체에서 접근가능하다.
- 전체에 딱 한 개만 존재한다. ( 공통 저장소 )
session⭐
- 클라이언트마다 한 개씩 존재한다.( 개별 저장소 )
- 로그인하면 개별 저장소가 생겼다가 로그아웃하면 개별 저장소를 제거
- 예시) id 저장, 장바구니 등 사용자가 사용할 수 있는 개별 정보를 session에 담는다.
- 세션 저장소의 문제는 사용자마다 한 개이기 때문에 최소한의 데이터만 저장해야 한다.
- 그러므로 4개의 저장소 중 제일 부담이 크다.
request⭐
- 요청할 때마다 하나씩 생긴다
- 서로 독립적이다.
- 요청이 처리되는 동안만 존재하고 요청이 끝나면 없어진다.
- 보통 request객체는 한 jsp페이지에서 사용되고 끝난다.
- 그러나 요청을 첫 번째 jsp가 받았다가 응답을 하지 않고 다른 jsp로 넘겨줄 수 도 있다. ( forward )
- 가능한 부담이 제일 없는 request객체를 사용하는 것이 Best❗
위의 내용을 표로 간략히 정리하면 아래와 같다
| 기본객체 | 유효 범위 | 설명 |
| pageContext | 1개 JSP 페이지 | JSP페이지의 시작부터 끝까지. 해당 JSP 내부에서만 접근가능.페이지당1개 |
| request | 1+개 JSP 페이지 | 요청의 시작부터 응답까지. 다른 JSP로 전달 가능. 요청마다 1개 |
| session | n개 JSP 페이지 | session의 시작부터 종료까지(로그인~로그아웃). 클라이언트마다 1개 |
| application | context 전체 | Web Application의 시작부터 종료까지. context내부 어디서나 접근가능 모든 클라이언트가 공유. cointext마다 1개 |
| 속성 관련 메서드 | 설명 |
| void setAttribute(String name, Object value) | 지정된 값(value)을 지정된 속성 이름(name)으로 저장 |
| Object getAttribute(String name) | 지정된 이름(name)으로 지정된 속성의 값을 반환 |
| void removeAttribute(String name) | 지정된 이름(name)의 속성을 삭제 |
| Enumeration getAttributeNames() | 기본 객체에 저장된 모든 속성의 이름을 반환 |
'Servlet&JSP' 카테고리의 다른 글
| 서블릿 URL 패턴 (0) | 2022.09.03 |
|---|---|
| 서블릿 & JSP(생명주기) (0) | 2022.09.03 |
| EL표기법 (0) | 2022.08.31 |