Servlet&JSP

서블릿 기본객체 저장소

odong2 2022. 9. 3. 22:51

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() 기본 객체에 저장된 모든 속성의 이름을 반환