14. 서블릿과 JSP(2) 25:09
8. 유효 범위(scope)의 속성(attribute)
HTTP 특징 - Stateless(상태정보 저장x), Stateful(상태정보 저장o)
접근범위와, 생존기간에 따라 4개의 저장소로 분류된다.
사용 목적에 따라 알맞은 저장소를 사용하면 된다.
저장소는 Map 형태로 되어있다.
Key | Value |
속성1 | 속성값 |
1. pageContext
lv를 저장한다. 기본객체(request, response)도 들어있다.
코드들은 login.jsp -> pageContext를 거쳐(같은 페이지) 접근(읽기, 쓰기)할 수 있다.
pageContext는 &{ } EL 때문에 사용한다. (차후 설명)
2. application
WebApp 전체에서 접근 가능. (공통저장소)
Attribute -> 속성
저장소 Map에 저장할 때 쓰는 메서드가 setAttribute() 쓰기(저장), 읽어올 때 쓰는 메서드가 getAttribute()
모든페이지에서 접근할 때 편하긴 한데, 다른 사용자가 접근 할 때.. 키값이 동일한 경우 Value값이 변경됨..
3. Session
개별 저장소
클라이언트마다 1개 씩 있음 - 1:1
Cookie : 세션은 쿠키를 이용해서 이 객체가 어떤 사람건지 연결해주는 역활 해줌.(id 뿐만 아니라 장바구니)
사용자마다 1개씩 갖는 개별저장소.. x 사용자 숫자만큼 개수가 늘어나기 때문에
session 저장공간에는 최소한의 데이터만 저장해야 한다. 왜? 서버 메모리 부담이 커서.
최소한!!
4. request
Key | Value |
속성1 | 값 |
request 객체가 갖고 있는 Map
요청할 때마다 하나씩 생김. 독립적
보통은 요청이 하나의 JSP에서 끝나는데
이 요청을 JSP가 받았다가 응답하지 않고 다른 JSP로 넘겨줄 수 있다.
본인이 응답할 수 있는게 아닐때 데이터를 다른 JSP로 넘겨주는 방법이 forward
그래서 forward들을 사용하면 JSP의 request 데이터를 다른 JSP에서 사용할 수 있다.
기본 객체 | 유효 범위 | 설명 |
pageContext | 1개 JSP 페이지 | JSP 페이지의 시작부터 끝까지. 해당 JSP 내부에서만 접근가능. 페이지당 1개 EL ${}때문에 사용함 |
request | 1+개 JSP 페이지 | 요청의 시작부터 응답까지. 다른 JSP로 전달(forword) 가능. 요청마다 1개 |
session | n개 JSP 페이지 | session의 시작부터 종료까지(로그인~로그아웃). 클라이언트마다 1개 서버부담 큼. 사용 최소화. |
application | context 전체 | Web Application의 시작부터 종료까지. context내부 어디서나 접근 가능 모든 클라이언트가 공유. context마다 1개 |
속성 관련 메서드 | 설명 |
void setAttribute(String name, Object value) | 지정된 값(value)을 지정된 속성 이름(name)으로 저장, 쓰기 |
Object getAttribute(String name) | 지정된 이름(name)으로 저장된 속성의 값을 반환, 읽기 |
void removeAttribute(String name) | 지정된 이름(name)의 속성을 삭제 |
Enumeration getAttributeNames() | 기본 객체에 저장된 모든 속성의 이름을 반환 |