2-14 서블릿과 JSP (2)

서현우·2022년 5월 12일
0

스프링의정석

목록 보기
14/85

유효범위(scope)와 속성(attribute)

HTTP특징 - 상태 정보 저장 X(Stateless)
따라서 저장소가 필요(저장소(Stateful) - 상태 정보 저장 O)

4개의 저장소(접근 범위, 생존 기간에 따라 구분)

저장소는 Map 형태(Key:속성, Value:속성값).

Map에 읽기, 쓰기 가능.
읽기 : getAttribute()
쓰기 : setAttribute()

1. pageContext

JSP에 존재.
lv를 저장.(기본객체 request, response 등)
접근 범위 : 각 페이지(ex. login.jsp) 안에서만 접근 가능.
다른 페이지(ex. write.jsp)에서 접근 불가.
(접근 가능하다는 것은 저장소에 읽기, 쓰기가 가능하다는 것)
요청(request)할 때 마다 초기화 됨.

lv를 저장소 pageContext에 저장해서 쓰는 이유

${ } EL때문.
<%= lv %>은 저장소에 없어도 사용 가능.
But EL(${lv})은 lv에 직접 접근할 수 없으므로 이렇게 사용 불가.
EL을 사용하려면 반드시 저장소 pageContext에 먼저 저장을 해야 읽을 수 있음.
따라서 lv(기본객체)를 EL에서 사용하려면 꼭 pageContext를 거쳐야 읽고 쓰기 가능.

2. application

접근 범위 : WebApp(Servlet Context)전체에서 접근 가능.
공통 저장소. 단 1개만 존재.
어느 곳에서든 읽기, 쓰기가 가능.

3. Session

접근 범위 : 클라이언트마다 각각 1개씩 있는 개별 저장소.
(클라이언트가 접근하는 페이지에서도 접근 가능)
생존 기간 : 로그인에서 로그아웃까지.
로그인시 각 클라이언트마다 따로 1개씩 있으므로
각각의 id를 저장해서 클라이언트를 구별 가능.
로그인하면 Session이 생겼다가, 로그아웃하면 제거하면 됨.
이 개별 저장소에는 id, 장바구니같이 각 사용자의 개별 정보를 담으면 좋음.
But 편리하지만 사용자마다 1개씩 갖기 때문에 최소한의 데이터만 저장 해야 한다.
왜냐하면 서버 부담이 제일 크기 때문.

4. request

접근 범위 : 요청마다 독립적.
생존 기간 : 요청이 처리되는 동안에만 존재.
request객체가 가지고 있는 Map.
요청할 때마다 하나씩 생김.
forward : request객체를 처리하지 못해서 다른 페이지로 넘기는 것.
--> request객체에 데이터를 저장해서 a.jsp에서 b.jsp로 전달 가능.
서버의 부담이 제일 적음.

속성 관련 메서드

//지정된 값(value)을 지정된 속성 이름(name)으로 저장
void setAttribute(String name, Object value) 

//지정된 이름(name)으로 저장된 속성의 값을 반환
Object getAttribute(String name)

//지정된 이름(name)의 속성을 삭제
void removeAttribute(String name)

//기본 객체에 저장된 모든 속성의 이름을 반환
Enumeration getAttributeNames()
 
profile
안녕하세요!!

0개의 댓글